用c语言做个贪吃蛇游戏
时间: 2024-02-18 14:06:33 浏览: 101
好的,以下是一个简单的贪吃蛇游戏的C语言代码示例:
```c
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define WIDTH 50 // 游戏窗口的宽度
#define HEIGHT 20 // 游戏窗口的高度
int snake[100][2]; // 记录贪吃蛇的身体坐标
int food[2]; // 记录食物的坐标
int length; // 记录贪吃蛇的长度
int direction; // 记录贪吃蛇的移动方向
int score; // 记录得分
void gotoxy(int x, int y); // 移动光标到指定位置
void init(); // 游戏初始化
void draw(); // 绘制游戏界面
void generateFood(); // 生成食物
int check(); // 检测贪吃蛇是否死亡
void move(); // 贪吃蛇移动
void gameOver(); // 游戏结束
int main()
{
srand((unsigned)time(NULL)); // 初始化随机数种子
init(); // 初始化游戏
while (1)
{
draw(); // 绘制游戏界面
generateFood(); // 生成食物
move(); // 贪吃蛇移动
if (check()) // 检测贪吃蛇是否死亡
{
gameOver(); // 游戏结束
break;
}
Sleep(100); // 延时一段时间
}
return 0;
}
// 移动光标到指定位置
void gotoxy(int x, int y)
{
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
// 游戏初始化
void init()
{
int i;
length = 3; // 初始贪吃蛇长度为3
direction = 2; // 初始贪吃蛇移动方向为右
snake[0][0] = 5; // 初始贪吃蛇头部坐标
snake[0][1] = 5;
for (i = 1; i < length; i++)
{
snake[i][0] = snake[i - 1][0] - 1; // 初始贪吃蛇身体坐标
snake[i][1] = snake[i - 1][1];
}
score = 0; // 初始得分为0
system("cls"); // 清空屏幕
}
// 绘制游戏界面
void draw()
{
int i, j;
gotoxy(0, 0);
for (i = 0; i < HEIGHT; i++)
{
for (j = 0; j < WIDTH; j++)
{
if (i == 0 || i == HEIGHT - 1 || j == 0 || j == WIDTH - 1) // 绘制边框
printf("#");
else if (i == food[0] && j == food[1]) // 绘制食物
printf("*");
else
{
int k;
for (k = 0; k < length; k++) // 绘制贪吃蛇
{
if (i == snake[k][0] && j == snake[k][1])
{
printf("O");
break;
}
}
if (k == length) // 绘制空格
printf(" ");
}
}
printf("\n");
}
printf("Score: %d", score); // 显示得分
}
// 生成食物
void generateFood()
{
int i, j;
while (1)
{
i = rand() % (HEIGHT - 2) + 1;
j = rand() % (WIDTH - 2) + 1;
int k;
for (k = 0; k < length; k++)
{
if (i == snake[k][0] && j == snake[k][1]) // 食物位置与贪吃蛇身体重合
break;
}
if (k == length) // 食物位置合法
{
food[0] = i;
food[1] = j;
break;
}
}
}
// 检测贪吃蛇是否死亡
int check()
{
int i;
if (snake[0][0] == 0 || snake[0][0] == HEIGHT - 1 || snake[0][1] == 0 || snake[0][1] == WIDTH - 1) // 撞墙
return 1;
for (i = 1; i < length; i++)
{
if (snake[0][0] == snake[i][0] && snake[0][1] == snake[i][1]) // 撞自己
return 1;
}
return 0;
}
// 贪吃蛇移动
void move()
{
int i, j;
int x = snake[0][0], y = snake[0][1];
if (_kbhit()) // 读取键盘输入
{
char c = _getch();
if (c == 'w' && direction != 3)
direction = 1;
else if (c == 's' && direction != 1)
direction = 3;
else if (c == 'a' && direction != 2)
direction = 4;
else if (c == 'd' && direction != 4)
direction = 2;
}
if (direction == 1) // 移动方向为上
x--;
else if (direction == 3) // 移动方向为下
x++;
else if (direction == 4) // 移动方向为左
y--;
else if (direction == 2) // 移动方向为右
y++;
if (x == food[0] && y == food[1]) // 吃到食物
{
length++;
score += 10;
generateFood();
}
for (i = length - 1; i > 0; i--) // 更新贪吃蛇身体坐标
{
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1];
}
snake[0][0] = x; // 更新贪吃蛇头部坐标
snake[0][1] = y;
}
// 游戏结束
void gameOver()
{
system("cls");
printf("Game Over!\n");
printf("Your score is: %d\n", score);
printf("Press any key to restart...");
_getch();
init();
}
```
此代码可以在Windows平台上运行,使用了Windows API中的一些函数,需要包含`windows.h`头文件。