谁有用c++写的贪吃蛇源代码分享一个给我吧, 好人一生平安!

游戏描述如下:

1. 贪吃蛇可以自动直线前进,或者玩家可以通过方向键操纵贪吃蛇上下左右前进,每次前进一格。

2. 贪吃蛇在规定的区域内活动,当:

①贪吃蛇触碰到墙壁时;

②贪吃蛇的蛇头触碰到蛇身或者蛇尾时;

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

命令行显示“Game Over!”并且退出游戏。

3. 贪吃蛇活动的区域内每次随机产生一颗“豆豆”,当贪吃蛇吃到“豆豆”后蛇身增长一格,自动前进时间缩

短100ms(默认是1000ms,且不能少于100ms)。贪吃蛇长度每为8的倍数Improve a Level。

C++代码如下:

#include?<bios.h>?

#include?<conio.h>?

#include?<dos.h>?

#include?<graphics.h>?

#include?<stdlib.h>?

#include?<time.h>?

using?namespace?std;?

inline?void?display(char?gsDomain[][22],?int?level,?int?moveSpeed)?

{?

system("cls");?//清屏?

cout?<<?endl?<<?endl;?

for?(int?i?=?0;?i?<?22;?i++)?

{?

cout?<<?"\t";?

for?(int?j?=?0;?j?<?22;?j++)?

cout?<<?gsDomain[i][j]?<<?"?";?

if?(i?==?0)?

{?

cout?<<?"\tLevel:"?<<?level;?

}?

else?if?(i?==?3)?

{?

cout?<<?"\t自动前进时间";?

}?

else?if?(i?==?5)?

{?

cout?<<?"\t间隔:"?<<?moveSpeed?<<?"?ms";?

}?

cout?<<?endl;?

}?

}?

int?main()?

{?

char?gsDomain[22][22];?//贪吃蛇活动区域(包括墙壁)?

//初始化贪吃蛇活动区域(不包括墙壁)?

for?(int?i?=?1;?i?<=?21;?i++)?

{?

for?(int?j?=?1;?j?<=?21;?j++)?

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

}?

//初始化贪吃蛇活动区域的上下墙壁?

for?(int?i?=?0;?i?<?22;?i++)?

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

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

for?(int?i?=?1;?i?<?21;?i++)?

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

//初始化蛇身?

for?(int?i?=?1;?i?<=?3;?i++)?

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

//初始化蛇头?

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

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

for?(int?i?=?0;?i?<?4;?i++)?

{?

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

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

}?

int?head?=?3,?tail?=?0,?length?=?4;?

int?beanX,?beanY;?//豆豆出现的位置?

srand(time(0));?

do

{?

beanX?=?rand()?%?20?+?1;?

beanY?=?rand()?%?20?+?1;?

}?while?(gsDomain[beanX][beanY]?!=?'?');?

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

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

long?start;?

int?level?=?1,?moveSpeed?=?1000;?

for?(int?i?=?3;?i?>=?0;?i--)?

{?

start?=?clock();?

while?(clock()?-?start?<=?1000){}?

system("cls");?

if?(i)?

{?

cout?<<?"\n\n\t\t进入游戏倒计时:"?<<?i?<<?endl;?

}?

else

display(gsDomain,?level,?moveSpeed);?

}?

char?direction?=?77;?//贪吃蛇默认自动向右直线前进?

while?(true)?

{?

bool?timeFlag?=?true;?

int?x,?y;?

start?=?clock();?

//若时间超过自动前进时间或者键盘上有键按下则终止循环?

while?((timeFlag?=?(clock()?-?start?<=?moveSpeed))?&&?!kbhit()){}?

if?(timeFlag)?

{?

//键盘上有键按下时读取键盘输入?

getch();?

direction?=?getch();?

}?

switch?(direction)?

{?

//向上?

case?72:?x?=?snake[0][head]?-?1,?y?=?snake[1][head];?

break;?

//向下?

case?80:?x?=?snake[0][head]?+?1,?y?=?snake[1][head];?

break;?

//向左?

case?75:?x?=?snake[0][head],?y?=?snake[1][head]?-?1;?

break;?

//向右?

case?77:?x?=?snake[0][head],?y?=?snake[1][head]?+?1;?

break;?

default:?cout?<<?"\tGame?Over!\n";?

return?0;?

}?

if?(x?==?0?||?x?==?21?||?y?==?0?||?y?==?21)?

{?

//贪吃蛇触碰到墙壁?

cout?<<?"\tGame?Over!\n";?

return?0;?

}?

if?(gsDomain[x][y]?!=?'?'?&&?!(x?==?beanX?&&?y?==?beanY))?

{?

//贪吃蛇的蛇头触碰到蛇身或者蛇尾?

cout?<<?"\tGame?Over!\n";?

return?0;?

}?

if?(x?==?beanX?&&?y?==?beanY)?

{?

//吃豆豆?

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

if?(length?>=?8)?

{?

//游戏升级处理?

length?-=?8;?

level++;?

if?(moveSpeed?>?100)?

moveSpeed?-=?100;?

}?

gsDomain[snake[0][head]][snake[1][head]]?=?'*';?

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

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

snake[0][head]?=?x;?

snake[1][head]?=?y;?

do

{?

beanX?=?rand()?%?20?+?1;?

beanY?=?rand()?%?20?+?1;?

}?while?(gsDomain[beanX][beanY]?!=?'?');?

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

display(gsDomain,?level,?moveSpeed);?//屏幕上显示?

}?

else

{?

//不吃豆豆?

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

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

gsDomain[snake[0][head]][snake[1][head]]?=?'*';?

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

snake[0][head]?=?x;?

snake[1][head]?=?y;?

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

display(gsDomain,?level,?moveSpeed);?//屏幕上显示?

}?

}?

return?0;?

}