请用C语言实现一个贪吃蛇的算法
时间: 2023-05-12 13:04:24 浏览: 61
非常感谢您的提问!以下是一个简单的贪吃蛇算法的C语言实现:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define ROW 20
#define COL 40
int snake[ROW * COL][2]; // 蛇的坐标
int food[2]; // 食物的坐标
int len = 3; // 蛇的长度
int score = 0; // 得分
void init(); // 初始化
void draw(); // 绘制
void move(); // 移动
void generate_food(); // 生成食物
int is_eat_food(); // 判断是否吃到食物
int is_game_over(); // 判断游戏是否结束
int main() {
init();
while (1) {
draw();
move();
if (is_eat_food()) {
generate_food();
score++;
len++;
}
if (is_game_over()) {
printf("Game over! Your score is %d.\n", score);
break;
}
Sleep(100);
}
return 0;
}
void init() {
srand(time(NULL));
// 初始化蛇的位置
snake[0][0] = ROW / 2;
snake[0][1] = COL / 2;
snake[1][0] = ROW / 2 + 1;
snake[1][1] = COL / 2;
snake[2][0] = ROW / 2 + 2;
snake[2][1] = COL / 2;
// 初始化食物的位置
generate_food();
}
void draw() {
system("cls");
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
if (i == food[0] && j == food[1]) {
printf("*");
} else {
int flag = 0;
for (int k = 0; k < len; 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 move() {
int direction = getch();
int new_head[2];
new_head[0] = snake[len - 1][0];
new_head[1] = snake[len - 1][1];
switch (direction) {
case 'w':
new_head[0]--;
break;
case 's':
new_head[0]++;
break;
case 'a':
new_head[1]--;
break;
case 'd':
new_head[1]++;
break;
}
for (int i = 0; i < len - 1; i++) {
snake[i][0] = snake[i + 1][0];
snake[i][1] = snake[i + 1][1];
}
snake[len - 1][0] = new_head[0];
snake[len - 1][1] = new_head[1];
}
void generate_food() {
int x, y;
do {
x = rand() % ROW;
y = rand() % COL;
} while (x == snake[len - 1][0] && y == snake[len - 1][1]);
food[0] = x;
food[1] = y;
}
int is_eat_food() {
if (snake[len - 1][0] == food[0] && snake[len - 1][1] == food[1]) {
return 1;
} else {
return 0;
}
}
int is_game_over() {
if (snake[len - 1][0] < 0 || snake[len - 1][0] >= ROW || snake[len - 1][1] < 0 || snake[len - 1][1] >= COL) {
return 1;
}
for (int i = 0; i < len - 1; i++) {
if (snake[i][0] == snake[len - 1][0] && snake[i][1] == snake[len - 1][1]) {
return 1;
}
}
return 0;
}