C++面向对象课内程序设计-基于C++的2048设计报告.doc_第1页
C++面向对象课内程序设计-基于C++的2048设计报告.doc_第2页
C++面向对象课内程序设计-基于C++的2048设计报告.doc_第3页
C++面向对象课内程序设计-基于C++的2048设计报告.doc_第4页
C++面向对象课内程序设计-基于C++的2048设计报告.doc_第5页
已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论