基于C + + 的2048游戲設(shè)計_第1頁
基于C + + 的2048游戲設(shè)計_第2頁
基于C + + 的2048游戲設(shè)計_第3頁
基于C + + 的2048游戲設(shè)計_第4頁
基于C + + 的2048游戲設(shè)計_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、學(xué)號: 實習(xí)論文(本科)學(xué) 院數(shù)學(xué)與統(tǒng)計學(xué)院專 業(yè)統(tǒng)計學(xué) 年 級 2013級姓 名論文題目基于C + + 的2048游戲設(shè)計 指導(dǎo)教師 職稱講師 成 績2016年10月16日目錄摘要1關(guān)鍵詞1Abstract1Key words1前言11 實習(xí)前的準(zhǔn)備12 實習(xí)目的23 實習(xí)任務(wù)24 實習(xí)內(nèi)容24。1 2048游戲簡介24.2 2048模塊需求分析34.3 UI界面的規(guī)劃設(shè)計34。4 頭文件的需求分析44.5 隨機數(shù)的生成44.6 圖片資源的導(dǎo)入和加載54。7主體算法的分析和實現(xiàn)64。8游戲結(jié)束的判斷84。9 游戲最終運行成果95 個人總結(jié)10參考文獻(xiàn)10基于C + + 的2048游戲設(shè)計學(xué)生

2、姓名: 學(xué)號:學(xué) 院:數(shù)學(xué)與統(tǒng)計學(xué)院 專業(yè):統(tǒng)計學(xué)指導(dǎo)教師: 職稱:講師摘 要:專業(yè)實習(xí),是教學(xué)計劃中的一門重要的必修課和綜合實踐課程,是培養(yǎng)學(xué)生的專業(yè)素質(zhì)和實際能力的重要實踐環(huán)節(jié)。通過此次的C+實習(xí),掌握了程序設(shè)計的基本理論與方法,能夠運用基本代碼進(jìn)行簡單的程序設(shè)計,運行基本的游戲程序。關(guān)鍵詞:C + +;設(shè)計;程序The Game Design of 2048 Based on C +Abstract:The important required course in the teaching plan and comprehensive practice curriculum, profe

3、ssional internships, is to cultivate the students professional quality and practical ability of the important link of practice。 Through the C + + practice, we grasp the basic theory and method of program design, be able to use basic code to build simple program and run it。Key words:C + +;Design;Prog

4、ram前言這次實習(xí)是我們畢業(yè)前的一次實踐性實習(xí).為了拓展我們的知識面,增強我們對所學(xué)知識的應(yīng)用能力,增加我們在社會競爭中的經(jīng)驗,鍛煉和提高我們的綜合素質(zhì),以便在以后畢業(yè)后能真正走入社會,并且能夠在生活和工作中很好地處理各方面的問題,學(xué)校特地從北京達(dá)內(nèi)科技集團聘請了專業(yè)的C + +工程師講師來對我們進(jìn)行專業(yè)實訓(xùn),進(jìn)一步運用所學(xué)知識分析和解決實際專業(yè)問題,從而為就業(yè)打下良好的基礎(chǔ)。 1 實習(xí)前的準(zhǔn)備學(xué)校對我們的實習(xí)非常重視,本著通過實習(xí)來檢驗本專業(yè)教學(xué)中存在的問題,改進(jìn)教學(xué)工作的目的,提前就為我們聯(lián)系好了與專業(yè)相關(guān)的單位來做實習(xí)培訓(xùn)。在正式進(jìn)入機房實訓(xùn)前,講師還專門做了一場關(guān)于實習(xí)內(nèi)容的分享會,介

5、紹了實習(xí)的基本情況、基本要求、實習(xí)項目的基本情況,學(xué)習(xí)和了解實習(xí)項目的相關(guān)文件和資料,幫助我們更系統(tǒng)地了解和熟悉接下來的實習(xí)課程內(nèi)容。2 實習(xí)目的1培養(yǎng)理論聯(lián)系實際的思想作風(fēng)和工作作風(fēng);2培養(yǎng)作為計算機類工作人員的專業(yè)素質(zhì);3培養(yǎng)獨立或與團隊一起開展信息處理工作的基本業(yè)務(wù)能力。3 實習(xí)任務(wù)1通過實際操作,了解并逐步熟悉掌握C + +;2掌握常用軟件的熟練操作,為今后所期望的專業(yè)方向做準(zhǔn)備;3在教師指導(dǎo)下,利用C + + 編程,完成獨立的游戲編程任務(wù);4最后在實習(xí)指導(dǎo)老師的指導(dǎo)下,參與信息處理與計算工作,完成一篇相關(guān)的實習(xí)論文(或?qū)嵙?xí)記錄).4 實習(xí)內(nèi)容4。12048游戲簡介2048游戲是一款簡

