欢迎来到一句话经典语录网
我要投稿 投诉建议
当前位置:一句话经典语录 > 心得体会 > 拓展训练贪吃蛇心得体会

拓展训练贪吃蛇心得体会

时间:2018-10-25 18:48

推荐几个可以自由交易的手游,可以卖装备等等的

#include #include #include #include #define food 7#define head 5#define body 6#define wall 1#define road 0#define up 1#define down 2#define left 3#define right 4#define kuan 25#define chang 30int map[kuan][chang],hi,bj,fi,fj,t;\\\/\\\/全局变量 数组 头部坐标,食物坐标度控制timevoid gotoxy(int x,int y) \\\/\\\/移动坐标{COORD coord;coord.X=x;coord.Y=y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);}void hidden()\\\/\\\/隐藏光标{CONSOLE_CURSOR_INFO cci;GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cci);cci.bVisible=0;\\\/\\\/赋1为显示,赋0藏SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cci);}void paint(int xx,int yy){ gotoxy(2*yy,xx); switch(map[xx][yy]) { case 0:printf( );break; case 1:printf(□);break; case 5:printf(◎);break; case 6:printf(△);break; case 7:printf(●);break; }}void start()\\\/\\\/初始化地图数组信息,随机蛇头位置,第一个食物位置{ int i,j; for(i=0;i<=kuan-1;i++) { map[i][0]=wall; map[i][chang-1]=wall; } for(j=0;j<=chang-1;j++) { map[0][j]=wall; map[kuan-1][j]=wall; } for (i=0;i<=kuan-1;i++) for (j=0;j<=chang-1;j++) paint(i,j); gotoxy(64,2);printf(1.a减速\\\/\\\/b加速); gotoxy(64,4);printf(2.esc暂停);}int getkey(int ddd)\\\/\\\/接收按键,根据当前方向,按动任意键暂停,不响应与运动方向相反的按键{ char c; while(c=getch()) { switch(c) { case 72:\\\/\\\/1 { if(ddd==2) return down; else return up; } case 80:\\\/\\\/2 { if(ddd==1) return up; else return down; } case 75:\\\/\\\/3 { if(ddd==4) return right; else return left; } case 77:\\\/\\\/4 { if(ddd==3) return left; else return right; } case 27:continue;\\\/\\\/esc暂停,a减速,d加速 case 97:{t+=10;return ddd;} case 100:{t-=10;return ddd;} default:{ return ddd; } } return 0; }}void game(){ int fd=0,len=1,direction=4,a[100000],b[100000],k,m,kk=0,aa=0,bb=0,i; t=250;\\\/\\\/全局变量在这里赋值 \\\/\\\/在一定范围随机蛇头初始位置,身子为左侧3个格子(可以拓展写入game里面) hi=rand()%(kuan-7)+6;bj=rand()%(chang-8)+5;map[hi][bj]=head;paint(hi,bj); a[3]=hi;b[3]=bj;\\\/\\\/存放到 a b数组中第四项中 for (i=0;i<3;i++) {map[hi][bj-1-i]=body;paint(hi,bj-i-1);a[2-i]=hi;b[2-i]=(bj-i-1);}\\\/\\\/存放到 0 1 2 项中 k=4;m=4;\\\/\\\/数组之后从第四位开始存放蛇头坐标 while(1) { while(!kbhit()&&len!=0)\\\/\\\/当没有按键输入并且没有撞到墙使得len=0时候进入循环(防止撞到墙后没有按键输入仍终止不了) { while (!fd)\\\/\\\/如果fd=0 则进入循环随机刷新一个新果实 { do { fi=rand()%(kuan-3)+1;fj=rand()%(chang-3)+1;} while(map[fi][fj]>0);\\\/\\\/不在墙或者蛇的身体内 map[fi][fj]=food;paint(fi,fj);fd=1; } switch(direction) { case 1: {map[hi][bj]=body;paint(hi,bj);hi--;break;} case 2: {map[hi][bj]=body;paint(hi,bj);hi++;break;} case 3: {map[hi][bj]=body;paint(hi,bj);bj--;break;} case 4: {map[hi][bj]=body;paint(hi,bj);bj++;break;} } if (map[hi][bj]==body)\\\/\\\/在画出新的头部时刻先判断即将画出的位置是不是map上坐标为身子的位置。

是则失败 {gotoxy(30,12);printf(失败了!);len=0;break;} map[hi][bj]=head;paint(hi,bj);\\\/\\\/接上,不是则执行这一步画出头部 a[k++]=hi;b[m++]=bj;kk++;\\\/\\\/另设置两个数组记录头部经过的坐标,kk代表头部运行的次数 if (hi==0||hi==(kuan-1)||bj==0||bj==(chang-1)) {gotoxy(30,12);printf(失败了!);len=0;break;} if (hi==fi&&bj==fj)\\\/\\\/吃到了果实fd=0 {fd=0;len++;} if(kk>(len-1))\\\/\\\/头部每走一步,kk++,删除之前的轨迹坐标所对应的身子,即尾巴。

若吃到食物则尾巴保留一次,带头部再次运动则删除。

{ map[a[aa]][b[bb]]=road; paint(a[aa],b[bb]); aa++;bb++; kk--; } Sleep(t-4*len);\\\/\\\/速度算法有待改进 } if (len==0)\\\/\\\/撞墙退出,退出while(1)总循环 break; direction=getkey(direction);\\\/\\\/按键按一下,getch提取并删除输入的字符,所以仍能继续进入while(!kbhit())中循环; }} main(){ srand(time(NULL)); hidden(); start(); game(); gotoxy(0,0);\\\/\\\/锁定屏幕显示 getchar();}这个是我以前写的,没有区分难度,这个很简单不是关键难点。

贪吃蛇的难点在于 如何实现移动中的控制与局部蛇身刷新

希望你好好体会一下(我这个是自己学了半年后用数组写的,并没有用什么指针什么的,适合新手阅读。

如果不懂可以提问)另外,如果想深入学习,可以上C语言吧,搜我以前发的(变态版本贪吃蛇)

声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。联系xxxxxxxx.com

Copyright©2020 一句话经典语录 www.yiyyy.com 版权所有

友情链接

心理测试 图片大全 壁纸图片