基于C语言的双人贪吃蛇游戏程序设计
基于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++){fprintf(fp, "%85s|%10d\n", (rank + i)->name, (rank + i)->score);}fclose(fp);
}
//这是创建文件,并且保存用户的用户名及相应的分数
- 文件读取操作:
int printrecord()
{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);gotoxy(75, 15);printf("%10s|%10s\n", "玩家", "分数");FILE *pfile = fopen("data.txt", "rb");if (pfile == NULL) {return 0;}//读取文件长度,读完后把文件指针复位到开头fseek(pfile, 0, SEEK_END);int file_length = ftell(pfile);rewind(pfile);//申请一段内存空间用来放文件中的文本内容,并置零int text_length = file_length * sizeof(char) + 1;char* text_buffer = (char*)malloc(text_length);memset(text_buffer, 0, text_length);//把文件文本内容读到申请的内存空间中int read_length = fread(text_buffer, 1, file_length, pfile);if (read_length != file_length) {return 0;}SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY);//打印文件文本内容,释放申请的内存空间,关闭文件流printf(text_buffer);free(text_buffer);fclose(pfile);return 0;
}
//这是读取文件
用到了多种数据结构
- 添加音效
#include <mmsystem.h>
#pragma comment (lib, "winmm.lib")
//分别使用这两个头文件和外部库文件
PlaySound("music.wav", NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
//使用PlaySound函数播放音乐
- 使用了链表的尾插法操作
函数流程图举例
- 蛇移动函数的流程图:
- 判断蛇是否死亡的流程图:
部分结构的测试案例
左侧提示输入两个人的用户名,按空格确定。右侧在第一次未创建成绩文件是为空,不会输出乱码
两位玩家的“wasd”、“上下左右”都可以成功控制方向
在输出与蛇运动方向相反的按键时,蛇保持原来方向运动
食物被吃后自动再生成,蛇边长,并且分数增加显示在下面
蛇撞墙后死亡,显示死因
蛇撞到自己后死亡,显示死因。
在非第一次玩此游戏时,打开游戏会在右下角输出历史用户及成绩:
宏定义、头文件、全局变量及调用函数
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<time.h>
#include<conio.h>
#include <mmsystem.h>
#pragma comment (lib, "winmm.lib")#define up 'w'
#define down 's'
#define left 'a'
#define right 'd'
/*地图参数*/
#define height 26
#define wide 116void welcome(); // 开始界面
void Finish(int x); // 结束界面
void creatgraph(); // 围墙打印
//***
void gotoxy(int x, int y); // 光标跳转
void color(short x);
void gotoprintboundary(int x, int y); // 跳转打印边界
void gotoprintsnake(int x, int y); //打印蛇
void gotodelete(int x, int y); // 跳转删除蛇
void creatsnake();
//***
void creatfood(); // 食物产生
int ClickControl(); // 获取蛇1键盘信号
int Judge(); // 游戏结束判断void MovingBody(); // 蛇的移动
void Eating(); // 蛇吃到东西后的操作(伸长)
void ChangeBody(int x, int y); // 蛇的坐标变换
void ChangeBody2(int x, int y);
void record(); //文件操作记录成绩
int printrecord(); //读取文件,打印成绩//蛇结构体
typedef struct Snakes
{int x;int y;struct Snakes* next;
} snake;snake* head;
snake* head2;
// 申明并定义食物
struct Food
{int x;int y;
} food;
//用户数据
typedef struct
{char name[10];int score;
} Rank;Rank rank[2];char click = 1; // 记录敲下的键盘按键
char foreclick = 1;//键盘按键的历史记录值
char foreclick2 = 1;
char click2 = 1;
int speed; // 延迟的毫秒数
源代码下载
下载链接如下:
https://download.csdn.net/download/qq_25591221/14504516
基于C语言的双人贪吃蛇游戏程序设计相关推荐
- 【C语言项目】贪吃蛇游戏(上)
00. 目录 文章目录 00. 目录 01. 开发背景 02. 功能介绍 03. 欢迎界面设计 3.1 常用终端控制函数 3.2 设置文本颜色函数 3.3 设置光标位置函数 3.4 绘制字符画(蛇) ...
- 【去后厂村开游戏厅吧】基于pp-tinypose的体感贪吃蛇游戏
[去后厂村开游戏厅吧]基于pp-tinypose的体感贪吃蛇游戏 你是否也被腰痛所困扰!你是否也是久坐一族!你是否也是网瘾少年! 来玩体感贪吃蛇吧!只需要电脑上有摄像头就可以玩体感游戏啦~远离屏幕,扭 ...
- C 语言实现经典贪吃蛇游戏
原文链接:C语言 贪吃蛇游戏 文章目录 一.说明 二.效果 2.1 欢迎界面 2.2 游戏规则 2.3 得分排行 2.4 退出游戏 2.5 游戏界面 2.6 游戏结束 三.源码 3.1 cmd.h 3 ...
- c语言设计贪吃蛇实验报告,贪吃蛇游戏程序设计实验报告
<贪吃蛇游戏程序设计实验报告>由会员分享,可在线阅读,更多相关<贪吃蛇游戏程序设计实验报告(11页珍藏版)>请在人人文库网上搜索. 1.Windows编程大作业贪吃蛇设计与实现 ...
- 贪吃蛇c语言课程设计报告下载,c语言课程设计-贪吃蛇游戏
c语言课程设计-贪吃蛇游戏 C 语言课程设计 1 山东交通学院 C 语言课程设计 贪吃蛇游戏 院(系)别 交通与物流工程学院 班 级 物联 131 学 号 130516122 姓 名 王赛 指导教师 ...
- 好玩的c语言编程游戏,C语言写个贪吃蛇游戏
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 C语言写个贪吃蛇游戏 贪吃蛇是个非常经典的游戏,用C语言来实现也是一个好玩的事情.这个游戏我写完后放在知乎,竟然点赞的人数超级多.我觉得大家喜欢,一个方面 ...
- bat贪吃蛇游戏代码_C语言写个贪吃蛇游戏
贪吃蛇是个非常经典的游戏,用C语言来实现也是一个好玩的事情.这个游戏我写完后放在知乎,竟然点赞的人数超级多.我觉得大家喜欢,一个方面是因为写得简单,大家都能看得懂,一个可扩展性还是非常强的. 我试了说 ...
- C语言写个贪吃蛇游戏
贪吃蛇是个非常经典的游戏,用C语言来实现也是一个好玩的事情.这个游戏我写完后放在知乎,竟然点赞的人数超级多.我觉得大家喜欢,一个方面是因为写得简单,大家都能看得懂,一个可扩展性还是非常强的. 我试了说 ...
- x x x x c程序语言,C语言写个贪吃蛇游戏
贪吃蛇是个非常经典的游戏,用C语言来实现也是一个好玩的事情.这个游戏我写完后放在知乎,竟然点赞的人数超级多.我觉得大家喜欢,一个方面是因为写得简单,大家都能看得懂,一个可扩展性还是非常强的. 我试了说 ...
- 用C语言复现用贪吃蛇游戏(二)完结
书接上回,咱们复现了贪吃蛇的页面,接下来是对游戏的操作进行复现: //移动小蛇 //第一步扫描数组canvas的所有元素,找到正数元素都加1 //找到最大元素(蛇尾巴),把其变为0 //找到等于2的元 ...
最新文章
- 别再SOTA了,那叫“微调”!Science发文炮轰论文灌水
- 用python画漂亮图片-使用 Python/matplotlib 画出漂亮的论文插图
- Walking on the path of Redis --- Redis configuration
- IT 人士如何避免中年危机?
- 读书笔记 23种设计模式总结
- 未处理sqlexception中value_plsql异常处理
- Python模块学习 - 用tinify模块压缩和优化图片
- SharePoint2007安装图文详解四:安装.NET Framework 3.0和SharePoint 2007
- 面试官这Redis夺命连环12问,谁顶得住?
- cpp 编译dll_GCC编译基础
- [dlang](二)用vibe.d+thrift做网络编程
- oracle清除过期备份,rman delete obsolete删除过期备份集问题
- Surfaceview调用Camera实现拍照
- python填写问卷星_Python填写问卷星
- vue实现下拉二级联动_select下拉菜单实现二级联动效果
- Rebranding (字典序替换 思维)
- html轮播鼠标悬停效果,jQuery图片轮播加悬停效果
- java mysql 订单表设计
- 《指定一个用户只能在特定的时间里不能登陆》『罗斌原创』
- PV270R1K1T1NMMC派克柱塞泵_应用