6、單而流行的數(shù)字游戲,屬于益智游戲。操作界面上有16個格子,初始時會有兩個格子上安放了兩個數(shù)字2,每次可以選擇上下左右其中一個方向去滑動。每滑動一次,所有的數(shù)字方塊都會往滑動的方向靠攏.兩個相同數(shù)字方塊撞在一起之后合并成為他們的和。每次操作之后會在空白的方格處隨機生成一個2或者4(其他模式會有所改變),最終得到一個“2048”的方塊就是勝利了。由于規(guī)則簡單,各種版本和平臺上均有該款游戲。相信有不少人都玩過它,但是操作界面只有半個巴掌大的一個游戲,背后卻要用到類似隨機數(shù)的產(chǎn)生、大批量數(shù)據(jù)的處理、UI設(shè)計等任務(wù),真的不算是一個很簡單的工作。本次的游戲程序設(shè)計任務(wù)將運用C + + 來實現(xiàn).4.2 20

7、48模塊需求分析首先分析了這款游戲的功能需求。2048游戲一般由以下幾個模塊來構(gòu)成:1。矩陣方塊;2.控制模塊;3。計算模塊;4.輸出模塊。每個模塊來實現(xiàn)2048 游戲的各項功能:方向移動、方塊合并、記錄當(dāng)前數(shù)據(jù)和輸出計分結(jié)果、游戲勝利或失敗后執(zhí)行結(jié)束游戲操作等。4。3 UI界面的規(guī)劃設(shè)計首先進(jìn)行UI界面的規(guī)劃設(shè)計。創(chuàng)建一個800×600的背景模塊,在模塊左側(cè)這里我們需要16個方塊,按照4×4的規(guī)格排列整齊。模塊右側(cè)的空白區(qū)域需要添加功能鍵:上、下、左、右、重置、關(guān)閉.另外我們還需要再添加一個計分標(biāo)簽,用來計算并輸出游戲得分.最后按照模塊功能與人的操作習(xí)慣,將標(biāo)簽分別排列在

8、合適的位置。最終的UI界面如圖1所示:圖1UI界面(矩陣方塊)設(shè)計完成以后,接著來開始程序代碼的編寫。4。4 頭文件的需求分析首先分析需要用到的頭文件.第一步需要生成隨機數(shù),第二步要為16個矩形模塊填充隨機數(shù)所對應(yīng)的圖片,第三步為操作界面添加背景,第四步在游戲成功或失敗時即時輸出信息。分析完成以后將所有需要用到的頭文件都寫入show。cpp文件里:#include ”show.h"include "ui_show。h”include<ctime>includecstdlib>include<QPixmapinclude<QPalette#inc

9、ludeQMessageBox QDialog(parent), ui(new Ui:Show)4。5 隨機數(shù)的生成接下來我們開始寫入生成兩個隨機數(shù)和分?jǐn)?shù)從零開始的代碼,同時加入圖片加載和聲明面板對象的代碼: ui->setupUi(this); srand(time(NULL)); for(int i=0;i4;i+) for(int j=0;j<4;j+) mapij=0; sui(); sui(); fen=0; QPixmap pix(”:/image/bj。jpg”);/加載圖片 QPalette palette;/聲明畫板對象 palette.setBrush(this

10、backgroundRole(),QBrush(pix));/設(shè)置畫板樣式 this->setPalette(palette);/設(shè)置到我們的面板上void Show:sui() do int x=rand()%4; int y=rand()%4; if(mapxy=0) if(rand()20=4) mapxy=4; else mapxy=2; break; while(1);4。6 圖片資源的導(dǎo)入和加載將所有準(zhǔn)備好的圖片資源載入設(shè)計程序,以便后續(xù)的圖片加載工作。隨后我們進(jìn)入為16個矩形模塊和背景加載其各對應(yīng)隨機數(shù)圖片的設(shè)計過程,這個模塊以地址形式實現(xiàn):void Show:paintE

