谁能和我分享一个c++写的snake源代码?好人一生平安!
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;?
}