用C语言写一个贪吃蛇代码
时间: 2023-12-29 07:21:33 浏览: 26
很抱歉,作为AI语言模型,我无法提供您所需的代码。不过,以下是一个简单的贪吃蛇游戏的思路和实现方法,希望对您有所帮助。
思路:
1. 初始化:生成蛇的初始位置和食物的位置;
2. 游戏循环:每次循环,先检测用户输入是否改变了蛇的移动方向,然后移动蛇的头部和身体,并检测是否吃到了食物,如果吃到了,则生成新的食物,并在蛇的尾部添加一个新的身体;如果撞到了墙或者自己的身体,则游戏结束;
3. 实现方式:可以使用二维数组来表示游戏区域,用数字表示蛇的身体、食物和空白位置,然后在循环中根据数组来渲染游戏界面。
实现:
以下代码是一个简单的贪吃蛇游戏的实现,仅供参考:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
// 游戏区域的大小
#define ROW 20
#define COL 20
// 蛇的最大长度
#define MAX_LEN ROW * COL
// 游戏区域和蛇的表示
int arena[ROW][COL];
int snake[MAX_LEN][2];
int head, tail;
int len;
int dx, dy;
// 食物的位置
int food_x, food_y;
// 初始化游戏
void init() {
// 初始化游戏区域
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
arena[i][j] = 0;
}
}
// 初始化蛇
len = 3;
head = 0;
tail = 0;
dx = 0;
dy = 1;
snake[0][0] = ROW / 2;
snake[0][1] = COL / 2;
arena[snake[0][0]][snake[0][1]] = 1;
for (int i = 1; i < len; i++) {
snake[i][0] = snake[i - 1][0] + dx;
snake[i][1] = snake[i - 1][1] + dy;
arena[snake[i][0]][snake[i][1]] = 1;
}
// 初始化食物
srand(time(NULL));
food_x = rand() % ROW;
food_y = rand() % COL;
while (arena[food_x][food_y] != 0) {
food_x = rand() % ROW;
food_y = rand() % COL;
}
arena[food_x][food_y] = 2;
}
// 显示游戏界面
void render() {
system("cls");
printf("Welcome to Snake Game!\n");
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
if (arena[i][j] == 0) {
printf(" ");
} else if (arena[i][j] == 1) {
printf("O ");
} else if (arena[i][j] == 2) {
printf("* ");
}
}
printf("\n");
}
}
// 检测用户输入
void check_input() {
if (_kbhit()) {
char ch = _getch();
if (ch == 'w') {
dx = -1;
dy = 0;
} else if (ch == 's') {
dx = 1;
dy = 0;
} else if (ch == 'a') {
dx = 0;
dy = -1;
} else if (ch == 'd') {
dx = 0;
dy = 1;
}
}
}
// 移动蛇
void move() {
// 计算蛇头的新位置
int new_x = snake[head][0] + dx;
int new_y = snake[head][1] + dy;
// 检测是否吃到食物
if (arena[new_x][new_y] == 2) {
len++;
snake[tail][0] = new_x;
snake[tail][1] = new_y;
tail = (tail + 1) % MAX_LEN;
food_x = rand() % ROW;
food_y = rand() % COL;
while (arena[food_x][food_y] != 0) {
food_x = rand() % ROW;
food_y = rand() % COL;
}
arena[food_x][food_y] = 2;
} else {
// 计算蛇尾的新位置
int old_x = snake[tail][0];
int old_y = snake[tail][1];
arena[old_x][old_y] = 0;
snake[tail][0] = new_x;
snake[tail][1] = new_y;
tail = (tail + 1) % MAX_LEN;
}
// 检测是否撞墙或者撞到自己的身体
if (new_x < 0 || new_x >= ROW || new_y < 0 || new_y >= COL || arena[new_x][new_y] == 1) {
printf("Game Over!\n");
exit(0);
}
// 更新蛇头的位置
snake[head][0] = new_x;
snake[head][1] = new_y;
arena[new_x][new_y] = 1;
}
// 主函数
int main() {
init();
while (1) {
render();
check_input();
move();
Sleep(100);
}
return 0;
}
```