11、vent(QPaintEvent ) QImage img; img。load(”:/image/"+QString::number(map00)+”。png”); ui>show_1>setPixmap(QPixmap:fromImage(img)); img.load(”:/image/”+QString::number(map01)+”。png");ui-show_2-setPixmap(QPixmap::fromImage(img)); img。load(”:/image/”+QString:number(map02)+”。png"); uis

12、how_3>setPixmap(QPixmap::fromImage(img); img。load(":/image/"+QString::number(map03)+”.png”); ui-show_4setPixmap(QPixmap::fromImage(img)); img。load(”:/image/”+QString::number(map10)+”.png"); uishow_5setPixmap(QPixmap::fromImage(img); img。load(”:/image/”+QString:number(map11)+"。

13、png"); uishow_6>setPixmap(QPixmap:fromImage(img)); img。load(":/image/”+QString::number(map12)+"。png"); ui>show_7->setPixmap(QPixmap::fromImage(img); img。load(”:/image/"+QString:number(map13)+”。png”); ui>show_8setPixmap(QPixmap::fromImage(img); img。load(”:/image/”

14、+QString::number(map20)+"。png”); uishow_9setPixmap(QPixmap:fromImage(img)); img.load(”:/image/”+QString:number(map21)+".png”); uishow_10-setPixmap(QPixmap:fromImage(img)); img。load(”:/image/”+QString:number(map22)+"。png”); uishow_11setPixmap(QPixmap:fromImage(img); img。load(”:/image/”

15、+QString::number(map23)+”。png"); ui>show_12->setPixmap(QPixmap::fromImage(img); img。load(":/image/"+QString::number(map30)+”.png”); ui->show_13setPixmap(QPixmap:fromImage(img); img.load(”:/image/”+QString::number(map31)+".png”); uishow_14->setPixmap(QPixmap::fromImage

16、(img)); img。load(”:/image/"+QString:number(map32)+"。png"); ui-show_15->setPixmap(QPixmap::fromImage(img)); img。load(”:/image/”+QString:number(map33)+”.png"); ui>show_16>setPixmap(QPixmap:fromImage(img)); ui-fensetText(QString::number(fen);4.7 主體算法的分析和實現(xiàn)接下來進(jìn)入主要的算法設(shè)計步驟。在此根

17、據(jù)2048游戲算法的功能需求和功能模塊,對主要算法進(jìn)行分析并實現(xiàn).對于控制模塊,一共有上、下、左、右、重置、關(guān)閉六個控制功能鍵。對于左移功能鍵的算法,每點擊一次,所有的數(shù)字方塊都會往滑動的方向靠攏。兩個相同數(shù)字方塊撞在一起之后合并成為他們的和。每次操作之后會在空白的方格處隨機生成一個2或者4.此時分?jǐn)?shù)也在累計增加。這一部分中重置和關(guān)閉這兩個功能鍵相對與其他功能鍵獨立,而上、下、左、右四個功能鍵的算法有一定的相似之處,所以以下僅詳細(xì)展示左移功能鍵的代碼?,F(xiàn)在開始對這六個功能鍵進(jìn)行代碼編寫:void Show::on_pushButton_3_clicked() /reset for(int i=

18、0;i4;i+) for(int j=0;j4;j+) mapij=0; sui(); sui(); fen=0; update();void Show::on_clo_clicked() /clo thisclose();void Show::on_pushButton_2_clicked() /up for(int k=0;k3;k+) for(int i=1;i<4;i+) for(int j=0;j4;j+) if(mapi1j=0) mapi1j=mapij; mapij=0; else if(mapij=mapi1j) mapi1j=mapi-1j+mapij; mapij=

19、0; fen+=mapi1j; if(go()=1) sui();/產(chǎn)生隨機數(shù) update();/更新界面Show::Show() delete ui;void Show::on_pushButton_clicked() /rightvoid Show::on_pushButton_5_clicked() /downvoid Show:on_pushButton_4_clicked() /left4。8 游戲結(jié)束的判斷最后一個需解決的問題就是對于游戲是否結(jié)束的判斷,其主要體現(xiàn)在控制和計算模塊.如果游戲未能達(dá)成任務(wù)而失敗,輸出“失敗"和“游戲結(jié)束"的信息,同時只有關(guān)閉和重置

20、功能鍵可以被操作:int Show:go() for(int i=0;i<4;i+) for(int j=0;j4;j+) if(mapij=0) return 1; return 1;void Show:pan() int arr42=1,0,0,1,0,1,1,0; for(int i=0;i4;i+) for(int j=0;j4;j+) if(mapij=0) return; else for(int loop=0;loop4;loop+) int x=i+arrloop0; int y=j+arrloop1; if(x<0|x3y3|y0) continue; else if(mapxy=0) return; else if(mapij=mapxy) return; if(QMessageBox::question(this,tr("失敗”),tr(”游戲結(jié)束”);QMessageBox:YesQMessageBox::No,QMessageBox:Ok)=QMessageBox:Yes) on_pushButton_3_clicked(); else

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論