帮我用C语言写一个可以玩贪吃蛇的程序
时间: 2023-08-28 17:08:50 浏览: 113
好的,下面是一个基于控制台的简单贪吃蛇游戏的代码,使用C语言编写。
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define WIDTH 20 // 地图宽度
#define HEIGHT 20 // 地图高度
#define SNAKE_LENGTH 3 // 初始蛇长
#define SPEED 100 // 游戏速度
int map[WIDTH][HEIGHT]; // 地图
int snake[SNAKE_LENGTH][2]; // 蛇的身体数组
int direction = 'd'; // 蛇的方向
int score = 0; // 得分
// 初始化地图
void init_map() {
int i, j;
for (i = 0; i < WIDTH; i++) {
for (j = 0; j < HEIGHT; j++) {
if (i == 0 || j == 0 || i == WIDTH - 1 || j == HEIGHT - 1)
map[i][j] = 1; // 周围一圈为墙
else
map[i][j] = 0; // 其他为可行走区域
}
}
}
// 初始化蛇
void init_snake() {
int i, j;
snake[0][0] = WIDTH / 2;
snake[0][1] = HEIGHT / 2;
for (i = 1; i < SNAKE_LENGTH; i++) {
snake[i][0] = snake[i - 1][0] - 1;
snake[i][1] = snake[i - 1][1];
}
}
// 初始化食物
void init_food() {
int x, y;
do {
x = rand() % (WIDTH - 2) + 1;
y = rand() % (HEIGHT - 2) + 1;
} while (map[x][y] == 2); // 如果生成的位置已经是蛇或墙,则重新生成
map[x][y] = 2; // 食物为2
}
// 显示地图
void display_map() {
system("cls"); // 清屏
int i, j;
for (i = 0; i < WIDTH; i++) {
for (j = 0; j < HEIGHT; j++) {
if (map[i][j] == 0)
printf(" ");
else if (map[i][j] == 1)
printf("#");
else if (map[i][j] == 2)
printf("*");
int k;
for (k = 0; k < SNAKE_LENGTH; k++) {
if (snake[k][0] == i && snake[k][1] == j) {
printf("o");
break;
}
}
}
printf("\n");
}
printf("Score: %d\n", score);
}
// 更新蛇的位置
void update_snake() {
int i;
for (i = SNAKE_LENGTH - 1; i > 0; i--) {
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1];
}
switch (direction) {
case 'w': snake[0][0]--; break; // 上
case 's': snake[0][0]++; break; // 下
case 'a': snake[0][1]--; break; // 左
case 'd': snake[0][1]++; break; // 右
}
}
// 判断是否吃到食物
void check_food() {
if (map[snake[0][0]][snake[0][1]] == 2) {
score++;
map[snake[0][0]][snake[0][1]] = 0; // 清空食物
SNAKE_LENGTH++;
snake[SNAKE_LENGTH - 1][0] = snake[SNAKE_LENGTH - 2][0];
snake[SNAKE_LENGTH - 1][1] = snake[SNAKE_LENGTH - 2][1];
init_food();
}
}
// 判断是否撞墙或撞到自己
int check_crash() {
if (map[snake[0][0]][snake[0][1]] == 1) // 撞墙
return 1;
int i;
for (i = 1; i < SNAKE_LENGTH; i++) {
if (snake[i][0] == snake[0][0] && snake[i][1] == snake[0][1]) // 撞到自己
return 1;
}
return 0;
}
int main() {
init_map();
init_snake();
init_food();
while (1) {
display_map();
update_snake();
check_food();
if (check_crash()) {
printf("Game Over!\n");
break;
}
Sleep(SPEED);
if (_kbhit()) { // 如果有键盘输入
char c = _getch();
switch (c) {
case 'w': case 's': case 'a': case 'd':
if (abs(c - direction) != 2) // 判断是否掉头
direction = c;
break;
}
}
}
return 0;
}
```
该程序基于控制台,使用方向键控制蛇的运动方向,吃到食物会增加得分和蛇的长度,撞墙或撞到自己会游戏结束。
阅读全文