用C编写贪吃蛇游戏的代码
时间: 2023-04-02 18:04:07 浏览: 88
你好,以下是用 C 编写贪吃蛇游戏的代码:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define WIDTH 30
#define HEIGHT 20
int snake[100][2]; // 蛇身坐标
int food[2]; // 食物坐标
int length = 3; // 蛇身长度
int direction = 1; // 蛇头方向,1为右,2为下,3为左,4为上
void init(); // 初始化游戏
void draw(); // 绘制游戏界面
void update(); // 更新游戏状态
void generateFood(); // 生成食物
int isGameOver(); // 判断游戏是否结束
int main() {
init();
while (1) {
draw();
update();
if (isGameOver()) {
printf("Game Over!\n");
break;
}
Sleep(100);
}
return ;
}
void init() {
// 初始化蛇身
snake[][] = 5;
snake[][1] = 5;
snake[1][] = 4;
snake[1][1] = 5;
snake[2][] = 3;
snake[2][1] = 5;
// 生成食物
generateFood();
}
void draw() {
system("cls"); // 清屏
// 绘制游戏界面
for (int i = ; i < HEIGHT; i++) {
for (int j = ; j < WIDTH; j++) {
if (i == || i == HEIGHT - 1 || j == || j == WIDTH - 1) {
printf("#");
} else if (i == food[1] && j == food[]) {
printf("O");
} else {
int flag = ;
for (int k = ; k < length; k++) {
if (snake[k][] == j && snake[k][1] == i) {
printf("*");
flag = 1;
break;
}
}
if (!flag) {
printf(" ");
}
}
}
printf("\n");
}
}
void update() {
// 获取键盘输入
if (_kbhit()) {
int key = _getch();
if (key == 'w' && direction != 2) {
direction = 4;
} else if (key == 's' && direction != 4) {
direction = 2;
} else if (key == 'a' && direction != 1) {
direction = 3;
} else if (key == 'd' && direction != 3) {
direction = 1;
}
}
// 移动蛇身
for (int i = length - 1; i > ; i--) {
snake[i][] = snake[i - 1][];
snake[i][1] = snake[i - 1][1];
}
// 移动蛇头
if (direction == 1) {
snake[][]++;
} else if (direction == 2) {
snake[][1]++;
} else if (direction == 3) {
snake[][]--;
} else if (direction == 4) {
snake[][1]--;
}
// 判断是否吃到食物
if (snake[][] == food[] && snake[][1] == food[1]) {
length++;
generateFood();
}
}
void generateFood() {
// 生成随机坐标
int x = rand() % (WIDTH - 2) + 1;
int y = rand() % (HEIGHT - 2) + 1;
// 判断是否与蛇身重合
for (int i = ; i < length; i++) {
if (snake[i][] == x && snake[i][1] == y) {
generateFood();
return;
}
}
food[] = x;
food[1] = y;
}
int isGameOver() {
// 判断是否撞墙
if (snake[][] == || snake[][] == WIDTH - 1 || snake[][1] == || snake[][1] == HEIGHT - 1) {
return 1;
}
// 判断是否撞到自己
for (int i = 1; i < length; i++) {
if (snake[][] == snake[i][] && snake[][1] == snake[i][1]) {
return 1;
}
}
return ;
}
阅读全文