贪吃蛇游戏代码开放报告

游戏描述如下:

1.蛇可以自动直线移动,也可以玩家通过方向键控制蛇上下左右移动,每次一格。

2.蛇在指定区域活动,当:

①蛇触壁时;

(2)贪吃的蛇头碰到蛇身或蛇尾时;

③当玩家的键盘输入不是方向键时;

命令行显示“游戏结束!”然后退出游戏。

3.在蛇活动的区域随机生成一个“豆豆”。蛇吃“豆豆”时,蛇身增长一格,自动前进时间缩短。

短100ms(默认为1000ms,不能小于100ms)。每次蛇长是8的倍数,提升一级。

C++代码如下:

#包含?& ltbios.h & gt?

#包含?& ltconio.h & gt?

#包含?& ltdos.h & gt?

#包含?& ltgraphics.h & gt?

#包含?& ltstdlib.h & gt?

#包含?& lttime.h & gt?

使用?命名空间?std?

内嵌?作废?显示(char?gsDomain[][22],?int?水平,?int?moveSpeed)?

{?

系统(“cls”);?//清屏?

cout?& lt& lt?endl?& lt& lt?endl?

为了什么?(int?我?=?0;?我?& lt?22;?i++)?

{?

cout?& lt& lt?”\ t”;?

为了什么?(int?j?=?0;?j?& lt?22;?j++)?

cout?& lt& lt?gsDomain[i][j]?& lt& lt?"?";?

如果?(我?==?0)?

{?

cout?& lt& lt?\ t级别:?& lt& lt?水平;?

}?

不然呢?如果?(我?==?3)?

{?

cout?& lt& lt?”\t自动提前时间”;?

}?

不然呢?如果?(我?==?5)?

{?

cout?& lt& lt?\t时间间隔:?& lt& lt?moveSpeed?& lt& lt?"?ms ";?

}?

cout?& lt& lt?endl?

}?

}?

int?main()?

{?

夏尔?GS domain[22][22];?//蛇活动区(包括墙)?

//初始化蛇活动区(不包括墙)?

为了什么?(int?我?=?1;?我?& lt=?21;?i++)?

{?

为了什么?(int?j?=?1;?j?& lt=?21;?j++)?

gsDomain[i][j]?=?'?';?

}?

//初始化蛇活动区的上下壁?

为了什么?(int?我?=?0;?我?& lt?22;?i++)?

gsDomain[0][i]?=?gsDomain[21][i]?=?'-';?

//初始化蛇活动区域的左右墙壁?

为了什么?(int?我?=?1;?我?& lt?21;?i++)?

gsDomain[i][0]?=?gsDomain[i][21]?=?'|';?

//初始化蛇?

为了什么?(int?我?=?1;?我?& lt=?3;?i++)?

gsDomain[1][i]?=?'*';?

//初始化蛇头?

gsDomain[1][4]?=?'#';?

int?snake[2][100];?//记录蛇每次出现的位置坐标?

为了什么?(int?我?=?0;?我?& lt?4;?i++)?

{?

snake[0][i]?=?1;?//记录蛇所在位置的x坐标?

snake[1][我]?=?我?+?1;?//记录蛇所在位置的y坐标?

}?

int?头?=?3,?尾巴?=?0,?长度?=?4;?

int?beanX?beanY?//豆豆出现在哪里?

srand(time(0));?

{?

beanX?=?兰德()?%?20?+?1;?

宾尼?=?兰德()?%?20?+?1;?

}?什么时候?(gsDomain[beanX][beanY]?!=?'?');?

gsDomain[beanX][beanY]?=?'*';?//豆豆?

cout?& lt& lt?" \ n \ n \ t \贪吃蛇游戏即将开始!\ n ";?

龙?开始;?

int?水平?=?1,?moveSpeed?=?1000;?

为了什么?(int?我?=?3;?我?& gt=?0;?我-)?

{?

开始?=?clock();?

什么时候?(时钟()?-?开始?& lt=?1000){}?

系统(“cls”);?

如果?(一)?

{?

cout?& lt& lt?\ n \ n \ t \进入游戏倒计时?& lt& lt?我?& lt& lt?endl?

}?

其他

显示(gsDomain,水平,?moveSpeed);?

}?

夏尔?方向?=?77;?//蛇默认自动直奔右边?

什么时候?(真)?

{?

布尔?时标?=?真实;?

int?x,?y;?

开始?=?clock();?

//如果时间超过自动前进时间或者在键盘上按了一个键,终止循环?

什么时候?((timeFlag?=?(时钟()?-?开始?& lt=?moveSpeed))?& amp& amp?!kbhit()){}?

如果?(timeFlag)?

{?

//在键盘上按下一个键时读取键盘输入?

getch();?

方向?=?getch();?

}?

切换?(方向)?

{?

//上?

案子?72:?x?=?蛇[0][头]?-?1,?y?=?蛇[1][头];?

打破;?

//下来?

案子?80:?x?=?蛇[0][头]?+?1,?y?=?蛇[1][头];?

打破;?

//往左?

案子?75:?x?=?蛇[0][头],?y?=?蛇[1][头]?-?1;?

打破;?

//往右?

案子?77:?x?=?蛇[0][头],?y?=?蛇[1][头]?+?1;?

打破;?

默认:?cout?& lt& lt?" \ t游戏?完毕!\ n ";?

回归?0;?

}?

如果?(x?==?0?||?x?==?21?||?y?==?0?||?y?==?21)?

{?

//蛇碰了壁?

cout?& lt& lt?" \ t游戏?完毕!\ n ";?

回归?0;?

}?

如果?(gsDomain[x][y]?!=?'?'?& amp& amp?!(x?==?beanX?& amp& amp?y?==?beanY))?

{?

//蛇头接触的是蛇身还是蛇尾?

cout?& lt& lt?" \ t游戏?完毕!\ n ";?

回归?0;?

}?

如果?(x?==?beanX?& amp& amp?y?==?beanY)?

{?

//吃豌豆?

长度++;?//长度加1?

如果?(长度?& gt=?8)?

{?

//游戏升级处理?

长度?-=?8;?

level++;?

如果?(moveSpeed?& gt?100)?

moveSpeed?-=?100;?

}?

GS domain[snake[0][head]][snake[1][head]]?=?'*';?

gsDomain[x][y]?=?'#';?

头?=?(头?+?1)?%?100;?

蛇[0][头]?=?x;?

蛇[1][头]?=?y;?

{?

beanX?=?兰德()?%?20?+?1;?

宾尼?=?兰德()?%?20?+?1;?

}?什么时候?(gsDomain[beanX][beanY]?!=?'?');?

gsDomain[beanX][beanY]?=?'*';?

显示(gsDomain,水平,?moveSpeed);?//显示在屏幕上?

}?

其他

{?

//不吃豌豆?

GS domain[snake[0][tail]][snake[1][tail]]?=?'?';?//蛇尾前移一格?

尾巴?=?(尾巴?+?1)?%?100;?

GS domain[snake[0][head]][snake[1][head]]?=?'*';?

头?=?(头?+?1)?%?100;?

蛇[0][头]?=?x;?

蛇[1][头]?=?y;?

gsDomain[x][y]?=?'#';?//蛇头前移一格?

显示(gsDomain,水平,?moveSpeed);?//显示在屏幕上?

}?

}?

回归?0;?

}