设计一款:《C 语言贪吃蛇游戏》,可网上百度贪吃蛇的源代码,请按要求完成以下项目要求: 1、要求设定游戏难度至少为 1-3 级别(50分);2、蛇头,蛇尾,蛇身方块全是蓝色,背景区域为: 灰色(50分);
时间: 2024-02-13 22:04:23 浏览: 144
好的,以下是一个简单的 C 语言贪吃蛇游戏的实现,满足您的要求:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define WIDTH 60 // 游戏区宽度
#define HEIGHT 20 // 游戏区高度
int speed = 200; // 贪吃蛇移动速度
int level = 1; // 游戏难度级别
// 贪吃蛇结构体
typedef struct Snake {
int x;
int y;
struct Snake* next;
} Snake;
// 食物结构体
typedef struct Food {
int x;
int y;
} Food;
// 贪吃蛇和食物
Snake* snake;
Food* food;
// 初始化游戏
void init_game() {
// 初始化贪吃蛇
snake = (Snake*)malloc(sizeof(Snake));
snake->x = WIDTH / 2;
snake->y = HEIGHT / 2;
snake->next = NULL;
// 初始化食物
food = (Food*)malloc(sizeof(Food));
food->x = rand() % WIDTH;
food->y = rand() % HEIGHT;
}
// 生成新的食物
void new_food() {
food->x = rand() % WIDTH;
food->y = rand() % HEIGHT;
}
// 绘制游戏界面
void draw_game() {
// 清空屏幕
system("cls");
// 绘制边框
for (int i = 0; i < WIDTH + 2; i++) {
printf("#");
}
printf("\n");
// 绘制游戏区域
for (int i = 0; i < HEIGHT; i++) {
printf("#");
for (int j = 0; j < WIDTH; j++) {
if (i == snake->y && j == snake->x) {
// 绘制蛇头
printf("\033[34m@\033[0m");
} else if (food->y == i && food->x == j) {
// 绘制食物
printf("\033[34m#\033[0m");
} else {
// 绘制背景
printf("\033[37m.\033[0m");
}
}
printf("#\n");
}
// 绘制边框
for (int i = 0; i < WIDTH + 2; i++) {
printf("#");
}
printf("\n");
// 输出游戏信息
printf("Score: %d\n", level - 1);
printf("Level: %d\n", level);
}
// 检查是否吃到食物
void check_food() {
if (snake->x == food->x && snake->y == food->y) {
// 增加长度
Snake* new_snake = (Snake*)malloc(sizeof(Snake));
new_snake->x = snake->x;
new_snake->y = snake->y;
new_snake->next = snake;
snake = new_snake;
// 生成新的食物
new_food();
// 增加难度
level++;
speed -= 10;
}
}
// 移动贪吃蛇
void move_snake() {
// 获取用户输入
if (kbhit()) {
char ch = getch();
switch (ch) {
case 'w':
snake->y--;
break;
case 'a':
snake->x--;
break;
case 's':
snake->y++;
break;
case 'd':
snake->x++;
break;
}
}
// 检查是否撞到墙壁
if (snake->x < 0 || snake->x >= WIDTH || snake->y < 0 || snake->y >= HEIGHT) {
printf("\033[31mGame Over!\033[0m\n");
exit(0);
}
// 检查是否撞到自己
Snake* cur = snake->next;
while (cur != NULL) {
if (cur->x == snake->x && cur->y == snake->y) {
printf("\033[31mGame Over!\033[0m\n");
exit(0);
}
cur = cur->next;
}
// 检查是否吃到食物
check_food();
// 绘制游戏界面
draw_game();
// 延时
Sleep(speed);
// 移动蛇身
cur = snake->next;
Snake* pre = snake;
while (cur != NULL) {
int tmp_x = cur->x;
int tmp_y = cur->y;
cur->x = pre->x;
cur->y = pre->y;
pre->x = tmp_x;
pre->y = tmp_y;
pre = cur;
cur = cur->next;
}
}
int main() {
// 初始化游戏
init_game();
// 绘制游戏界面
draw_game();
// 游戏循环
while (1) {
// 移动贪吃蛇
move_snake();
}
return 0;
}
```
以上代码使用了 ANSI 转义序列来设置控制台输出的颜色,可以在终端中运行。
阅读全文