




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、c+實現(xiàn)2048游戲示例2048是比較流行的一款數(shù)字游戲。原版2048首先在github ±發(fā)布,原作者是gabriele cirullio它是基于1024和小3傳奇的玩法開發(fā)而成的新型數(shù)字游戲。這游戲前一段時問傳的很火,前幾天早上實在太無聊了,就決定把這游戲自己也寫一個。前后寫了一個多小時吧,大概300行左右,沒什么復雜算法,不過實在懶得去優(yōu)化了,但估 計優(yōu)化完能控制在200行以下,有興趣的朋友可以自己優(yōu)化一下。說明:我一開始玩的是ios app版的trhees,后來才玩的2048,兩者在滑動的規(guī)則上有些 區(qū)別,本人這個版本是這兩者的結(jié)合。最后,祝試玩愉快!界面丑陋,求不笑。以下是
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 ); 隨機數(shù)種子 不能用在這里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() 棋盤最大數(shù)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() /上移后添加新數(shù)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) 下移后添加新數(shù)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() 左移后添加新數(shù)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) /右移后添加新數(shù) 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()/主函數(shù)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)«"你的最后成績?yōu)椋骸?«panemax()«
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 組織溝通與信息流動試題及答案
- 2024年初中語文雜文解析試題及答案
- 2025-2030年運動器材墊項目商業(yè)計劃書
- 2025-2030年豨薟風濕片項目商業(yè)計劃書
- 2025-2030年視頻一體化機房綜合監(jiān)控系統(tǒng)項目商業(yè)計劃書
- 2025-2030年蛋杯項目商業(yè)計劃書
- 兒童心理健康評估試題及答案
- 現(xiàn)代文閱讀中的邏輯推理技巧試題及答案
- 文學078素養(yǎng)與語文實踐能力考查題目試題及答案
- 中醫(yī)康復理療師考前復習試題及答案
- 2025山西地質(zhì)集團招聘37人筆試參考題庫附帶答案詳解
- 2024年新疆中考數(shù)學試卷(含答案解析)
- 電位計算精品課件
- 35kV輸電線路工程旋挖鉆孔專項施工方案
- 人教版音樂八年紀下冊《京劇《鍘美案》選段》課件1
- 高考英語專題復習作文第1期:倡議書課件
- 中子源介紹課件
- 葡萄溝》作業(yè)
- 參考文獻的標注規(guī)范
- 武松打虎劇本
- 精品資料(2021-2022年收藏)遼寧省建筑材料檢測費標準
評論
0/150
提交評論