用C语言输出贪吃蛇游戏
时间: 2024-05-09 11:17:41 浏览: 96
您好!感谢您的提问!以下是使用C语言输出贪吃蛇游戏的示例代码:
```c
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
// 定义游戏区域大小
#define Width 20
#define Height 20
// 定义蛇的结构体
struct SnakeNode {
int x;
int y;
struct SnakeNode* next;
};
typedef struct SnakeNode SnakeNode;
// 定义全局变量
int score = 0; // 计分器
SnakeNode* head; // 头节点
SnakeNode* food; // 食物节点
// 定义函数
SnakeNode* CreateSnakeNode(int x, int y) { // 创建节点
SnakeNode* node = (SnakeNode*)malloc(sizeof(SnakeNode));
node->x = x;
node->y = y;
node->next = NULL;
return node;
}
void InitSnake() { // 初始化蛇的位置
head = CreateSnakeNode(Width / 2, Height / 2);
head->next = CreateSnakeNode(Width / 2 - 1, Height / 2);
head->next->next = CreateSnakeNode(Width / 2 - 2, Height / 2);
}
void InitFood() { // 初始化食物的位置
food = CreateSnakeNode(rand() % Width, rand() % Height);
}
void PrintMap() { // 打印地图
system("cls"); // 清除屏幕
for (int i = 0; i < Height + 1; i++) {
for (int j = 0; j < Width + 1; j++) {
if (i == 0 || i == Height || j == 0 || j == Width) printf("*"); // 打印边界
else if (i == food->y && j == food->x) printf("$"); // 打印食物
else {
SnakeNode* p = head;
while (p != NULL) {
if (p->x == j && p->y == i) printf("@"), p = NULL; // 打印蛇
else p = p->next;
}
if (p == NULL) printf(" "); // 空地
}
}
printf("\n");
}
printf("score : %d\n", score); // 打印得分
}
void UpdateFood() { // 更新食物位置
int x, y, flag = 1;
while (flag) {
x = rand() % Width;
y = rand() % Height;
flag = 0;
SnakeNode* p = head;
while (p != NULL) {
if (p->x == x && p->y == y) {
flag = 1;
break;
}
p = p->next;
}
if (food->x == x && food->y == y) flag = 1;
}
food->x = x;
food->y = y;
}
void Move() { // 移动蛇
int x = head->x + _getch();
int y = head->y;
if ((x == head->x + 75 || x == head->x - 75 || x == head->x) && x > 0 && x < Width && y >= 0 && y < Height) {
SnakeNode* node = CreateSnakeNode(x, y);
node->next = head;
head = node;
if (head->x == food->x && head->y == food->y) {
score++;
UpdateFood();
}
else {
SnakeNode* p = head;
while (p->next->next != NULL) p = p->next;
free(p->next);
p->next = NULL;
}
}
}
void GameOver() { // 游戏结束
printf("\nGame Over\n");
system("pause");
exit(0);
}
int main() { // 入口函数
srand((unsigned)time(NULL)); // 随机数种子
InitSnake();
InitFood();
PrintMap();
while (1) {
Sleep(50); // 减缓速度
Move();
PrintMap();
SnakeNode* p = head->next;
while (p != NULL) {
if (p->x == head->x && p->y == head->y) GameOver();
p = p->next;
}
}
return 0;
}
```
希望对您有所帮助!
阅读全文