用C语言写一个贪吃蛇游戏代码
时间: 2023-12-29 12:50:51 浏览: 68
好的,以下是一个简单的贪吃蛇游戏的 C 语言代码:
```c
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 20 // 行数
#define COL 20 // 列数
int row, col; // 蛇头坐标
int fruit_row, fruit_col; // 水果坐标
int score; // 得分
int game_over; // 游戏是否结束
int snake[ROW*COL][2]; // 蛇的身体,每个元素表示横坐标和纵坐标
int snake_len; // 蛇的长度
void init_snake() // 初始化蛇的位置
{
row = ROW/2;
col = COL/2;
snake[0][0] = row;
snake[0][1] = col;
snake_len = 1;
}
void init_fruit() // 随机生成水果的位置
{
srand((unsigned int)time(NULL));
do {
fruit_row = rand() % ROW;
fruit_col = rand() % COL;
} while (fruit_row == row && fruit_col == col); // 确保水果不在蛇的位置上
}
void draw_map() // 绘制地图
{
int i, j;
system("cls"); // 清屏
printf("Score: %d\n", score);
for (i = 0; i < ROW; ++i) {
for (j = 0; j < COL; ++j) {
if (i == row && j == col) { // 绘制蛇头
printf("O");
} else if (i == fruit_row && j == fruit_col) { // 绘制水果
printf("*");
} else {
int k, is_body = 0;
for (k = 0; k < snake_len; ++k) { // 绘制蛇身体
if (snake[k][0] == i && snake[k][1] == j) {
printf("o");
is_body = 1;
break;
}
}
if (!is_body) { // 绘制空格
printf(" ");
}
}
}
printf("\n");
}
}
void update_snake() // 更新蛇的位置
{
int i;
for (i = snake_len-1; i > 0; --i) { // 后面的身体向前移动
snake[i][0] = snake[i-1][0];
snake[i][1] = snake[i-1][1];
}
snake[0][0] = row;
snake[0][1] = col;
}
void check_fruit() // 检查是否吃到水果
{
if (row == fruit_row && col == fruit_col) {
score += 10;
snake_len++;
init_fruit();
}
}
void check_game_over() // 检查游戏是否结束
{
int i;
if (row < 0 || row >= ROW || col < 0 || col >= COL) { // 撞到边界
game_over = 1;
}
for (i = 1; i < snake_len; ++i) { // 撞到自己的身体
if (row == snake[i][0] && col == snake[i][1]) {
game_over = 1;
break;
}
}
}
void check_input() // 检测键盘输入
{
if (_kbhit()) { // 判断是否有键盘输入
char c = _getch(); // 获取键盘输入
switch (c) {
case 'w': // 上
row--;
break;
case 's': // 下
row++;
break;
case 'a': // 左
col--;
break;
case 'd': // 右
col++;
break;
}
}
}
int main()
{
init_snake();
init_fruit();
draw_map();
while (!game_over) {
update_snake();
check_fruit();
check_game_over();
check_input();
draw_map();
Sleep(100); // 休眠100毫秒
}
printf("Game Over!\n");
return 0;
}
```
该代码使用了 Windows 系统的控制台函数,可能在其他系统上无法编译运行。如果需要在其他系统上运行,需要使用相应的库函数替代控制台函数。
阅读全文