请用C语言代码实现贪吃蛇游戏
时间: 2023-08-14 12:06:32 浏览: 45
以下是一个简单的贪吃蛇游戏的 C 语言代码示例:
```c
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_ROW 20
#define MAX_COL 30
int row, col;
int snake_row, snake_col;
int food_row, food_col;
int snake_body_row[100], snake_body_col[100];
int snake_length;
char direction;
char map[MAX_ROW][MAX_COL];
void init_map();
void init_snake();
void init_food();
void draw_map();
void update_snake();
void update_map();
int check_game_over();
void game_over();
int main()
{
srand(time(NULL));
init_map();
init_snake();
init_food();
draw_map();
while (1) {
if (kbhit()) {
direction = getch();
}
update_snake();
update_map();
if (check_game_over()) {
game_over();
break;
}
draw_map();
Sleep(100);
}
return 0;
}
void init_map()
{
for (row = 0; row < MAX_ROW; row++) {
for (col = 0; col < MAX_COL; col++) {
if (row == 0 || row == MAX_ROW - 1 || col == 0 || col == MAX_COL - 1) {
map[row][col] = '#';
} else {
map[row][col] = ' ';
}
}
}
}
void init_snake()
{
snake_row = MAX_ROW / 2;
snake_col = MAX_COL / 2;
snake_body_row[0] = snake_row;
snake_body_col[0] = snake_col;
snake_length = 1;
direction = ' ';
}
void init_food()
{
food_row = rand() % (MAX_ROW - 2) + 1;
food_col = rand() % (MAX_COL - 2) + 1;
}
void draw_map()
{
system("cls");
for (row = 0; row < MAX_ROW; row++) {
for (col = 0; col < MAX_COL; col++) {
printf("%c", map[row][col]);
}
printf("\n");
}
}
void update_snake()
{
int i;
for (i = snake_length - 1; i > 0; i--) {
snake_body_row[i] = snake_body_row[i - 1];
snake_body_col[i] = snake_body_col[i - 1];
}
switch (direction) {
case 'w':
case 'W':
snake_row--;
break;
case 's':
case 'S':
snake_row++;
break;
case 'a':
case 'A':
snake_col--;
break;
case 'd':
case 'D':
snake_col++;
break;
}
snake_body_row[0] = snake_row;
snake_body_col[0] = snake_col;
if (snake_row == food_row && snake_col == food_col) {
snake_length++;
init_food();
}
}
void update_map()
{
int i;
for (row = 0; row < MAX_ROW; row++) {
for (col = 0; col < MAX_COL; col++) {
map[row][col] = ' ';
}
}
for (i = 0; i < snake_length; i++) {
row = snake_body_row[i];
col = snake_body_col[i];
if (i == 0) {
map[row][col] = '@';
} else {
map[row][col] = '*';
}
}
map[food_row][food_col] = '$';
}
int check_game_over()
{
int i;
if (snake_row == 0 || snake_row == MAX_ROW - 1 || snake_col == 0 || snake_col == MAX_COL - 1) {
return 1;
}
for (i = 1; i < snake_length; i++) {
if (snake_row == snake_body_row[i] && snake_col == snake_body_col[i]) {
return 1;
}
}
return 0;
}
void game_over()
{
printf("Game Over!\n");
}
```
该示例中使用了 Windows 系统下的 conio.h 头文件提供的 kbhit() 和 getch() 函数来实现键盘输入的检测和获取。如果你使用的是其他系统或环境,可能需要替换这部分代码。