C语言实现贪吃蛇源码.docx
- 文档编号:29662649
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:7
- 大小:16.12KB
C语言实现贪吃蛇源码.docx
《C语言实现贪吃蛇源码.docx》由会员分享,可在线阅读,更多相关《C语言实现贪吃蛇源码.docx(7页珍藏版)》请在冰豆网上搜索。
C语言实现贪吃蛇源码
C语言实现贪吃蛇源码
//头文件
#include
#include
#include
#include
#include
#include
//使用标准命名空间
usingnamespacestd;
#defineN21//宏定义,整个盘的大小
//定义位置函数
voidgotoxy(intx,inty)//位置函数
{
COORDpos;//新建一个坐标(位置)对象
pos.X=2*x;//x方向
pos.Y=y;//x方向
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);//SetConsoleCursorPosition是API中定位光标位置的函数。
/*
*如果用户定义了COORDpos,那么pos其实是一个结构体变量,其中X和Y是它的成员,
*通过修改pos.X和pos.Y的值就可以实现光标的位置控制。
*/
}
//定义颜色函数
voidcolor(inta)//颜色函数
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
//定义初始化函数
voidinit(intapple[2])//初始化函数(初始化围墙、显示信息、苹果)
{
inti,j;//初始化围墙
//先将23X23的区域置为0
intwall[N+2][N+2]={{0}};
//将21X21的区域的值全部置为1
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
wall[i][j]=1;
}
color(11);//设置颜色
//扫描23X23的区域,给相应位置加上图形
for(i=0;i { for(j=0;j { if(wall[i][j])//值为1的位置 cout<<"■";//不要换行 elsecout<<"□";//值为0的位置 } cout< } gotoxy(N+3,1);//显示信息 color(20); cout<<"按WSAD移动方向"< gotoxy(N+3,2); color(20); cout<<"按任意键暂停"< gotoxy(N+3,3); color(20); cout<<"得分: "< apple[0]=rand()%N+1;//给苹果设置随机x坐标 apple[1]=rand()%N+1;//给苹果设置随机y坐标 //指定初始苹果的位置 gotoxy(apple[0],apple[1]); color(12); cout<<"●"< } //主函数,从这里开始 intmain()//主函数 { inti,j;//定义整型i,j int**snake=NULL;//指针的指针 intapple[2];//定义苹果数组(3个) intscore=0;//定义并初始化分数为0 inttail[2];//尾巴数组(3个) intlen=3;//蛇的初始长度为3 charch='p'; srand((unsigned)time(NULL));//srand函数是随机数发生器的初始化函数 init(apple);//初始化整个坐标系(这个自己编写的函数,不是系统的) snake=(int**)realloc(snake,sizeof(int*)*len); /* realloc先判断当前的指针是否有足够的连续空间,如果有,扩大mem_address指向的地址, 并且将mem_address返回,如果空间不够,先按照newsize指定的大小分配空间, 将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来mem_address所指内存区域 (注意: 原来指针是自动释放,不需要使用free),同时返回新分配的内存区域的首地址。 即重新分配存储器块的地址。 */ for(i=0;i snake[i]=(int*)malloc(sizeof(int)*2);//分配长度为num_bytes字节的内存块 // for(i=0;i { snake[i][0]=N/2; snake[i][1]=N/2+i; gotoxy(snake[i][0],snake[i][1]); color(14); cout<<"★"< } //死循环 while (1)//进入消息循环 { tail[0]=snake[len-1][0]; tail[1]=snake[len-1][1]; gotoxy(tail[0],tail[1]); color(11); cout<<"■"< //描绘出一条蛇 for(i=len-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); cout<<"★"< } if(kbhit())//kbhit是一个函数,可以用来检查当前是否有键盘输入。 { gotoxy(0,N+2);//goto(x,y) ch=getche();//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;//右 default: break; } gotoxy(snake[0][0],snake[0][1]); color(14); cout<<"★"< Sleep(abs(200-0.5*score));//执行挂起一段时间 if(snake[0][0]==apple[0]&&snake[0][1]==apple[1])//吃掉苹果后蛇分数加1,蛇长加1 { score++; len++; snake=(int**)realloc(snake,sizeof(int*)*len); snake[len-1]=(int*)malloc(sizeof(int)*2); apple[0]=rand()%N+1; apple[1]=rand()%N+1; gotoxy(apple[0],apple[1]); color(12); cout<<"●"< gotoxy(N+5,3); color(20); cout< } if(snake[0][1]==0||snake[0][1]==N||snake[0][0]==0||snake[0][0]==N)//撞到围墙后失败 { gotoxy(N/2,N/2); color(30); cout<<"失败! ! ! "< for(i=0;i free(snake[i]); Sleep(INFINITE); exit(0); } } return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 实现 贪吃 源码