基于C语言的双人贪吃蛇游戏程序设计
实现目标
制作一个两个两个人一起同时玩的双人贪吃蛇游戏,有比分并记录历史成绩
(1) 打开游戏时能够自动播放背景音乐
(2) 开始菜单,显示历史用户名及其对应的成绩
(3) 开始菜单可以输入两人的用户名
(4) P1 可以通过w,s,a,d来控制蛇1的移动
(5) P2 可以通过小键盘的“上,下,左,右”来控制蛇2的移动
(6) 食物在每次被吃后都会随机出现在地图
(7) 贪吃蛇吃到食物后长度会增加1
(8) 撞墙和撞到自己就会结束游戏,下一界面能够输出死因
(9) 随着分数增加,蛇移动会越来越快
(10) 每一场的两人的分数及用户名都会被记录
系统三大界面功能示意图
函数功能设计
函数名 | 函数功能 |
---|---|
welcome | 打印开始界面 |
Finish | 打印结束界面,清空贪吃蛇结构占用的内存 |
creatgraph | 打印围墙 |
gotoxy | 移动光标 |
color | 设置颜色 |
gotoprintboundary | 跳转打印边界 |
gotoprintsnake | 打印贪吃蛇结构 |
gotodelete | 跳转删除 |
creatsnake | 初始化蛇 |
creatfood | 产生食物 |
ClickControl | 获取键盘信号 |
Judge | 判断蛇是否死亡 |
MovingBody | 控制蛇的移动 |
Eating | 蛇吃到食物后的操作 |
ChangeBody1 | 蛇1的坐标变换 |
ChangeBody2 | 蛇2的坐标变换 |
record | 文件操作记录成绩 |
printrecord | 读取文件,输出成绩 |
各函数调用关系如图所示:
该程序中的数据结构与算法
- 结构体:
struct Food
{
int x;
int y;
} food;
//这是产生食物的结构体
- 结构体数组:
typedef struct
{
char name[10];
int score;
} Rank;
Rank rank[2];
//这是保存用户名及其对应分数的结构体数组
- 链表:
typedef struct Snakes
{
int x;
int y;
struct Snakes* next;
} snake;
snake* head;
snake* head2;
//本程序中两条蛇的产生及控制均使用链表存储
- 文件输入操作:
void record()
{
FILE *fp;
fp = fopen("data.txt", "a");
for (int i = 0; i < 2; i++)