版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、皖西學(xué)院信息工程學(xué)院school of information and engineering, west anhui universityc+面向?qū)ο笳n內(nèi)程序設(shè)計(jì) 實(shí)驗(yàn)報(bào)告 20142015學(xué)年第二學(xué)期 專 業(yè)計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)班 級(jí)計(jì)科1301姓 名學(xué) 號(hào)任課教師 c+面向?qū)ο笳n內(nèi)程序設(shè)計(jì)實(shí) 驗(yàn) 報(bào) 告 學(xué)號(hào): 姓名:何曉雪 班級(jí):計(jì)科1301 成績:實(shí)驗(yàn)名稱:2048小游戲?qū)嶒?yàn)地點(diǎn):pc所使用的工具軟件及環(huán)境:個(gè)人計(jì)算機(jī),windows7,vc+6.01、 實(shí)驗(yàn)?zāi)康模貉由煺n外知識(shí),實(shí)現(xiàn)簡單小游戲?qū)崿F(xiàn),依靠函數(shù)和屏幕輸出。二、實(shí)驗(yàn)任務(wù): 設(shè)計(jì)一個(gè)程序,可以簡單實(shí)現(xiàn)2048游戲的功能。用w
2、 a s d 鍵控制數(shù)字移動(dòng)的方向,實(shí)現(xiàn)數(shù)字相加,并判斷是否可以在本方向移動(dòng),判斷無法疊加時(shí)游戲結(jié)束。三、實(shí)驗(yàn)說明: 2048是前段時(shí)間很火的一個(gè)小游戲,2048是比較流行的一款數(shù)字游戲。原版2048首先在github上發(fā)布,原作者是gabriele cirulli。它是基于1024和小3傳奇的玩法開發(fā)而成的新型數(shù)字游戲。 本次實(shí)驗(yàn)是體現(xiàn)了,c+語言的應(yīng)用,通過函數(shù)的調(diào)用實(shí)現(xiàn)功能。因知識(shí)不深,時(shí)間較短等原因僅僅實(shí)現(xiàn)其功能,并沒有進(jìn)行優(yōu)化。4、 實(shí)驗(yàn)分析:(一)初始化地圖窗口使用一個(gè)二維數(shù)組來初始化地圖ui,數(shù)組中保存了0,2,4。初始化后進(jìn)行2和4的隨機(jī)賦值。方法如下:void out() /
3、在屏幕上輸出 for(int i=0;i4;i+) for(int j=0;j4;j+) coutxijt; coutendl; 隨機(jī)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上下左右對(duì)應(yīng)的方法void move(int way) 根據(jù)輸入的way值判斷是方向當(dāng)way =1 的時(shí)候,即鍵盤輸入d的時(shí)候當(dāng)way =2的時(shí)候,即鍵盤輸入s的時(shí)候當(dāng)way =3 的
4、時(shí)候,即鍵盤輸入a的時(shí)候當(dāng)way =4的時(shí)候,即鍵盤輸入w的時(shí)候遍歷整個(gè)數(shù)組。找到地圖中所有相同的數(shù)字并保存位置,再判斷兩個(gè)位置的x與y軸是否有某一個(gè)值相等,相等后判斷其x或y軸之間是否有其他數(shù)字2或4,若無,則消除其其中一個(gè)數(shù)字,另一個(gè)與其進(jìn)行相加。再重新刷新整個(gè)地圖 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() 遍歷整個(gè)地圖,如果地圖中某個(gè)位置的值為2048則游戲勝利,輸出you win! 如果地圖中所有位置已經(jīng)被填滿切相鄰之間沒有相同數(shù)字,則輸出game over!游戲成功或者失敗,游戲都將被停止。int check() int f=1;/0通過 1結(jié)束 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)比較相加,遍歷地圖比較發(fā)現(xiàn)相同的數(shù)字切其x或者y軸之間無相隔其他數(shù)字,進(jìn)行相加。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)地圖中位置的轉(zhuǎn)換。void in() for(int i=0;i4;i+) for(int j=0;j4;j+) x1ij=xij; 五、實(shí)驗(yàn)結(jié)果 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; /隨機(jī)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; /檢查是否通過-結(jié)束-勝利int check() int f=1;/0通過 1結(jié)束 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;/根據(jù)輸入的w-a-s-d進(jìn)行移動(dòng)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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度生鮮配送與冷鏈倉儲(chǔ)管理承包合同3篇
- 2025年度體育場館場地租賃及賽事運(yùn)營管理服務(wù)協(xié)議2篇
- 2024皮鞋品牌代理權(quán)購銷合同范本3篇
- 二零二五年度施工安全風(fēng)險(xiǎn)評(píng)估與管理合同3篇
- 2025年度高科技公司股東退股協(xié)議書3篇
- 2025年度房地產(chǎn)項(xiàng)目成本控制與合同管理協(xié)議3篇
- 二零二五年貓咪寵物保險(xiǎn)代理合同2篇
- 2025年跨境電商項(xiàng)目監(jiān)控與管理服務(wù)合同2篇
- 二零二五年度環(huán)保產(chǎn)業(yè)投資合作合同6篇
- 二零二四年醫(yī)療器械研發(fā)合同
- 小學(xué)語文閱讀校本課程設(shè)計(jì)方案
- 山東省濟(jì)南市2024-2025學(xué)年高一英語上學(xué)期學(xué)情檢測期末試題
- 車險(xiǎn)理賠全解析
- Unit10l'mten!(練)新概念英語青少版StarterA
- 產(chǎn)業(yè)園區(qū)開發(fā)全流程實(shí)操解析
- NBT 47013.4-2015 承壓設(shè)備無損檢測 第4部分:磁粉檢測
- 羽毛球比賽對(duì)陣表模板
- 2024年上海市中考數(shù)學(xué)真題試卷及答案解析
- 2024年全國卷1高考理綜試題及答案
- 初中語文現(xiàn)代文閱讀訓(xùn)練及答案二十篇
- 農(nóng)村開荒土地承包權(quán)轉(zhuǎn)讓協(xié)議書
評(píng)論
0/150
提交評(píng)論