用c编写贪吃蛇全过程.doc_第1页
用c编写贪吃蛇全过程.doc_第2页
用c编写贪吃蛇全过程.doc_第3页
用c编写贪吃蛇全过程.doc_第4页
用c编写贪吃蛇全过程.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言编写贪吃蛇此贪吃蛇是我刚学习c语言的时候做的,很手生,写得也不好,而且bug比较多,但做为一般的毕业设计或者是课堂设计是够用了,而且因为不是很专业,但还是希望各位童鞋不要抄袭,毕竟知识是自己的,在看懂了的前提下,自己可以参考着写一遍,弄懂了才是自己的。废话不说了,大家都懂,现在进入正题。在vs2010环境下编绎通过,但不保证在其他平台上能通过。仅做为参考。具体能实现的功能:方向控制,吃食物,食物有两种,有毒的,吃了会减少生命值,还有一种是无毒的,吃了会长身体,撞墙死亡,碰身体死亡,死亡重新开始游戏。首先附上一张游戏截图,仅为初学者参考,高手可以点击右上角,谢谢!全部代码为在三个文件里面,分别为header.h,src.c, main.c,下面分别发出代码及简单的注解:一 header.h,这是存放的头文件以及函数声明,就不解释了,直接放代码;#include#include#include#include #include int xy250;int i;int food2;int pois25;int wall(void);int init(int len);/int way(int flag);int mov(int key);int print(int ret);int run(int ret);int foods(void);int grow(void);int direction(void);int die(void);int or(void);int poi(void);int gotoxy(int x,int y);二、资源文件src.c,这里存放的是函数的实现方法:#includeheader.hint flag=0;int len=5;int key=0;char name=name;int core=0;int life=3;/初始化墙int wall(void)int i=0;int j=0;for(i=0;i30;i+)for(j=0;j0&i0&j29)printf( );if(i=29)printf(* );/初始化蛇属性int init(int len)life=3;core=0;flag=0;len=5;key=0;gotoxy(8,15);printf(请输入你的大名,按Enter键开始游戏:);scanf(%s,&name);gotoxy(62,2);printf(-);gotoxy(62,4);printf(name:%s,name);gotoxy(8,15);printf( );gotoxy(62,6);printf(方向控制说明:);gotoxy(62,7);printf(w:向上 s:向下);gotoxy(62,8);printf(a:向左 d: 向右);gotoxy(62,10);printf(表示食物);gotoxy(62,11);printf(表示有毒);gotoxy(62,12);printf(分数:%d,core);gotoxy(62,14);printf(生命值:);for(i=0;i3;i+)printf();xy00=22;xy10=22;for(i=1;ilen;i+)xy0i=xy0i-1-2;xy1i=xy1i-1;print(len);for(i=0;i0;i-)xy0i=xy0i-1;xy1i=xy1i-1;/打印蛇int print(int ret)int i=0;for(i=0;iret;i+)if(i=0)gotoxy(xy00,xy10);printf();elsegotoxy(xy0i,xy1i);printf();/定义窗口属性int gotoxy(int x,int y)COORD coord = x, y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);/蛇移动int mov(int k)switch(k)case 1:if(2 != flag )run(len);xy00=xy00-2;flag=1;break;case 2:if(1 != flag)run(len);xy00=xy00+2;flag=2;break;case 3:if(4 != flag)run(len);xy10=xy10-1;flag=3;break;case 4:if(3 != flag)run(len);xy10=xy10+1;flag=4;break;/生成食物int foods(void)food0=2*(rand()%(28)+1);food1=rand()%(28)+1;gotoxy(food0,food1);printf();/蛇吃食物并成长int grow(void)if(xy00=food0&xy10=food1)len+;foods();core=core+100;gotoxy(62,12);printf(分数:%d,core);return len;/根据键值获取蛇的移动方向int direction(void)if(_kbhit()key=_getch();if(a=key & flag!=2)flag=1;else if(d=key & flag!=1)flag=2;else if(w=key & flag!=4)flag=3;else if(s=key & flag!=3)flag=4;return flag;/撞强和碰尾死亡方式int die(void)if(xy00=0 | xy00=58 |xy10=0 |xy10=29)return -1;for(i=1;ilen;i+)if(xy00=xy0i & xy10=xy1i)return -2;/死亡后由玩家决定是否继续游戏int or(void)int key;while(1)if(_kbhit()key=_getch();if(y=key)return 1;if(n=key)return 2;/吃有毒的食物,生命减少至0;int poi(void)for(i=0;i5;i+)if(xy00=pois0i & xy10=pois1i)life-;if(life=0)gotoxy(62,14); printf( );gotoxy(62,14);printf(生命值:);return -3;gotoxy(62,14); printf( );gotoxy(62,14);printf(生命值:);for(i=1;i=life;i+)printf();pois0i=2*(rand()%(28)+1);pois1i=rand()%(28)+1;gotoxy(pois0i,pois1i);printf();三、主函数main.c文件#includeheader.hint main(void)int len=5;int i;int flag=2;int kill;int ret;int ret2;system(COLOR 0C);/窗口颜色system(MODE CON: COLS=99 LINES=30);/窗口宽度和高度in:len=5;flag=2;/初始化移动方向kill=1;ret=0;ret2=0;gotoxy(0,0);/光标移动到坐标(0,0)的位置wall();/打印围墙/初始化蛇init(5);/初始化蛇/测试语句/gotoxy(58,29);/printf(这);foods();/调用生成食物的函数,生成一个食物while(1)gotoxy(xy0len-1,xy1len-1);printf( );/蛇移动时,蛇尾前移时擦去原蛇尾mov(flag);/控制蛇移动方向len=grow();/蛇生长,并返回蛇的长度ret2=poi();/蛇吃到有毒的食物,如果生命值为0,刚死亡if(ret2=-3)goto out3;flag=direction();/根据键值,得到蛇移动方向kill=die();/蛇死亡判断,撞墙和碰尾死亡;print(len);/打印当前长度的蛇if(-1=kill)goto out1;/撞墙死亡if(-2=kill)goto out2;/碰尾死亡Sleep(300-5*len);/简单延时out1:gotoxy(15,15);printf(恭喜你撞墙而死!按y重新开始,按n结束游戏);in2:ret=or();/死亡后由玩家决定是否继续游戏,按y继续游戏,按n退出游戏if(1=ret)/复活后游戏,把蛇身置空for(i=0;i50;i+)xy0i=NULL;xy1i=NULL;goto in;/回到游戏开始的地方,开始游戏if(2=ret)goto _out;/退出游戏while(1);out2:gotoxy(15,15);printf(恭喜你碰尾而死!按y重新开始,按n结束游戏);goto in2;out3:gotoxy(15,15);printf(恭喜你中毒而死!按y重新开始,按n结束游戏);goto in2;while(1);_out:return -1;别外附上一些必要的关键代码:#include #include void gotoxy(int x, int y)/光标跳转COORD coord = x, y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);/随机生成坐标rand()%(ORDINATE_2-ORDINATE_1)/窗口属性设置system(COLOR 09);system(MODE CON: COLS=99 LINES=27);/得到键盘输入/key = _getch();if (_kbhit()/有输入/是否按下按键,并弹起以及附上控制台的关键代码:#include stdio.h#include Windows.hint main() HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); / 获取控制台句柄 SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_RED); / 设置为红色 printf(把这句话颜色变成红色n); SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);/ 设置为黄色 printf(把这句话颜色变成黄色n);0.设置控制台输出行数和列数system(mode con:cols=100 lines=20000);1.改变整个控制台的颜色用 system(color 0A);其中color后面的0是背景色代号,A是前景色代号。各颜色代码如下:0=黑色1=蓝色2=绿色3=湖蓝色4=红色5=紫色6=黄色7=白色8=灰色9=淡蓝色A=淡绿色B=淡浅绿色C=淡红色D=淡紫色E=淡黄色F=亮白色2.改变下一个输出或者输入字体和背景的颜色采用SetConsoleTextAttribute函数,如White on Black:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);Red on Black:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED);Green on Black:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN);Yellow on Black:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED | FOREGROUND_GREEN);Blue on Black:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_BLUE);Magenta on Black:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED | FOREGROUND_BLUE);Cyan on Black:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN | FOREGROUND_BLUE);Black on Gray:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |BACKGROUND_INTENSITY);Black on White:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE);Red on White:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_RED);等等。需要引入头文件:windows.h函数原型:BOOL SetConsoleTextAttribute( HANDLE hConsoleOutput, WORD wAttributes );wAttributes 的取值含义对应如下:Attrib

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论