代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
C
】
贪吃蛇
作者:
DDT
/ 发布于
2012/6/12
/
533
贪吃蛇
#include<stdio.h> #include<windows.h> #include<time.h> #include<stdlib.h> #include<conio.h> #define N 21 FILE *fp; int S; void boundary(void);//开始界面 void end(void); //结束</div> <div>void gotoxy(int x,int y)//位置函数 { COORD pos; pos.X=x; pos.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos); } <div>void color(int a)//颜色函数</div> <div>{ SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a); } <div></div> <div>void init(int food[2])//初始化函数(初始化围墙、显示信息、苹果)</div> <div>{ system("cls"); int i,j;//初始化围墙 int wall[N+2][N+2]={{0}};//初始化围墙的二维数组 for(i=1;i<=N;i++) { for(j=1;j<=N;j++) wall[i][j]=1; } color(10); for(i=0;i<N+2;i++)//畵围墙 { for(j=0;j<N+2;j++) { if(wall[i][j]) printf(" "); else printf("#") ; } printf("\n") ; } gotoxy(N+3,3);//显示信息 color(14); printf("\t\t按a,b,c,d改变方向\n");</div> <div>gotoxy(N+3,1); color(14); printf("\t\t按任意键暂停,按1返回,按2退出\n"); gotoxy(N+5,3); color(14); printf("score:\n"); food[0]=rand()%N+1;//随机出现食物 food[1]=rand()%N+1; gotoxy(food[0],food[1]); color(12); printf("*\n"); } <div>void play()//具体玩的过程 { system("cls"); int i,j; int** snake=NULL;//定义蛇的二维指针 int food[2];//食物的数组,food[0]代表横坐标,food[1]代表纵坐标 int score=0;//为得分 int tail[2];//此数组为了记录蛇的头的坐标 int node=3;//蛇的节数 char ch='p'; srand((unsigned)time(NULL));//随机数发生器的初始化函数 init(food); snake=(int**)realloc(snake,sizeof(int*)*node);//改变snake所指内存区域的大小为node长度 for(i=0;i<node;i++) snake[i]=(int*)malloc(sizeof(int)*2); for(i=0;i<node;i++)//初始化蛇的长度 { snake[i][0]=N/2; snake[i][1]=N/2+i; gotoxy(snake[i][0],snake[i][1]); color(14); printf("*\n"); } while(1)//进入消息循环 { gotoxy(5,0); color(10); printf("#"); gotoxy(0,5); color(10); printf("#"); gotoxy(0,7); color(10); printf("#"); gotoxy(0,9); color(10); printf("#"); tail[0]=snake[node-1][0];//将蛇的后一节坐标赋给tail数组 tail[1]=snake[node-1][1]; gotoxy(tail[0],tail[1]); color(0); printf(" "); for(i=node-1;i>0;i--)//蛇想前移动的关键算法,后一节的占据前一节的地址坐标 { snake[i][0]=snake[i-1][0]; snake[i][1]=snake[i-1][1]; gotoxy(snake[i][0],snake[i][1]); color(14); printf("*\n"); } if(kbhit())//捕捉输入信息 { gotoxy(0,N+2); ch=getche(); } switch(ch) { case 'w':snake[0][1]--;break; case 's':snake[0][1]++;break; case 'a':snake[0][0]--;break; case 'd':snake[0][0]++;break; case '1':boundary() ;break; case '2':end();break; default: break; } gotoxy(snake[0][0],snake[0][1]); color(14); printf("*\n"); Sleep(abs(200-0.5*score));//使随着分数的增长蛇的移动速度越来越快 if(snake[0][0]==food[0]&&snake[0][1]==food[1])//吃掉食物后蛇分数加1,蛇长加1 { score++;//分数增加 S=score; node++;//节数增加 snake=(int**)realloc(snake,sizeof(int*)*node); snake[node-1]=(int*)malloc(sizeof(int)*2); food[0]=rand()%N+1;//产生随机数且要在围墙内部 food[1]=rand()%N+1; gotoxy(food[0],food[1]); color(12); printf("*\n"); gotoxy(N+12,3); color(14); printf("%d\n",score);//输出得分 } if(snake[0][1]==0||snake[0][1]==N+1||snake[0][0]==0||snake[0][0]==N+1)//撞到围墙后失败 { gotoxy(N/2,N/2); color(30); printf("GAME OVER!!!\n"); for(i=0;i<node;i++) free(snake[i]); Sleep(INFINITE); exit(0); } } //从蛇的第四节开始判断是否撞到自己,因为蛇头为两节,第三节不可能拐过来</div> <div> for (i=3; i<node; i++)</div> <div> { for(j=0;j<node;j++)</div> <div> { if (snake[i][0]==snake[j][0] && snake[i][1]==snake[j][1]) { gotoxy(N/2,N/2); color(30); printf("GAME OVER!!!\n"); for(i=0;i<node;i++) free(snake[i]); Sleep(INFINITE); exit(0);; } <div> } } } <div>void end()//结束函数 { system("cls"); system("cls"); printf("EXIT!!!\n"); } <div> void grade()//成绩记录函数 { system("cls"); int i=0; char s;</div> if( (fp=fopen("f:\\贪吃蛇\\贪吃蛇.txt","ar") )==NULL)//打开文件 { printf("\nCannot open file!\n"); exit(0); } if(i<S)i=S; color(14); fwrite(&i,sizeof(i),1,fp); fclose(fp); printf("最高的分为:%d\n\n",i); printf("\t按1返回\n\n"); printf("\t按2退出\n\n"); s=getche(); switch(s) { case '1':boundary();break; case '2': end();break; } </div> <div>} <div>void boundary()//开始界面 { system("cls"); char s; color(14); printf("\t\t欢迎来玩!!\n\n"); printf("\t\t1:开始\n\n"); printf("\t\t2:查看成绩\n\n"); printf("\t\t3:退出\n\n"); printf("\t\t请选择:"); s=getche(); switch(s) { case '1': play();break; case '2': grade();break; case '3': end();break; } } <div>int main() { boundary(); getchar(); return 0; } </div>
试试其它关键字
贪吃蛇
同语言下
.
获取手机通讯录 iOS去除数字以外的所有字符
.
异步加载音乐等资源
.
交通罚单管理系统
.
freemark实现,简单的替换
.
计算斐波那契数列
.
base64解码 包括解码长度
.
图像显示
.
冒泡排序
.
输入十进制数,输出指定进制
.
链式栈
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
DDT
贡献的其它代码
(
160
)
.
Oracle统计表的数据行和数据块信息
.
html标签闭合检测与修复
.
Powershell日期计算
.
Powershell的Base64编解码
.
Powershell并行循环
.
Powershell目录中搜索文本
.
Powershell枚举远程机器上的本地权限组
.
VBScript解析csv文件
.
快速排序之Powershell
.
批处理输出格式化时间字符串
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3