版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、皖西学院信息工程学院school of information and engineering, west anhui universityc+面向对象课内程序设计 实验报告 20142015学年第二学期 专 业计算机科学与技术专业班 级计科1301姓 名学 号任课教师 c+面向对象课内程序设计实 验 报 告 学号: 姓名:何晓雪 班级:计科1301 成绩:实验名称:2048小游戏实验地点:pc所使用的工具软件及环境:个人计算机,windows7,vc+6.01、 实验目的:延伸课外知识,实现简单小游戏实现,依靠函数和屏幕输出。二、实验任务: 设计一个程序,可以简单实现2048游戏的功能。用w
2、 a s d 键控制数字移动的方向,实现数字相加,并判断是否可以在本方向移动,判断无法叠加时游戏结束。三、实验说明: 2048是前段时间很火的一个小游戏,2048是比较流行的一款数字游戏。原版2048首先在github上发布,原作者是gabriele cirulli。它是基于1024和小3传奇的玩法开发而成的新型数字游戏。 本次实验是体现了,c+语言的应用,通过函数的调用实现功能。因知识不深,时间较短等原因仅仅实现其功能,并没有进行优化。4、 实验分析:(一)初始化地图窗口使用一个二维数组来初始化地图ui,数组中保存了0,2,4。初始化后进行2和4的随机赋值。方法如下:void out() /
3、在屏幕上输出 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 的
4、时候,即键盘输入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-
5、) 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=
6、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+
7、) 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);
8、/基本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
9、; 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
10、 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
11、-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;
12、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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2022年山西大学附中高考语文三模试卷
- 2024-2025学年人教版八年级数学上册期末提高试卷(含简单答案)
- 学生会宣传部期末工作总结(30篇)
- 林草生态综合监测技术合同承诺书
- 联合国国际销售合同公约文本
- 离婚协议存款归女方所有的离婚协议范文
- 合同税率变更说明范文
- 合同实务指南
- 激励高三知识课件
- 《捣固研讨会演示》课件
- 2024年广东省广州市中考英语试卷附答案
- 血液透析患者健康宣教
- 2024新教材高中政治 第二单元 经济发展与社会进步 第四课 我国的个人收入分配与社会保障 4.1《我国的个人收入分配》教案 部编版必修2
- 新苏教版一年级上册科学4.2《人工世界》课件
- 《汽车故障诊断与排除》教案-项目3-汽车底盘故障诊断与排除
- 《汽车发动机与底盘拆装》中职全套教学课件
- 人教版五年级上册数学《解决问题(不规则图形的面积)》说课稿
- DL-T 1071-2023 电力大件运输规范
- 冲刺2022年中考英语必背高频词汇360°无死角精练-中考英语备考资料重点知识点归纳
- 性病艾滋病丙肝防治工作总结
- 代理记账公司保密协议
评论
0/150
提交评论