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

 我来答
无情天魔精致
2015-06-21 · TA获得超过1万个赞
知道大有可为答主
回答量:3711
采纳率:76%
帮助的人:1062万
展开全部

游戏描述如下:

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; 
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式