用c语言写一个完整的贪吃蛇
时间: 2023-11-19 19:06:32 浏览: 114
好的,下面是一个简单的贪吃蛇游戏,使用C语言编写:
```
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define WIDTH 20
#define HEIGHT 20
int snake[WIDTH*HEIGHT][2]; // 蛇的坐标数组
int head; // 蛇头在数组中的位置
int tail; // 蛇尾在数组中的位置
int food[2]; // 食物的坐标
int score; // 得分
void init(); // 初始化游戏
void draw(); // 绘制游戏界面
void update(); // 更新游戏状态
void move(int dx, int dy); // 移动蛇
void generate_food(); // 生成食物
int main() {
init();
while (1) {
if (kbhit()) { // 如果有键盘输入
char ch = getch();
if (ch == 'w') move(-1, 0);
else if (ch == 'a') move(0, -1);
else if (ch == 's') move(1, 0);
else if (ch == 'd') move(0, 1);
else if (ch == 'q') break;
}
update();
draw();
Sleep(100);
}
system("pause");
return 0;
}
void init() {
// 初始化蛇头、蛇尾、食物、得分
head = tail = 0;
snake[head][0] = 0;
snake[head][1] = 0;
generate_food();
score = 0;
}
void generate_food() {
// 随机生成食物的坐标
food[0] = rand() % HEIGHT;
food[1] = rand() % WIDTH;
}
void draw() {
// 清空屏幕
system("cls");
// 打印游戏界面
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
if (i == snake[head][0] && j == snake[head][1]) printf("O"); // 蛇头
else if (i == food[0] && j == food[1]) printf("*"); // 食物
else {
int flag = 0;
for (int k = tail; k <= head; 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() {
// 判断是否吃到食物
if (snake[head][0] == food[0] && snake[head][1] == food[1]) {
score++;
generate_food();
}
else tail++; // 蛇尾向前移动
}
void move(int dx, int dy) {
// 移动蛇头
int x = snake[head][0] + dx;
int y = snake[head][1] + dy;
// 判断是否越界或碰到蛇身
if (x < 0 || x >= HEIGHT || y < 0 || y >= WIDTH) return;
for (int i = tail; i <= head; i++) {
if (x == snake[i][0] && y == snake[i][1]) return;
}
head++; // 蛇头向前移动
snake[head][0] = x;
snake[head][1] = y;
}
```
这个贪吃蛇游戏实现比较简单,只有基本的移动和食物吃掉得分增加的功能。如果需要更完善的游戏,还需要考虑更多的细节,如蛇身的增长、游戏结束等。
阅读全文