版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、c+实现2048游戏示例2048是比较流行的一款数字游戏。原版2048首先在github ±发布,原作者是gabriele cirullio它是基于1024和小3传奇的玩法开发而成的新型数字游戏。这游戏前一段时问传的很火,前几天早上实在太无聊了,就决定把这游戏自己也写一个。前后写了一个多小时吧,大概300行左右,没什么复杂算法,不过实在懒得去优化了,但估 计优化完能控制在200行以下,有兴趣的朋友可以自己优化一下。说明:我一开始玩的是ios app版的trhees,后来才玩的2048,两者在滑动的规则上有些 区别,本人这个版本是这两者的结合。最后,祝试玩愉快!界面丑陋,求不笑。以下是
2、源代码:复制代码代码如下:/*by reason*/#in clude<iostream>#inelude <iomanip>#in clude<math.h>#in clude<stdlib.h>#incl udevtime.h>#include <conio.h> 为了读取方向键#in clude<windows.h>using namespace std;/srand( (unsigned)time( null ); 随机数种子 不能用在这里int pane44;/棋盘int n=l; hl 的 n 次方voi
3、d showpanef) /显示棋盘cout«setw(46)«hx2048 by reason,«endl;cout«setw(50)«h |"«endl;for(int i=0;i<=3;i+)cout«setw(24)«""for(int j=0;j<=3;j+)/setc on soletextattributefgetstdha ndle(std_output_handle),foreground_red);if(paneij=o)cout«setw(2
4、)«" | "«setw(4)«"elsecout«setw(2)«" | "«setw(4)«paneij;if(j=3)cout«setw(2)«" |"«endl; cout«setw(50)«n |”endl;void newgame() 开始游戏n=l;for(int i=o;i<=3;i+) 初始化棋盘for(int j=o;j<=3;j+)paneij=o;srandf (unsi
5、gned)time( null );int m=rand()%4;int n二rand()%4;int p=rand()%4;int q=rand()%4;pan em n二 pa nepq=2;showpane();int if2n(int x) 判断x是否是2的n次方int flag=o;for(int n二 1;*=ll;n+)if(x=pow(2,n)flag"if(n>n)n=n;return flag;return flag;int flag=o;for(i nt j=0;jv=3;j+)for(int i=0;i<3;i+)if(if2n(paneij+pa
6、nei+lj)=l) paneij=paneij+panei+lj; panei+l0=o;flag=l;return flag;int downmove() 下移int flag=o;for(in t j=0;j<=3;j+)for(int i=3;i>0;i-) if(if2n(paneij+panei-lj)=l)paneij=paneij+panei-lj; panei-lj=o;flag=l;return flag;int leftmove() 左移int flag=o;for(int i=0;i<=3;i+)for(int j=o;j<3;j+) if(if
7、2n(paneij+paneij+l)=l) paneij=paneij+paneio+l; paneij+l=o;flag=l;return flag;int flag=o;for(int i=0;i<=3;i+)for(int j=3;j>0;j)if(if2n(panei01+paneij-l)=l)paneij=paneij+paneij-l;paneij-l=o;flag=l;return flag;int testupf) 能否上移测试int flag=o;for(in t j=0;j<=3;j+)for(int i=o;i<3;i+)if(if2n(pan
8、eij+panei+lj)=l)&&panei+lul) flag=l;return flag;int testdown() /测试能否下移int flag=o;for(int j=o;j<=3;j+)forfint i=3;i>0;i-)if(if2n(paneij+panei-lj)=l)&&panei-lj) flag=l;return flag;int testleftf) 测试能否左移int flag=o;for(int i=0;i<=3;i+)for(int j=o;j<3;j+)if(if2n(paneij+paneij+l
9、)=l)&&paneij+l)flag=l;return flag;int testright() 测试能否右移int flag=o;for(int i=o;i<=3;i+)for(int j=3;j>o;j-)if(if2n(paneij+paneij-l)=l)&&paneij-l) flag=l;return flag;int panemax() 棋盘最大数int max=paneoo;for(int i=0;i<=3;i+)for(int j=o;j<=3;j+)if(paneij>max)max=pareturn max;
10、int ifwin() 判断是否胜利int flag=o;if(panemax()=2048)cout«setw(45)«"you win!"«endl;flag=l;return flag;int flag=o;if(testup()+ testdow n() + testleft() + testrightf) = 0) cout«setw(43)«hgame over!h«endl; flag=l;return flag;void addnewnumberup() /上移后添加新数srand( (unsign
11、ed)time( null );int n;if (n=l)n=l;elsen=(rand()%(n)+l);int newnumber=pow(2,n);for(int i=3;i>=0;i-)for(i nt j=0;jv=3;j+)if (paneij=o)pan eij=n ewnu mber;return;void addnewnumberdownf) 下移后添加新数srand( (unsigned)time( null );int n;if (n=l)n=l;elsen=(rand()%(n)+l);int newnumber=pow(2,n);for(int i=0;i&l
12、t;=3;i+)for(i nt j=o;jv 二 3;j+)if(paneij=o)pan eij二newnu mber;return;void addnewnumberleft() 左移后添加新数srand( (unsigned)time( null );int n;if (n=l)n 二 1;elsen=(rand()%(n)+l);int newnumber=pow(2,n);for(in t j=3;j>=0;j-)for(int i=0;i<=3;i+)if (paneij=o)pan eij=newnumber;return;void addnewnumberrigh
13、tf) /右移后添加新数 srand( (unsigned)time( null );int n;if (n=l)n=l;elsen=(rand()%(n)+l);int newnumber=pow(2,n);for(i nt j=o;jv=3;j+)for(int i=0;i<=3;i+)if(paneij=o)paneij=new nu mber;return;int getdirection() 读取方向int ret = 0;doint ch = _getch();if(isascii(ch) con tinue;ch = _getch(); switch(ch)case 72:
14、ret = 2; / topbreak;case 75:ret = 1; / left break;case 77:ret = 3; / right break;case 80:ret = 4; / down break;default:break; while (ret = 0);return ret;int main()/主函数systemf'color f9");int makesure=l; while(makesure)system("cls");n ewgame();while(ifwin()+ifgameover()=0) int c=get
15、direction();switch(c)case 2:if(testup()=l)upmove();addnew nu mberup();systemc'cls");showpa ne();break;case 4:if(testdown()=l)dow nmove();add newnumberdow n(); system("cls");showpane();break;case 1:if(testleft()=l)leftmovef);addnewnumberleft();systemf'cls");showpane();break;case 3:if(testright()=l)rightmove();addnew nu mberright();systemf'cls");showpa ne();break;default:break;h«endl;cout«setw(43)«"你的最后成绩为:” «panemax()«
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 临沂职业学院《自动化学科前沿讲座》2023-2024学年第一学期期末试卷
- 三年级三位数乘两位数乘法口算练习题
- 江西应用工程职业学院《园艺疗法》2023-2024学年第一学期期末试卷
- 华南农业大学《热工学》2023-2024学年第一学期期末试卷
- 【物理】力 同步练习+2024-2025学年人教版物理八年级下册
- 湖北开放职业学院《物流成本与绩效管理》2023-2024学年第一学期期末试卷
- 河南应用技术职业学院《智能机床与编程》2023-2024学年第一学期期末试卷
- 株洲师范高等专科学校《体育休闲项目的策划与管理》2023-2024学年第一学期期末试卷
- 驻马店幼儿师范高等专科学校《网络新闻编辑与评论》2023-2024学年第一学期期末试卷
- 浙江工贸职业技术学院《深度学习框架》2023-2024学年第一学期期末试卷
- 2025年工程合作协议书
- 2025年山东省东营市东营区融媒体中心招聘全媒体采编播专业技术人员10人历年高频重点提升(共500题)附带答案详解
- 2025年宜宾人才限公司招聘高频重点提升(共500题)附带答案详解
- KAT1-2023井下探放水技术规范
- 驾驶证学法减分(学法免分)题库及答案200题完整版
- 2024年四川省泸州市中考英语试题含解析
- 2025届河南省九师联盟商开大联考高一数学第一学期期末学业质量监测模拟试题含解析
- 抚养权起诉状(31篇)
- 2024年“一岗双责”制度(五篇)
- 美容美发店突发停电应急预案
- 弹性力学材料模型:分层材料的热弹性行为教程
评论
0/150
提交评论