帮我用c写个贪吃蛇的小游戏
时间: 2024-03-19 07:44:08 浏览: 99
好的,以下是一个简单的贪吃蛇游戏的C代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
// 定义游戏区域的大小
#define WIDTH 60
#define HEIGHT 20
// 定义贪吃蛇的结构体
typedef struct Snake
{
int x;
int y;
struct Snake *next;
} Snake;
// 定义食物的结构体
typedef struct Food
{
int x;
int y;
} Food;
// 定义全局变量
int score = 0; // 记录分数
Snake *head = NULL; // 贪吃蛇的头结点
Food food; // 食物
// 初始化贪吃蛇
void initSnake()
{
int x = WIDTH / 2;
int y = HEIGHT / 2;
head = (Snake*)malloc(sizeof(Snake));
head->x = x;
head->y = y;
head->next = NULL;
}
// 生成食物
void createFood()
{
int x = rand() % WIDTH;
int y = rand() % HEIGHT;
food.x = x;
food.y = y;
}
// 在游戏区域中画出贪吃蛇和食物
void draw()
{
system("cls"); // 清空屏幕
printf("Score: %d\n", score); // 显示分数
for (int i = 0; i < HEIGHT; i++)
{
for (int j = 0; j < WIDTH; j++)
{
if (i == head->y && j == head->x)
{
printf("O"); // 画出贪吃蛇的头部
}
else
{
Snake *node = head->next;
int flag = 0;
while (node != NULL)
{
if (node->x == j && node->y == i)
{
printf("o"); // 画出贪吃蛇的身体
flag = 1;
break;
}
node = node->next;
}
if (!flag)
{
if (i == food.y && j == food.x)
{
printf("*"); // 画出食物
}
else
{
printf(" "); // 画出游戏区域的空格
}
}
}
}
printf("\n");
}
}
// 移动贪吃蛇
void move()
{
int x = head->x;
int y = head->y;
int direction = getch(); // 获取键盘输入
switch (direction)
{
case 'w': // 上
y--;
break;
case 's': // 下
y++;
break;
case 'a': // 左
x--;
break;
case 'd': // 右
x++;
break;
default:
break;
}
// 判断是否吃到食物
if (x == food.x && y == food.y)
{
score++; // 分数加一
createFood(); // 生成新的食物
}
else
{
Snake *node = head->next;
while (node->next != NULL)
{
node = node->next;
}
free(node); // 释放尾部节点
}
// 将新的节点插入到头部
Snake *new_head = (Snake*)malloc(sizeof(Snake));
new_head->x = x;
new_head->y = y;
new_head->next = head;
head = new_head;
}
int main()
{
srand((unsigned int)time(NULL)); // 随机数种子
initSnake(); // 初始化贪吃蛇
createFood(); // 生成食物
while (1)
{
draw(); // 画出游戏区域
move(); // 移动贪吃蛇
Sleep(100); // 稍微暂停一下
}
return 0;
}
```
以上代码仅为示例,实现的功能比较简单,还有很多可以优化的地方。如果你需要更加复杂的贪吃蛇游戏,可以参考其他相关的教程和资料。
阅读全文