C语言书写一个贪吃蛇游戏
时间: 2023-05-14 13:05:26 浏览: 34
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define MAX_X 20
#define MAX_Y 20
int snake[MAX_X * MAX_Y][2];
int food[2];
int score = 0;
int length = 1;
int direction = 0; // 0: up, 1: right, 2: down, 3: left
void init();
void draw();
void update();
void generate_food();
int main() {
init();
while (1) {
if (kbhit()) {
char ch = getch();
if (ch == 'w' && direction != 2) {
direction = 0;
} else if (ch == 'd' && direction != 3) {
direction = 1;
} else if (ch == 's' && direction != 0) {
direction = 2;
} else if (ch == 'a' && direction != 1) {
direction = 3;
}
}
update();
draw();
Sleep(100);
}
return 0;
}
void init() {
snake[0][0] = MAX_X / 2;
snake[0][1] = MAX_Y / 2;
generate_food();
}
void draw() {
system("cls");
for (int i = 0; i < MAX_X; i++) {
for (int j = 0; j < MAX_Y; j++) {
if (i == snake[0][0] && j == snake[0][1]) {
printf("O");
} else if (i == food[0] && j == food[1]) {
printf("*");
} else {
int flag = 0;
for (int k = 1; k < length; k++) {
if (i == snake[k][0] && j == snake[k][1]) {
printf("o");
flag = 1;
break;
}
}
if (!flag) {
printf(" ");
}
}
}
printf("\n");
}
printf("Score: %d\n", score);
}
void update() {
int x = snake[0][0];
int y = snake[0][1];
if (direction == 0) {
x--;
} else if (direction == 1) {
y++;
} else if (direction == 2) {
x++;
} else if (direction == 3) {
y--;
}
if (x < 0 || x >= MAX_X || y < 0 || y >= MAX_Y) {
printf("Game over!\n");
exit(0);
}
if (x == food[0] && y == food[1]) {
score += 10;
length++;
generate_food();
}
for (int 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;
for (int i = 1; i < length; i++) {
if (snake[0][0] == snake[i][0] && snake[0][1] == snake[i][1]) {
printf("Game over!\n");
exit(0);
}
}
}
void generate_food() {
int x, y;
do {
x = rand() % MAX_X;
y = rand() % MAX_Y;
} while (x == snake[0][0] && y == snake[0][1]);
food[0] = x;
food[1] = y;
}