C++面向對象課內(nèi)程序設計基于C++的2048設計報告_第1頁
C++面向對象課內(nèi)程序設計基于C++的2048設計報告_第2頁
C++面向對象課內(nèi)程序設計基于C++的2048設計報告_第3頁
C++面向對象課內(nèi)程序設計基于C++的2048設計報告_第4頁
C++面向對象課內(nèi)程序設計基于C++的2048設計報告_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、皖西學院信息工程學院school of information and engineering, west anhui universityc+面向對象課內(nèi)程序設計 實驗報告 20142015學年第二學期 專 業(yè)計算機科學與技術專業(yè)班 級計科1301姓 名學 號任課教師 c+面向對象課內(nèi)程序設計實 驗 報 告 學號: 姓名:何曉雪 班級:計科1301 成績:實驗名稱:2048小游戲實驗地點:pc所使用的工具軟件及環(huán)境:個人計算機,windows7,vc+6.01、 實驗目的:延伸課外知識,實現(xiàn)簡單小游戲實現(xiàn),依靠函數(shù)和屏幕輸出。二、實驗任務: 設計一個程序,可以簡單實現(xiàn)2048游戲的功能。用w

2、 a s d 鍵控制數(shù)字移動的方向,實現(xiàn)數(shù)字相加,并判斷是否可以在本方向移動,判斷無法疊加時游戲結束。三、實驗說明: 2048是前段時間很火的一個小游戲,2048是比較流行的一款數(shù)字游戲。原版2048首先在github上發(fā)布,原作者是gabriele cirulli。它是基于1024和小3傳奇的玩法開發(fā)而成的新型數(shù)字游戲。 本次實驗是體現(xiàn)了,c+語言的應用,通過函數(shù)的調(diào)用實現(xiàn)功能。因知識不深,時間較短等原因僅僅實現(xiàn)其功能,并沒有進行優(yōu)化。4、 實驗分析:(一)初始化地圖窗口使用一個二維數(shù)組來初始化地圖ui,數(shù)組中保存了0,2,4。初始化后進行2和4的隨機賦值。方法如下:void out() /

3、在屏幕上輸出 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) 根據(jù)輸入的way值判斷是方向當way =1 的時候,即鍵盤輸入d的時候當way =2的時候,即鍵盤輸入s的時候當way =3 的

4、時候,即鍵盤輸入a的時候當way =4的時候,即鍵盤輸入w的時候遍歷整個數(shù)組。找到地圖中所有相同的數(shù)字并保存位置,再判斷兩個位置的x與y軸是否有某一個值相等,相等后判斷其x或y軸之間是否有其他數(shù)字2或4,若無,則消除其其中一個數(shù)字,另一個與其進行相加。再重新刷新整個地圖 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() 遍歷整個地圖,如果地圖中某個位置的值為2048則游戲勝利,輸出you win! 如果地圖中所有位置已經(jīng)被填滿切相鄰之間沒有相同數(shù)字,則輸出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=

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ù)字,進行相加。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)地圖中位置的轉換。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);

8、/基本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

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進行移動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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論