欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    程序设计训练大作业报告控制台游戏Word下载.docx

    • 资源ID:1456060       资源大小:71.44KB        全文页数:11页
    • 资源格式: DOCX        下载积分:1金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要1金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    程序设计训练大作业报告控制台游戏Word下载.docx

    1、一、 设计任务设计目标:完成一个控制台小游戏,其中包括游戏、排名、存档和读档等功能。选题意义:2048是最近最流行的小游戏之一,益智益趣,通过C语言控制台仿写这个游戏,可以锻炼编程框架思想以及技巧,同时将所学到的数据结构等知识灵活的运用。目标实现的系统功能:完成2048游戏主体,可查看各玩家排名情况,可查看玩家平均水平,可存档、读档。二、 程序设计与实现1. 结构框图设计的控制台游戏2048结构图如图一所示。控制台游戏2048退出查看纪录读取存档新的游戏保存成绩存档存档位一存档位二步数排名分数排名平均水平图1. 2048游戏框图2. 功能模块设计及其流程图(1) 数据描述与存储游戏模块数据采用

    2、二维数组存放,并且不断根据按键信息更新其中数据。存储时以二进制文件存储,数据文件位于工程文件夹中load1.dat以及load2.dat(此时的步数以及分数存储在load1_step.dat、load2_grade、load2_step.dat、load2_grade)。读取数据的目的是可以继续之前没有完成但存档了的游戏。分数模块数据采用结构体数组存放,用typedef定义了StepRecord和GradeRecord。StepRecord中name15代表玩家在步数排行榜中的名字,step代表玩家所坚持的步数;GradeRecord中name15代表玩家在分数排行榜中的名字,grade代表玩

    3、家取得的分数(分数计算规则见说明)。存储时以二进制文件存储,数据文件位于工程文件夹中step_rank.dat、grade_rank.dat。读取数据的目的是将新的数据加入排行榜或者读取并显示排行榜。 (2) 主要功能模块设计及其流程图函数原型1int HideCursor() 函数功能:隐藏光标,减少游戏中的闪烁。入口参数(形参):void出口参数(实参):算法描述(即实现步骤):函数原型2int gotoxy(int x,int y) 入口参数:int x,int y出口参数:实际点的坐标。算法描述:运用api函数,GetStdHandle获取标准输出设备句柄,SetConsoleCurs

    4、orPosition设置控制台光标位置并输出。函数原型3int draw_map() 绘制游戏地图以及提示信息。利用for循环以及gotoxy函数绘制边框,再通过对文件的操作读取当前最高分显示在屏幕上。函数原型4 int draw_cover(int x) 绘制游戏中出现的各级菜单(通过参数x控制具体绘制哪一种)。int x数字13同样利用for循环和gotoxy函数,绘制出菜单边框,通过参数x的值决定绘制的内容。函数原型5int quntity(int x) 获取数据文件中记录个数。1或2算法描述:利用指针定位函数fseek,文件打开时,指针位于文件首第一个字节,调用fseek函数把指针移到

    5、文件末尾,再调用ftell()返回指针当前所在位置,这个返回值是文件长度,再根据参数x的值用它除以类型StepRecord或者GradeRecord的长度,得到记录个数。函数原型6int read_record(int x,int a44,int b2) 读取游戏存档。int x,int a44,int b2x值为1或2,保存游戏数据的二维数组a44,保存步数step和分数grade的数组b2。通过参数x的控制以读的方式打开相应的数据文件,将游戏数据信息读取到数组a44中,将分数等信息读取到b2中。函数原型7int read_rank(int x,int num) 读取游戏排名int x,in

    6、t numx值为1或2,num为数据文件中记录个数通过参数x的控制以读的方式打开相应的数据文件,将排名数据存入相应数组中,再通过gotoxy函数以及for循环打印。函数原型8int save_record(int x,int a44,int step,int grade); 游戏中数据存档int x,int a44,int step,int gradex值为1或2,a44为游戏中存放数据的二维数组,step和grade分别是游戏中的步数和分数。通过参数x的控制以写的方式打开对应的存档位置,将相应数据写进数据文件。函数原型9int save_rank(StepRecord s,GradeReco

    7、rd g,int num1,int num2) 保存游戏排名StepRecord s,GradeRecord g,int num1,int num2s为上一局游戏中的步数结构体,g为上一局游戏中的分数结构体,num1和num2分别为当前数据文件中记录个数。先以读的方式打开相应的文件,将原本数据文件中的排名信息读入相应数组,由于原来的信息已经有序,只需确定新数据的插入位置即可(这里采用顺序查找,可用二分查找减少比较次数)。再以读的方式打开文件,将排序后的新序列写入文件。函数原型10int judge(int a44,int flag5) 判断游戏是否可以继续进行int a44,int flag5

    8、a44为当前游戏数据,flag5保存判断信息的数组首先将判断数组flag5置0,再遍历二维数组元素,如果有0,将flag置1;如果有2048的出现,return 2结束;如果既不为0也不为2048,则判断其上下左右是否有相邻相等的元素或者为0的元素,flag1flag4表示是否可以进行上下左右四个操作,如果满足上述条件就将相应的flag置1。最后只要flag数组中有一个元素为1,游戏便可继续,返回0;否则返回1。函数原型11int up(int a44)控制按下w(上)之后数组元素的运算int a44a44为游戏数据数组定义一个循环队列,以列为单位,将该列元素依次入队列。元素入队列时判断队列是

    9、否已满,如果满了判断队列中元素是否相同,如果相同将二者相加后存入temp4,如果不同头元素出队列,将新元素入队;如果没满,直接入队。如果以上的操作后队列不空,重负之前的判定步骤,直到元素全部出队。再按顺序将temp中的元素重新写入二维数组。函数原型12int down(int a44) 控制按下s(下)之后数组元素的运算与up函数算法相同,只是读取元素的方向相反,将temp写入二维数组的方向也相反。函数原型13int left(int a44)控制按下a(左)之后数组元素的运算定义一个循环队列,以行为单位,将该列元素依次入队列。函数原型12int down(int a44) 控制按下d(右)之

    10、后数组元素的运算与left函数算法相同,只是读取元素的方向相反,将temp写入二维数组的方向也相反。函数原型15 int create_newpoint(int a44)在随机的空白位置随机的产生2或者4首先一个while(1)循环,出口为找到值为0的位置。再利用随机数决定产生的是2还是4。函数原型16 int update_menu(int step,int grade,int a44)更新数据int step,int grade,int a44step和grade分别为当前的步数以及分数,a44为游戏数据数组遍历二维数组元素,利用gotoxy函数在正确的位置输出数字以及恰当的空格符,同时利

    11、用API函数SetConsoleTextAttribute达到不同数字不同颜色的效果。函数原型17 int initialization(int a44)完成新的游戏的初始化利用for循环,两次执行while(1),while(1)的出口为找到值为0的位置。将找到的两个位置元素置为2,完成新的游戏数据初始化。函数原型18 int game(int a44,int step,int grade)游戏主体函数,完成游戏各种操作并允许各种误操作以及提供了存档接口。int a44,int step,int gradea44为初始游戏数据数组,step以及grade为游戏开始时的步数和分数。利用一个wh

    12、ile(1)循环,每次利用judge函数检查游戏是否结束,如果结束根据返回值1或者2判断游戏获胜或失败并调用save_rank函数将信息加入排行榜;如果没有结束,嵌套一个while(1),出口为有wasd或者表示存档的i按下,每当有wasd或者i按下,便执行相应的操作(up函数等)并将w置1,w等于1的情况下将会更新屏幕上的数据并且在空白处产生新的数字(调用create_newpoint和update_menu函数)。函数原型19 int average()根据数据文件求玩家纪录中的平均水平以读的方式打开数据文件,读进相应的数组,调用quntity函数求出文件中数据的个数,计算出平均值,结果直

    13、接输出在屏幕上。下面是int game(int a44,int step,int grade)函数的流程图。开始Judge=2create_newpoint(a)Judge=1(key=119)&(flag1=1) Nup(a) YN (key=115)&(flag2=1)down(a)Yleft(a)(key=97)&(flag3=1)(key=100)&(flag4=1) Nright(a) key=105save_record Ysave_rank结束(3) 个性化设计说明 遇到的问题:控制台游戏大多依赖于system(“cls”),但清屏会闪烁影响游戏。在update_menu函数中,

    14、没有采用清屏的方式,而是用gotoxy函数直接输出数字,只修改变化的部分。 使用的数据结构:在up等函数中,运用了循环队列,通过元素依次入队判断捕捉到相应的键值后的元素位置变化,节省空间。 使用API函数。比如SetConsoleTextAttribute设置字体颜色、SetConsoleCursorPosition移动光标、GetStdHandle获取标准输出设备句柄等。三、 设计效果(原程序是彩色的,报告需要打印时打成黑白的)四、 对本课程学习体会及建议 最深的体会就是学到的知识要学会用,比如数据结构与算法中的查找算法、队列等等完全可以运用在平时的程序中提高效率;还有就是要不断的学习,这个

    15、2048我几个月前就开始写的,但之前的版本中游戏算法中一直有bug并且屏幕有闪烁界面不友好,之后为了一个一个解决这些问题通过百度学习了一点API等,一点点的完善这个程序。学习就是需要这样,在完善中进步。还有这个报告真心没办法在五页内完成,请老师谅解。五、 程序操作说明程序文件夹中已包含数据文件;游戏中wasd控制上下左右;游戏中允许误操作;游戏中请按说明进行。游戏规则:开始时棋盘内随机出现两个数字,出现的数字仅可能为2或4,玩家可以选择上下左右四个方向,若棋盘内的数字出现位移或合并,视为有效移动,玩家选择的方向上若有相同的数字则合并,每次有效移动可以同时合并,但不可以连续合并,合并所得的所有新生成数字想加即为该步的有效得分,玩家选择的方向行或列前方有空格则出现位移,每有效移动一步,棋盘的空位(无数字处)随机出现一个数字(依然可能为2或4),棋盘被数字填满,无法进行有效移动,判负,游戏结束,棋盘上出现2048,判胜,游戏结束- 9 -


    注意事项

    本文(程序设计训练大作业报告控制台游戏Word下载.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开