用c编写贪吃蛇全过程.docx

上传人:b****5 文档编号:4294267 上传时间:2022-11-28 格式:DOCX 页数:18 大小:71.42KB
下载 相关 举报
用c编写贪吃蛇全过程.docx_第1页
第1页 / 共18页
用c编写贪吃蛇全过程.docx_第2页
第2页 / 共18页
用c编写贪吃蛇全过程.docx_第3页
第3页 / 共18页
用c编写贪吃蛇全过程.docx_第4页
第4页 / 共18页
用c编写贪吃蛇全过程.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

用c编写贪吃蛇全过程.docx

《用c编写贪吃蛇全过程.docx》由会员分享,可在线阅读,更多相关《用c编写贪吃蛇全过程.docx(18页珍藏版)》请在冰豆网上搜索。

用c编写贪吃蛇全过程.docx

用c编写贪吃蛇全过程

C语言编写贪吃蛇

此贪吃蛇是我刚学习c语言的时候做的,很手生,写得也不好,而且bug比较多,但做为一般的毕业设计或者是课堂设计是够用了,而且因为不是很专业,但还是希望各位童鞋不要抄袭,毕竟知识是自己的,在看懂了的前提下,自己可以参考着写一遍,弄懂了才是自己的。

废话不说了,大家都懂,现在进入正题。

在vs2010环境下编绎通过,但不保证在其他平台上能通过。

仅做为参考。

具体能实现的功能:

方向控制,吃食物,食物有两种,有毒的,吃了会减少生命值,还有一种是无毒的,吃了会长身体,撞墙死亡,碰身体死亡,死亡重新开始游戏。

首先附上一张游戏截图,仅为初学者参考,高手可以点击右上角,谢谢!

全部代码为在三个文件里面,分别为header.h,src.c,main.c,下面分别发出代码及简单的注解:

一.header.h,这是存放的头文件以及函数声明,就不解释了,直接放代码;

#include

#include

#include

#include

#include

 

intxy[2][50];

inti;

intfood[2];

intpois[2][5];

 

intwall(void);

intinit(intlen);

 

//intway(intflag);

intmov(intkey);

intprint(intret);

intrun(intret);

intfoods(void);

intgrow(void);

intdirection(void);

intdie(void);

intor(void);

intpoi(void);

intgotoxy(intx,inty);

二、资源文件src.c,这里存放的是函数的实现方法:

#include"header.h"

intflag=0;

intlen=5;

intkey=0;

charname[]="name";

intcore=0;

intlife=3;

//初始化墙

intwall(void)

{

inti=0;

intj=0;

for(i=0;i<30;i++)

{

for(j=0;j<30;j++)

{

if(i==0)

{

printf("*");

if(j==29)

{

printf("\n");

}

}

if(i>0&&i<29)

{

if(j==0)

{

printf("*");

}

if(j==29)

printf("*\n");

if(j>0&&j<29)

{

printf("");

}

}

if(i==29)

{

printf("*");

}

}

}

 

}//

//初始化蛇属性

intinit(intlen)

{

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;i<3;i++)

{

printf("★");

}

xy[0][0]=22;

xy[1][0]=22;

for(i=1;i

{

xy[0][i]=xy[0][i-1]-2;

xy[1][i]=xy[1][i-1];

}

print(len);

for(i=0;i<5;i++)

{

pois[0][i]=2*(rand()%(28)+1);

pois[1][i]=rand()%(28)+1;

gotoxy(pois[0][i],pois[1][i]);

printf("¤");

}

}

//蛇移动

intrun(intret)

{

for(i=ret-1;i>0;i--)

{

xy[0][i]=xy[0][i-1];

xy[1][i]=xy[1][i-1];

}

}

//打印蛇

intprint(intret)

{

inti=0;

for(i=0;i

{

if(i==0)

{

gotoxy(xy[0][0],xy[1][0]);

printf("◆");

}

else

{

gotoxy(xy[0][i],xy[1][i]);

printf("●");

}

}

}

//定义窗口属性

intgotoxy(intx,inty)

{

COORDcoord={x,y};

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);

}

