C面向对象课内程序设计基于C的2048设计报告

上传人:仙*** 文档编号:34636080 上传时间:2021-10-22 格式:DOC 页数:12 大小:86KB
返回 下载 相关 举报
C面向对象课内程序设计基于C的2048设计报告_第1页
第1页 / 共12页
C面向对象课内程序设计基于C的2048设计报告_第2页
第2页 / 共12页
C面向对象课内程序设计基于C的2048设计报告_第3页
第3页 / 共12页
点击查看更多>>
资源描述
皖西学院信息工程学院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=0;x01=0;x02=0;x03=0; x10=2;x11=2;x12=0;x13=4; x20=2;x21=0;x22=3;x23=0; x30=2;x31=0;x32=2;x33=0; /move(2); start(); out(); coutendl;*/ system(pause); return 0; 六、实验结果 初始化界面与一系列操作后的界面每按一步分数都显示在下方结果 任课教师签名:
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 销售管理


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!