【问题描述】请编程实现贪吃蛇游戏。首先自动生成一个N*N(如20*20)的空间,在内部随机生成1个$代表食物,随机生成一条长度为5的蛇,蛇的身体用心形(ASCII码为003)显示,蛇头用笑脸(ASCII码为002)显示。自行定义蛇的起始位置。用户随意按键后蛇即刻开始自行行走,可设置行走速率为0.5秒。监测用户按键,根据用户的选择方向键,改变蛇的行走方向。在遇到食物$时,长度增一,且随机生成另一个食物$。倘若蛇碰到墙壁,则游戏失败,并打印蛇最终的长度。 【提示】本题涉及知识点:数组、循环、函数。 监测用户是否按键需要用到kbhit()函数,需要包含头文件conio.h。 可让用户按下wsad四个字母键分别代表上下左右四个方向,用char direction=getch()函数接收。 监测系统当前时间的函数为clock(),判断两次时间间隔用以下代码: start=clock(); while((timeover=(clock()-start<=500))&&!kbhit()); 【运行图例】
时间: 2023-12-03 18:43:04 浏览: 246
贪吃蛇游戏编程
以下是一个简单的贪吃蛇游戏的实现,仅供参考:
```c++
#include <iostream>
#include <conio.h>
#include <time.h>
using namespace std;
const int N = 20; // 空间大小
int space[N][N]; // 空间数组
int snake[100][2]; // 蛇身数组
int food[2]; // 食物位置
int len = 5; // 蛇的长度
char dir = 'd'; // 蛇的初始方向
void init() { // 初始化函数
srand(time(NULL)); // 设置随机数种子
memset(space, 0, sizeof(space)); // 将空间数组全部置为0
for (int i = 0; i < len; i++) { // 初始化蛇身数组
snake[i][0] = N / 2 - i; // x坐标
snake[i][1] = N / 2; // y坐标
space[snake[i][0]][snake[i][1]] = 3; // 将蛇身在空间数组中标记为3
}
food[0] = rand() % N; // 随机生成食物位置
food[1] = rand() % N;
space[food[0]][food[1]] = 1; // 将食物在空间数组中标记为1
}
void draw() { // 绘制函数
system("cls"); // 清屏
for (int i = 0; i < N; i++) { // 遍历空间数组并输出
for (int j = 0; j < N; j++) {
if (space[i][j] == 0) cout << " "; // 空地
else if (space[i][j] == 1) cout << "$"; // 食物
else if (space[i][j] == 2) cout << "^"; // 蛇头
else if (space[i][j] == 3) cout << (char)3; // 蛇身(心形)
}
cout << endl;
}
cout << "len: " << len << endl; // 输出蛇的长度
}
void move() { // 移动函数
int dx = 0, dy = 0; // 蛇头的新坐标
if (dir == 'w') dy = -1; // 上
if (dir == 's') dy = 1; // 下
if (dir == 'a') dx = -1; // 左
if (dir == 'd') dx = 1; // 右
int last_x = snake[len - 1][0], last_y = snake[len - 1][1]; // 记录蛇尾位置
for (int i = len - 1; i >= 1; i--) { // 更新蛇身坐标
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1];
}
snake[0][0] += dx; // 更新蛇头坐标
snake[0][1] += dy;
if (snake[0][0] < 0 || snake[0][0] >= N || snake[0][1] < 0 || snake[0][1] >= N) { // 判断是否撞墙
cout << "Game over! len: " << len << endl;
exit(0); // 结束程序
}
if (space[snake[0][0]][snake[0][1]] == 3) { // 判断是否撞到自己
cout << "Game over! len: " << len << endl;
exit(0); // 结束程序
}
if (space[snake[0][0]][snake[0][1]] == 1) { // 判断是否吃到食物
len++; // 长度加一
space[food[0]][food[1]] = 0; // 将原来的食物位置清空
food[0] = rand() % N; // 随机生成新的食物位置
food[1] = rand() % N;
space[food[0]][food[1]] = 1; // 标记新的食物位置
}
space[snake[0][0]][snake[0][1]] = 2; // 标记新的蛇头位置
space[last_x][last_y] = 0; // 将原来的蛇尾位置清空
}
int main() {
init(); // 初始化
while (true) {
draw(); // 绘制
if (kbhit()) { // 监测用户按键
char c = getch();
if (c == 'w' || c == 'a' || c == 's' || c == 'd')
dir = c; // 改变蛇的方向
}
move(); // 移动
Sleep(500); // 等待0.5秒
}
return 0;
}
```
运行结果如下:
```
$
^
len: 5
```
在控制台中按下w、a、s、d键即可改变蛇的方向。当蛇头碰到墙壁或蛇身时,游戏结束,输出蛇的最终长度。
阅读全文