已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
皖西学院信息工程学院school of information and engineering, west anhui universityc+面向对象课内程序设计 实验报告 20142015学年第二学期 专 业计算机科学与技术专业班 级计科1301姓 名学 号任课教师 c+面向对象课内程序设计实 验 报 告 学号: 姓名:何晓雪 班级:计科1301 成绩:实验名称:2048小游戏实验地点:pc所使用的工具软件及环境:个人计算机,windows7,vc+6.01、 实验目的:延伸课外知识,实现简单小游戏实现,依靠函数和屏幕输出。二、实验任务: 设计一个程序,可以简单实现2048游戏的功能。用w a s d 键控制数字移动的方向,实现数字相加,并判断是否可以在本方向移动,判断无法叠加时游戏结束。三、实验说明: 2048是前段时间很火的一个小游戏,2048是比较流行的一款数字游戏。原版2048首先在github上发布,原作者是gabriele cirulli。它是基于1024和小3传奇的玩法开发而成的新型数字游戏。 本次实验是体现了,c+语言的应用,通过函数的调用实现功能。因知识不深,时间较短等原因仅仅实现其功能,并没有进行优化。4、 实验分析:(一)初始化地图窗口使用一个二维数组来初始化地图ui,数组中保存了0,2,4。初始化后进行2和4的随机赋值。方法如下:void out() /在屏幕上输出 for(int i=0;i4;i+) for(int j=0;j4;j+) coutxijt; coutendl; 随机2,4在地图中 r1=rand()%num+1; r2=rand()%8; for(int i=0;i4;i+) for(int j=0;j4;j+) if(tij=r1) if(r2=0)xij=4;break; if(r2!=0)xij=2;break; (二)编写键盘wasd上下左右对应的方法void move(int way) 根据输入的way值判断是方向当way =1 的时候,即键盘输入d的时候当way =2的时候,即键盘输入s的时候当way =3 的时候,即键盘输入a的时候当way =4的时候,即键盘输入w的时候遍历整个数组。找到地图中所有相同的数字并保存位置,再判断两个位置的x与y轴是否有某一个值相等,相等后判断其x或y轴之间是否有其他数字2或4,若无,则消除其其中一个数字,另一个与其进行相加。再重新刷新整个地图 for(int i=0;i4;i+) for(int m=0;m0;j-) if(xij=0) for(int k=j;k0;k-) xik=xik-1; xi0=0; for(int i=0;i0;j-) if(xij=xij-1) xij=xij+xij-1; score+=xij; for(int k=j-1;k0;k-) xik=xik-1; xi0=0; (三)检查是否成功,游戏失败int check() 遍历整个地图,如果地图中某个位置的值为2048则游戏胜利,输出you win! 如果地图中所有位置已经被填满切相邻之间没有相同数字,则输出game over!游戏成功或者失败,游戏都将被停止。int check() int f=1;/0通过 1结束 2胜利 for(int i=0;i16;i+) if(xi/4i%4=2048) coutyou win!endl; f=2; break; if(f=1) for(int i=0;i9;i+) if(xi/3i%3=xi/3i%3+1 | xi/3i%3=xi/3+1i%3 | xi/3i%3=0) f=0;break; if(x3i%3=x3i%3+1 | xi/33=xi/3+13 | x3i%3*xi/33*x33=0) f=0;break; if(f=1)coutgame overendl; out(); coutscore:scoreendl; if(f=1 | f=2) system(pause); return 0; (四)其他方法1)比较相加,遍历地图比较发现相同的数字切其x或者y轴之间无相隔其他数字,进行相加。int compare() int f=0; for(int i=0;i4;i+) for(int j=0;j4;j+) if(xij!=x1ij) f=1; break; return f;2)地图中位置的转换。void in() for(int i=0;i4;i+) for(int j=0;j4;j+) x1ij=xij; 五、实验结果 int r1=0,r2=0; /全局变量int x44=0;int x144=0;int score=0;void out() /在屏幕上输出 for(int i=0;i4;i+) for(int j=0;j4;j+) coutxijt; coutendl; void start() int num=0; int t44=0; srand(time(null)%100);/基本ui初始化 for(int i=0;i4;i+) for(int j=0;j4;j+) if(xij=0) num+; tij=num; /随机2和4 r1=rand()%num+1; r2=rand()%8; for(int i=0;i4;i+) for(int j=0;j4;j+) if(tij=r1) if(r2=0)xij=4;break; if(r2!=0)xij=2;break; /检查是否通过-结束-胜利int check() int f=1;/0通过 1结束 2胜利 for(int i=0;i16;i+) if(xi/4i%4=2048) coutyou win!endl; f=2; break; if(f=1) for(int i=0;i9;i+) if(xi/3i%3=xi/3i%3+1 | xi/3i%3=xi/3+1i%3 | xi/3i%3=0) f=0;break; if(x3i%3=x3i%3+1 | xi/33=xi/3+13 | x3i%3*xi/33*x33=0) f=0;break; if(f=1)coutgame overendl; out(); coutscore:scoreendl; if(f=1 | f=2) system(pause); return 0; void in() for(int i=0;i4;i+) for(int j=0;j4;j+) x1ij=xij;/比较相加int compare() int f=0; for(int i=0;i4;i+) for(int j=0;j4;j+) if(xij!=x1ij) f=1; break; return f;/根据输入的w-a-s-d进行移动void move(int way) if(way=1)/向右 for(int i=0;i4;i+) for(int m=0;m0;j-) if(xij=0) for(int k=j;k0;k-) xik=xik-1; xi0=0; for(int i=0;i0;j-) if(xij=xij-1) xij=xij+xij-1; score+=xij; for(int k=j-1;k0;k-) xik=xik-1; xi0=0; / if(way=2)/向下 for(int i=0;i4;i+) for(int m=0;m0;j-) if(xji=0) for(int k=j;k0;k-) xki=xk-1i; x0i=0; for(int i=0;i0;j-) if(xji=xj-1i) xji=xji+xj-1i; score+=xji; for(int k=j-1;k0;k-) xki=xk-1i; x0i=0; / if(way=3)/向左 for(int i=0;i4;i+) for(int m=0;m3;m+) for(int j=0;j3;j+) if(xij=0) for(int k=j;k3;k+) xik=xik+1; xi3=0; for(int i=0;i4;i+) for(int j=0;j3;j+) if(xij=xij+1) xij=xij+xij+1; score+=xij; for(int k=j+1;k3;k+) xik=xik+1; xi3=0; / if(way=4)/向上 for(int i=0;i4;i+) for(int m=0;m3;m+) for(int j=0;j3;j+) if(xji=0) for(int k=j;k3;k+) xki=xk+1i; x3i=0; for(int i=0;i4;i+) for(int j=0;j3;j+) if(xji=xj+1i) xji=xji+xj+1i; score+=xji; for(int k=j+1;kcon; con=getch(); system(cls); in(); if(con=w)move(4); if(con=a)move(3); if(con=s)move(2); if(con=d)move(1); out(); sleep(500); system(cls); if(compare()=1) start(); check(); /*x00
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年上海房屋装修工程调解合同
- 2024年度二手房出售合同中的附件:房产证复印件及交易证明
- 2024年度承包合同园林绿化工程承包合同(04版)
- 2024年度汽车销售代理权合同
- 保洁个人年终工作总结
- 2024年库房火灾保险合同
- 2024年奶制品销售协议
- 2024双方关于电商平台运营合作的合同
- 2024丙丁双方广告发布与代理合同
- 2024年建筑工程施工安全防护补充协议
- JTG∕T F30-2014 公路水泥混凝土路面施工技术细则
- 2024年高中语文学业水平过关测试四-名句名篇默写积累过关训练(全国通用)学生版
- 糖尿病性舞蹈病
- 医学类-教学查房异位妊娠(宫外孕)
- 眼视光技术职业生涯规划大赛
- 《第八课 我的身体》参考课件
- 肥料创业计划书
- 信息通信网络运行管理员(高级)理论考试题库(学员用)
- 公司卷烟物流管理规范
- 报告医疗器械不良事件
- 物联网安全分析报告
评论
0/150
提交评论