用c++写一个简单的贪吃蛇小游戏吧
时间: 2023-08-31 09:29:47 浏览: 223
### 回答1:
好的,我会尽力为你提供一份简单的贪吃蛇小游戏代码。
首先,你需要准备一些必要的头文件和库文件,包括:
```
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
```
然后,你需要定义一些常量和全局变量,包括:
```
#define MAX_X 80 // 最大列数
#define MAX_Y 25 // 最大行数
#define LENGTH 100 // 蛇的最大长度
// 蛇的方向,可以是上、下、左、右
const int dx[4] = {-1, 1, 0, 0};
const int dy[4] = {0, 0, -1, 1};
// 蛇的身体
struct Snake
{
int x; // 列坐标
int y; // 行坐标
};
Snake snake[LENGTH]; // 蛇的身体数组
int direction; // 蛇的方向
int food_x, food_y; // 食物的坐标
int score; // 得分
int length; // 蛇的长度
```
接着,你可以编写一个初始化函数,来初始化游戏的各种参数。
```
void init()
{
// 初始化蛇的身体
snake[0].x = MAX_X / 2;
snake[0].y = MAX_Y / 2;
length = 1;
// 初始化蛇的方向
direction = 3; // 向右
// 生成一个食物
generate_food();
// 初始化得分
score = 0;
}
```
生成食物的函数可以这样写:
```
void generate_food()
{
// 随机生成一个食物的坐标
food_x = rand() % MAX_X;
food_y = rand() % MAX_Y;
}
```
接下来,你可以
### 回答2:
贪吃蛇(Snake)是一款经典的游戏,下面是一个用C语言编写的简单贪吃蛇小游戏。
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define WIDTH 20 // 地图宽度
#define HEIGHT 15 // 地图高度
int len; // 蛇的长度
int speed; // 蛇的移动速度
int snakeX[WIDTH * HEIGHT]; // 蛇身的x坐标
int snakeY[WIDTH * HEIGHT]; // 蛇身的y坐标
int fruitX; // 水果的x坐标
int fruitY; // 水果的y坐标
int score; // 得分
int gameover; // 游戏结束标志
enum eDirecton { STOP = 0, LEFT, RIGHT, UP, DOWN } dir; // 定义方向枚举类型
void Setup()
{
srand(time(NULL)); // 用于生成随机种子
gameover = 0; // 游戏未结束
dir = STOP; // 初始方向为停止
// 初始蛇的位置在地图中心
snakeX[0] = WIDTH / 2;
snakeY[0] = HEIGHT / 2;
len = 1; // 初始蛇的长度为1
// 生成水果的初始位置
fruitX = rand() % WIDTH;
fruitY = rand() % HEIGHT;
score = 0; // 初始得分为0
speed = 100; // 初始速度设定为100ms
}
void Draw()
{
system("cls"); // 清空屏幕
// 打印地图和蛇
for (int i = 0; i < WIDTH + 2; i++)
printf("#"); // 打印上边界
printf("\n");
for (int i = 0; i < HEIGHT; i++)
{
for (int j = 0; j < WIDTH; j++)
{
if (j == 0)
printf("#"); // 打印左边界
if (i == snakeY[0] && j == snakeX[0])
printf("O"); // 打印蛇头
else if (i == fruitY && j == fruitX)
printf("F"); // 打印水果
else
{
int printFlag = 0;
for (int k = 1; k < len; k++)
{
if (i == snakeY[k] && j == snakeX[k])
{
printf("o"); // 打印蛇身
printFlag = 1;
break;
}
}
if (printFlag == 0)
printf(" "); // 打印空白
}
if (j == WIDTH - 1)
printf("#"); // 打印右边界
}
printf("\n");
}
for (int i = 0; i < WIDTH + 2; i++)
printf("#"); // 打印下边界
printf("\n");
// 打印得分和速度
printf("Score:%d Speed:%d\n", score, speed);
}
void Input()
{
// 通过键盘输入改变蛇的方向
if (_kbhit())
{
switch (_getch())
{
case 'a':
dir = LEFT;
break;
case 'd':
dir = RIGHT;
break;
case 'w':
dir = UP;
break;
case 's':
dir = DOWN;
break;
case 'x':
gameover = 1; // 游戏结束
break;
}
}
}
void Logic()
{
int prevX = snakeX[0];
int prevY = snakeY[0];
int prev2X, prev2Y;
snakeX[0] += (dir == RIGHT) ? 1 : (dir == LEFT) ? -1 : 0;
snakeY[0] += (dir == DOWN) ? 1 : (dir == UP) ? -1 : 0;
// 记录蛇身的每个节点的位置
for (int i = 1; i < len; i++)
{
prev2X = snakeX[i];
prev2Y = snakeY[i];
snakeX[i] = prevX;
snakeY[i] = prevY;
prevX = prev2X;
prevY = prev2Y;
}
// 判断蛇是否吃到水果
if (snakeX[0] == fruitX && snakeY[0] == fruitY)
{
score += 10;
// 生成新的水果位置
fruitX = rand() % WIDTH;
fruitY = rand() % HEIGHT;
len++; // 蛇的长度增加
if (speed > 10)
speed -= 10; // 加快速度
}
// 判断蛇是否撞到边界或自身
for (int i = 1; i < len; i++)
{
if (snakeX[0] == snakeX[i] && snakeY[0] == snakeY[i])
{
gameover = 1; // 游戏结束
break;
}
}
if (snakeX[0] >= WIDTH || snakeX[0] < 0 || snakeY[0] >= HEIGHT || snakeY[0] < 0)
gameover = 1; // 游戏结束
}
int main()
{
Setup();
while (!gameover)
{
Draw();
Input();
Logic();
Sleep(speed); // 控制游戏速度
}
return 0;
}
```
这段代码实现了一个简单的贪吃蛇小游戏。游戏使用控制台窗口作为游戏界面,通过键盘输入来控制蛇的移动方向,吃到水果可以增加得分并增加蛇的长度,当蛇撞到边界或自身时游戏结束,最终在控制台上显示游戏的得分。代码中通过使用数组来保存蛇身的坐标,根据每个单位的坐标控制蛇的移动和绘制。使用Sleep函数来控制游戏的速度,每隔一段时间刷新画面,形成动态效果。
阅读全文