//蛇移动

intmov(intk)

{

switch(k)

{

case1:

if(2!

=flag)

{

run(len);

xy[0][0]=xy[0][0]-2;

flag=1;

}

break;

case2:

if(1!

=flag)

{

run(len);

xy[0][0]=xy[0][0]+2;

flag=2;

}

break;

case3:

if(4!

=flag)

{

run(len);

xy[1][0]=xy[1][0]-1;

flag=3;

}

break;

case4:

if(3!

=flag)

{

run(len);

xy[1][0]=xy[1][0]+1;

flag=4;

}

break;

}

}

//生成食物

intfoods(void)

{

food[0]=2*(rand()%(28)+1);

food[1]=rand()%(28)+1;

gotoxy(food[0],food[1]);

printf("○");

}

//蛇吃食物并成长

intgrow(void)

{

if(xy[0][0]==food[0]&&xy[1][0]==food[1])

{

len++;

foods();

core=core+100;

gotoxy(62,12);

printf("分数:

%d",core);

}

returnlen;

}

//根据键值获取蛇的移动方向

intdirection(void)

{

if(_kbhit())

{

key=_getch();

if('a'==key&&flag!

=2)

flag=1;

elseif('d'==key&&flag!

=1)

flag=2;

elseif('w'==key&&flag!

=4)

flag=3;

elseif('s'==key&&flag!

=3)

flag=4;

}

returnflag;

}

//撞强和碰尾死亡方式

intdie(void)

{

if(xy[0][0]==0||xy[0][0]==58||xy[1][0]==0||xy[1][0]==29)

return-1;

for(i=1;i

{

if(xy[0][0]==xy[0][i]&&xy[1][0]==xy[1][i])

{

return-2;

}

}

}

//死亡后由玩家决定是否继续游戏

intor(void)

{

intkey;

while

(1)

{

if(_kbhit())

{

key=_getch();

if('y'==key)

return1;

if('n'==key)

return2;

}

}

}

//吃有毒的食物,生命减少至0;

intpoi(void)

{

for(i=0;i<5;i++)

{

if(xy[0][0]==pois[0][i]&&xy[1][0]==pois[1][i])

{

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("★");

}

pois[0][i]=2*(rand()%(28)+1);

pois[1][i]=rand()%(28)+1;

gotoxy(pois[0][i],pois[1][i]);

printf("¤");

}

}

}

 

三、主函数main.c文件

#include"header.h"

 

intmain(void)

{

intlen=5;

inti;

intflag=2;

intkill;

intret;

intret2;

system("COLOR0C");//窗口颜色

system("MODECON:

COLS=99LINES=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(xy[0][len-1],xy[1][len-1]);

printf("");//蛇移动时,蛇尾前移时擦去原蛇尾

mov(flag);//控制蛇移动方向

len=grow();//蛇生长,并返回蛇的长度

ret2=poi();//蛇吃到有毒的食物,如果生命值为0,刚死亡

if(ret2==-3)

gotoout3;

flag=direction();//根据键值,得到蛇移动方向

kill=die();//蛇死亡判断,撞墙和碰尾死亡;

print(len);//打印当前长度的蛇

if(-1==kill)

gotoout1;//撞墙死亡

if(-2==kill)

gotoout2;//碰尾死亡

Sleep(300-5*len);//简单延时

}

out1:

gotoxy(15,15);

printf("恭喜你撞墙而死!

按y重新开始,按n结束游戏");

in2:

ret=or();//死亡后由玩家决定是否继续游戏,按y继续游戏,按n退出游戏

if(1==ret)//复活后游戏,把蛇身置空

{

for(i=0;i<50;i++)

{

xy[0][i]=NULL;

xy[1][i]=NULL;

}

gotoin;//回到游戏开始的地方,开始游戏

}

if(2==ret)

goto_out;//退出游戏

while

(1);

out2:

gotoxy(15,15);

printf("恭喜你碰尾而死!

按y重新开始,按n结束游戏");

gotoin2;

out3:

gotoxy(15,15);

printf("恭喜你中毒而死!

按y重新开始,按n结束游戏");

gotoin2;

while

(1);

_out:

return-1;

}

别外附上一些必要的关键代码:

#include

#include

voidgotoxy(intx,inty)//光标跳转

{

COORDcoord={x,y};

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);

}

//随机生成坐标

rand()%(ORDINATE_2-ORDINATE_1)

//窗口属性设置system("COLOR09");

system("MODECON:

COLS=99LINES=27");

//得到键盘输入

//key=_getch();

if(_kbhit())//有输入//是否按下按键,并弹起

以及附上控制台的关键代码:

#include"stdio.h"

#include"Windows.h"

intmain(){

HANDLEhandle=GetStdHandle(STD_OUTPUT_HANDLE);//获取控制台句柄

SetConsoleTextAttribute(handle,FOREGROUND_INTENSITY|FOREGROUND_RED);//设置为红色

printf("把这句话颜色变成红色\n");

SetConsoleTextAttribute(handle,FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);//设置为黄色

printf("把这句话颜色变成黄色\n");

}

0.设置控制台输出行数和列数

  system("modecon:

cols=100lines=20000");

  1.改变整个控制台的颜色

  用system("color0A");

  其中color后面的0是背景色代号,A是前景色代号。

各颜色代码如下:

  0=黑色

  1=蓝色

  2=绿色

  3=湖蓝色

  4=红色

  5=紫色

  6=黄色

  7=白色

  8=灰色

  9=淡蓝色

  A=淡绿色

  B=淡浅绿色

  C=淡红色

  D=淡紫色

  E=淡黄色

  F=亮白色

  2.改变下一个输出或者输入字体和背景的颜色

  采用SetConsoleTextAttribute函数,如

  WhiteonBlack:

  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|

  FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);

  RedonBlack:

  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|

  FOREGROUND_RED);

  GreenonBlack:

  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|

  FOREGROUND_GREEN);

  YellowonBlack:

  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|

  FOREGROUND_RED|FOREGROUND_GREEN);

  BlueonBlack:

  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|

  FOREGROUND_BLUE);

  MagentaonBlack:

  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|

  FOREGROUND_RED|FOREGROUND_BLUE);

  CyanonBlack:

  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|

  FOREGROUND_GREEN|FOREGROUND_BLUE);

  BlackonGray:

  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|

  BACKGROUND_INTENSITY);

  BlackonWhite:

  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|

  FOREGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE);

  RedonWhite:

  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|

  FOREGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE|

  FOREGROUND_RED);

  等等。

  需要引入头文件:

  windows.h

  函数原型:

  BOOLSetConsoleTextAttribute(HANDLEhConsoleOutput,WORDwAttributes);

  wAttributes的取值含义对应如下:

  AttributeMeaning

  FOREGROUND_BLUETextcolorcontainsblue.

  FOREGROUND_GREENTextcolorcontainsgreen.

  FOREGROUND_REDTextcolorcontainsred.

  FOREGROUND_INTENSITYTextcolorisintensified.

  BACKGROUND_BLUEBackgroundcolorcontainsblue.

  BACKGROUND_GREENBackgroundcolorcontainsgreen.

  BACKGROUND_REDBackgroundcolorcontainsred.

  BACKGROUND_INTENSITYBackgroundcolorisintensified.

  COMMON_LVB_LEADING_BYTELeadingbyte.

  COMMON_LVB_TRAILING_BYTETrailingbyte.

  COMMON_LVB_GRID_HORIZONTALTophorizontal.

  COMMON_LVB_GRID_LVERTICALLeftvertical.

  COMMON_LVB_GRID_RVERTICALRightvertical.

  COMMON_LVB_REVERSE_VIDEOReverseforegroundandbackgroundattributes.

  COMMON_LVB_UNDERSCOREUnderscore.

如有侵权请联系告知删除,感谢你们的配合!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1