帮我用C++写一个贪吃蛇游戏的代码
时间: 2023-09-23 08:06:33 浏览: 550
### 回答1:
好的,这是一个使用 C 语言编写的贪吃蛇游戏的示例代码。注意这只是一个示例,你可能需要根据你的需求进行修改。
首先,我们需要包含必要的头文件:
```
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <time.h>
```
然后我们定义一些常量,如游戏地图的大小、蛇的初始长度和速度等:
```
#define WIDTH 60
#define HEIGHT 20
#define LENGTH 3
#define SPEED 200
```
接下来,我们定义蛇和食物的结构体:
```
struct Snake {
int x, y;
} snake[WIDTH * HEIGHT];
struct Food {
int x, y;
} food;
```
接着我们定义一些函数来初始化游戏,生成食物,检查游戏结束等:
```
void initGame();
void generateFood();
int checkGameOver();
void moveSnake();
void printMap();
```
接下来我们可以开始编写 main 函数:
```
int main()
{
// 初始化游戏
initGame();
// 游戏主循环
while (1) {
// 检查游戏是否结束
if (checkGameOver()) {
printf("Game Over!\n");
break;
}
// 移动蛇
moveSnake();
// 生成食物
generateFood();
// 打印地图
printMap();
// 延时
Sleep(SPEED);
}
return 0;
}
```
最后,我们可以编写其他函数的实现,例如 initGame 函数:
```
void initGame()
{
// 初始化随
### 回答2:
下面是一个简单的贪吃蛇游戏的C代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
// 定义蛇身和食物的坐标
int snakeX[50], snakeY[50], foodX, foodY;
// 定义游戏画面的宽高
const int width = 20;
const int height = 20;
// 定义蛇的初始长度和方向
int snakeLength = 4;
char direction = ' ';
// 初始化游戏
void initialize()
{
snakeX[0] = width / 2;
snakeY[0] = height / 2;
// 生成初始食物的位置
foodX = rand() % width;
foodY = rand() % height;
}
// 绘制游戏画面
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 == foodY && j == foodX)
printf("*");
else
{
int printTail = 0;
for (int k = 1; k < snakeLength; k++)
{
if (i == snakeY[k] && j == snakeX[k])
{
printf("o");
printTail = 1;
break;
}
}
if (!printTail)
printf(" ");
}
if (j == width - 1)
printf("#");
}
printf("\n");
}
// 绘制下边框
for (int i = 0; i < width + 2; i++)
printf("#");
printf("\n");
}
// 处理用户输入事件
void input()
{
if (_kbhit())
direction = _getch();
}
// 更新游戏状态
void update()
{
// 更新蛇尾的位置
for (int i = snakeLength - 1; i > 0; i--)
{
snakeX[i] = snakeX[i - 1];
snakeY[i] = snakeY[i - 1];
}
// 根据方向更新蛇头的位置
switch (direction)
{
case 'w':
snakeY[0]--;
break;
case 's':
snakeY[0]++;
break;
case 'a':
snakeX[0]--;
break;
case 'd':
snakeX[0]++;
break;
}
// 判断蛇是否吃到食物
if (snakeX[0] == foodX && snakeY[0] == foodY)
{
// 生成新食物的位置
foodX = rand() % width;
foodY = rand() % height;
snakeLength++;
}
}
// 判断游戏是否结束
int gameOver()
{
// 判断蛇头是否碰到墙壁
if (snakeX[0] >= width || snakeX[0] < 0 || snakeY[0] >= height || snakeY[0] < 0)
return 1;
// 判断蛇头是否碰到身体
for (int i = 1; i < snakeLength; i++)
{
if (snakeX[0] == snakeX[i] && snakeY[0] == snakeY[i])
return 1;
}
return 0;
}
int main()
{
initialize();
while (!gameOver())
{
draw();
input();
update();
Sleep(100); // 控制游戏速度
}
printf("游戏结束!\n");
return 0;
}
```
这段代码实现了一个简单的贪吃蛇游戏。你可以使用C语言编译器运行它,在控制台中玩游戏。玩家通过键盘输入控制蛇的移动方向,吃掉食物增加长度,蛇头碰到墙壁或自己的身体时游戏结束。游戏画面会不断更新,并且演示的代码中限制了游戏的速度。
### 回答3:
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#define WIDTH 20
#define HEIGHT 20
int snakeX[100], snakeY[100]; // 蛇身坐标
int length; // 蛇身长度
int fruitX, fruitY; // 水果坐标
int score; // 得分
int direction; // 移动方向
void gotoxy(int x, int y) {
COORD pos = {x, y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
void init() {
int i;
length = 1;
snakeX[0] = WIDTH / 2;
snakeY[0] = HEIGHT / 2;
fruitX = rand() % WIDTH;
fruitY = rand() % HEIGHT;
score = 0;
direction = 'd';
system("cls");
gotoxy(fruitX, fruitY);
printf("F");
for(i = 0; i < length; i++) {
gotoxy(snakeX[i], snakeY[i]);
printf("*");
}
}
void updateDirection() {
if(kbhit()) {
switch(getch()) {
case 'w':
if(direction != 's')
direction = 'w';
break;
case 's':
if(direction != 'w')
direction = 's';
break;
case 'a':
if(direction != 'd')
direction = 'a';
break;
case 'd':
if(direction != 'a')
direction = 'd';
break;
}
}
}
void updateSnake() {
int i;
int prevX = snakeX[0], prevY = snakeY[0];
int prev2X, prev2Y;
snakeX[0] += (direction == 'a') ? -1 : (direction == 'd') ? 1 : 0;
snakeY[0] += (direction == 'w') ? -1 : (direction == 's') ? 1 : 0;
for(i = 1; i < length; i++) {
prev2X = snakeX[i];
prev2Y = snakeY[i];
snakeX[i] = prevX;
snakeY[i] = prevY;
prevX = prev2X;
prevY = prev2Y;
}
}
void checkCollision() {
int i;
if(snakeX[0] == fruitX && snakeY[0] == fruitY) {
length++;
score++;
fruitX = rand() % WIDTH;
fruitY = rand() % HEIGHT;
gotoxy(fruitX, fruitY);
printf("F");
}
if(snakeX[0] >= WIDTH || snakeX[0] < 0 || snakeY[0] >= HEIGHT || snakeY[0] < 0) {
gotoxy(WIDTH / 2 - 4, HEIGHT / 2);
printf("Game Over!");
getch();
exit(0);
}
for(i = 1; i < length; i++) {
if(snakeX[i] == snakeX[0] && snakeY[i] == snakeY[0]) {
gotoxy(WIDTH / 2 - 4, HEIGHT / 2);
printf("Game Over!");
getch();
exit(0);
}
}
}
void drawGame() {
int i;
gotoxy(snakeX[0], snakeY[0]);
printf("*");
for(i = 1; i < length; i++) {
gotoxy(snakeX[i], snakeY[i]);
printf("*");
}
gotoxy(0, HEIGHT);
printf("Score: %d", score);
}
int main() {
system("mode con:cols=80 lines=25");
init();
while(1) {
if(_kbhit()) {
updateDirection();
}
updateSnake();
checkCollision();
drawGame();
Sleep(100);
system("cls");
}
return 0;
}
阅读全文
相关推荐









