帮我用c语言写一个贪吃蛇游戏代码
时间: 2023-03-27 11:01:47 浏览: 56
好的,我可以回答这个问题。以下是一个简单的贪吃蛇游戏的 C 语言代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define WIDTH 20
#define HEIGHT 20
#define FOOD '$'
#define SNAKE_HEAD '@'
#define SNAKE_BODY '*'
int score = ;
int speed = 100;
struct Snake {
int x;
int y;
struct Snake *next;
};
struct Snake *head = NULL;
struct Snake *tail = NULL;
char map[HEIGHT][WIDTH];
void init_map() {
int i, j;
for (i = ; i < HEIGHT; i++) {
for (j = ; j < WIDTH; j++) {
if (i == || i == HEIGHT - 1 || j == || j == WIDTH - 1) {
map[i][j] = '#';
} else {
map[i][j] = ' ';
}
}
}
}
void draw_map() {
int i, j;
system("cls");
for (i = ; i < HEIGHT; i++) {
for (j = ; j < WIDTH; j++) {
printf("%c", map[i][j]);
}
printf("\n");
}
printf("Score: %d\n", score);
}
void add_snake(int x, int y) {
struct Snake *node = (struct Snake *)malloc(sizeof(struct Snake));
node->x = x;
node->y = y;
node->next = NULL;
if (head == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
void init_snake() {
add_snake(WIDTH / 2, HEIGHT / 2);
add_snake(WIDTH / 2 + 1, HEIGHT / 2);
add_snake(WIDTH / 2 + 2, HEIGHT / 2);
}
void draw_snake() {
struct Snake *p = head;
while (p != NULL) {
map[p->y][p->x] = (p == head) ? SNAKE_HEAD : SNAKE_BODY;
p = p->next;
}
}
void move_snake(int dx, int dy) {
int x = head->x + dx;
int y = head->y + dy;
if (map[y][x] == '#' || map[y][x] == SNAKE_BODY) {
printf("Game Over!\n");
exit();
}
if (map[y][x] == FOOD) {
add_snake(x, y);
score += 10;
if (speed > 50) {
speed -= 10;
}
generate_food();
} else {
map[tail->y][tail->x] = ' ';
tail->x = x;
tail->y = y;
head = tail;
tail = tail->next;
}
}
void generate_food() {
int x, y;
do {
x = rand() % (WIDTH - 2) + 1;
y = rand() % (HEIGHT - 2) + 1;
} while (map[y][x] != ' ');
map[y][x] = FOOD;
}
void play_game() {
int dx = 1, dy = ;
while (1) {
if (_kbhit()) {
char ch = _getch();
if (ch == 'a' && dx != 1) {
dx = -1;
dy = ;
} else if (ch == 'd' && dx != -1) {
dx = 1;
dy = ;
} else if (ch == 'w' && dy != 1) {
dx = ;
dy = -1;
} else if (ch == 's' && dy != -1) {
dx = ;
dy = 1;
}
}
move_snake(dx, dy);
draw_map();
draw_snake();
Sleep(speed);
}
}
int main() {
init_map();
init_snake();
generate_food();
draw_map();
draw_snake();
play_game();
return ;
}
```