《C语言程序设计》实验大作业反思报告
PAGE 10
《C语言程序设计》实验大作业反思报告
大作业题目
类型
信息管理系统 / 游戏
班 号
学 号
所在院系
学 期
任课教师
实验类型
综合设计型
实验目的:
掌握程序设计的基本算法和简单数据结构基础,能够综合运用基本控制语句、算法和数据结构,以及自顶向下、逐步求精的模块化设计方法,能够设计具有一定规模的系统级C语言程序,提高系统编程能力;
针对计算相关的复杂工程问题,能够使用恰当的算法和数据结构,完成计算、统计、排序、检索、匹配等相关的软件系统的构造、测试与实现;
掌握常用的程序调试和测试方法。
实验要求:
采用自顶向下、逐步求精的模块化设计思想设计一个小型信息库管理系统,或者闯关式游戏程序。
要求解释说明采用了什么数据结构和算法,为什么选择这种数据结构或算法,系统实现过程中遇到了哪些问题,这些问题是如何解决的,还有什么问题尚未解决,今后打算从哪几个方面进行改进,本设计的亮点和难点在哪里,实验结果如何,有哪些收获和学习体会;
编写程序完成以下实验大作业内容并完成实验大作业反思报告。
实验内容:
设计游戏开始界面
设计蛇以及食物的数据结构
设计游戏的空间大小
用户通过按键进行蛇的上下左右移动
用户不进行按键时蛇保持前进状态
随机在空间内产生食物,并且出现食物的分数
用户可以通过食物形状来判断,并且系统判断蛇是否吃到食物
当蛇吃到食物,蛇会增长,同时分数增加
当蛇吃到自己或者撞墙,游戏结束
用户可以通过自己按键来使游戏结束
实验环境:
操作系统: Windows 10
集成开发环境:Codeblocks17.12
外部库:
输入输出设计:
游戏难度输入,char类型,因为通过单个字符来判定游戏难度方便游戏玩家,同时字符可以用getchar()读走。上下左右移动输入,char类型,原因同上。
输出游戏成绩,int型,原因每个食物的分数采取整型,简单明了。
系统设计与实现:
系统功能模块划分
游戏开始对系统进行自顶向下的模块分解,画出系统各个功能模块之间的结构图
游戏开始
游戏
游戏界面生成
生成
生成食物和蛇的形状
用户
用户操作游戏进程
结束
结束游戏
函数功能和外部接口设计
本系统总计设计了8个函数,每个函数的功能和接口设计如下表所示:
序号
函数名
函数功能
函数参数
函数返回值
1
main
主函数
无
int
2
Start
游戏初始状态
无
int
3
Circle
控制游戏范围
无
无
4
End
游戏结束
无
无
5
Food
食物创造
无
无
6
Line
将光标移动到指定位置
Int x,int y
无
7
Pause
暂停游戏
无
无
8
Map
生成地图
无
无
9
Snake
生成小蛇
无
无
10
Move
进行蛇的移动
无
int
11
Welcome
游戏欢迎界面
无
无
12
Wall
判断是否撞墙
无
int
13
Eatself
判断是否吃到自己
无
int
各个函数之间的调用关系如下所示:
进行
进行光标的移动
游戏
游戏初始化
对地图
对地图和蛇初始化
主
主函数
蛇的移动
蛇的移动
游戏进程
进行游戏输赢
进行游戏输赢判断
判断
判断是否撞墙或吃掉自己
否
是
结束
结束游戏
数据结构
用链表初始化小蛇,采用了链表的结构
算法
采用迭代的方式对小蛇进行状态描述
采用了递归算法保证食物在空间内
对游戏结束时的信息显示采取了枚举法
程序流程图
系统总体流程图如下:
游戏
游戏初始界面
初始化
初始化地图,生成地图,小蛇,成建食物
显示
显示当前分数
是否吃到食物小蛇进行
是否吃到食物
小蛇进行移动
玩家进行操作
得分增加,创建
得分增加,创建新食物
是否撞墙或
是否撞墙或吃到自己
输出分数,游戏结束
输出分数,游戏结束
否
实验过程中遇到的问题及解决方法与思路:
问题1: 蛇吃掉了食物但是分数并没有及时进行变化
原因:处理分数的函数所处于的位置导致进行有时差
解决方法:不断地改变函数位置,找到最合适的位置
问题2: 每次食物的更新总是出现到同一个地方
原因:随机函数出现了问题
解决方法: 进行随机函数的重新学习认识,然后再进行更改
问题3:小蛇撞墙游戏并未结束
原因:判断是否吃掉自己这个功能的函数出了问题
解决方法:对这个函数进行更改,并不断调试运行
测试用例和系统测试结果:
测试用例1:
初始界面:
……游戏介绍界面:
游戏进行界面
游戏结束界面
程序的全部源代码:
#include??
#include??
#include??
#include??
#define?U?1??
#define?D?2??
#define?L?3??