




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、學(xué)號(hào): 實(shí)習(xí)論文(本科)學(xué) 院數(shù)學(xué)與統(tǒng)計(jì)學(xué)院專 業(yè)統(tǒng)計(jì)學(xué) 年 級(jí) 2013級(jí)姓 名論文題目基于C + + 的2048游戲設(shè)計(jì) 指導(dǎo)教師 職稱講師 成 績(jī)2016年10月16日目錄摘要1關(guān)鍵詞1Abstract1Key words1前言11 實(shí)習(xí)前的準(zhǔn)備12 實(shí)習(xí)目的23 實(shí)習(xí)任務(wù)24 實(shí)習(xí)內(nèi)容24。1 2048游戲簡(jiǎn)介24.2 2048模塊需求分析34.3 UI界面的規(guī)劃設(shè)計(jì)34。4 頭文件的需求分析44.5 隨機(jī)數(shù)的生成44.6 圖片資源的導(dǎo)入和加載54。7主體算法的分析和實(shí)現(xiàn)64。8游戲結(jié)束的判斷84。9 游戲最終運(yùn)行成果95 個(gè)人總結(jié)10參考文獻(xiàn)10基于C + + 的2048游戲設(shè)計(jì)學(xué)生
2、姓名: 學(xué)號(hào):學(xué) 院:數(shù)學(xué)與統(tǒng)計(jì)學(xué)院 專業(yè):統(tǒng)計(jì)學(xué)指導(dǎo)教師: 職稱:講師摘 要:專業(yè)實(shí)習(xí),是教學(xué)計(jì)劃中的一門重要的必修課和綜合實(shí)踐課程,是培養(yǎng)學(xué)生的專業(yè)素質(zhì)和實(shí)際能力的重要實(shí)踐環(huán)節(jié)。通過(guò)此次的C+實(shí)習(xí),掌握了程序設(shè)計(jì)的基本理論與方法,能夠運(yùn)用基本代碼進(jìn)行簡(jiǎn)單的程序設(shè)計(jì),運(yùn)行基本的游戲程序。關(guān)鍵詞:C + +;設(shè)計(jì);程序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前言這次實(shí)習(xí)是我們畢業(yè)前的一次實(shí)踐性實(shí)習(xí).為了拓展我們的知識(shí)面,增強(qiáng)我們對(duì)所學(xué)知識(shí)的應(yīng)用能力,增加我們?cè)谏鐣?huì)競(jìng)爭(zhēng)中的經(jīng)驗(yàn),鍛煉和提高我們的綜合素質(zhì),以便在以后畢業(yè)后能真正走入社會(huì),并且能夠在生活和工作中很好地處理各方面的問(wèn)題,學(xué)校特地從北京達(dá)內(nèi)科技集團(tuán)聘請(qǐng)了專業(yè)的C + +工程師講師來(lái)對(duì)我們進(jìn)行專業(yè)實(shí)訓(xùn),進(jìn)一步運(yùn)用所學(xué)知識(shí)分析和解決實(shí)際專業(yè)問(wèn)題,從而為就業(yè)打下良好的基礎(chǔ)。 1 實(shí)習(xí)前的準(zhǔn)備學(xué)校對(duì)我們的實(shí)習(xí)非常重視,本著通過(guò)實(shí)習(xí)來(lái)檢驗(yàn)本專業(yè)教學(xué)中存在的問(wèn)題,改進(jìn)教學(xué)工作的目的,提前就為我們聯(lián)系好了與專業(yè)相關(guān)的單位來(lái)做實(shí)習(xí)培訓(xùn)。在正式進(jìn)入機(jī)房實(shí)訓(xùn)前,講師還專門做了一場(chǎng)關(guān)于實(shí)習(xí)內(nèi)容的分享會(huì),介
5、紹了實(shí)習(xí)的基本情況、基本要求、實(shí)習(xí)項(xiàng)目的基本情況,學(xué)習(xí)和了解實(shí)習(xí)項(xiàng)目的相關(guān)文件和資料,幫助我們更系統(tǒng)地了解和熟悉接下來(lái)的實(shí)習(xí)課程內(nèi)容。2 實(shí)習(xí)目的1培養(yǎng)理論聯(lián)系實(shí)際的思想作風(fēng)和工作作風(fēng);2培養(yǎng)作為計(jì)算機(jī)類工作人員的專業(yè)素質(zhì);3培養(yǎng)獨(dú)立或與團(tuán)隊(duì)一起開展信息處理工作的基本業(yè)務(wù)能力。3 實(shí)習(xí)任務(wù)1通過(guò)實(shí)際操作,了解并逐步熟悉掌握C + +;2掌握常用軟件的熟練操作,為今后所期望的專業(yè)方向做準(zhǔn)備;3在教師指導(dǎo)下,利用C + + 編程,完成獨(dú)立的游戲編程任務(wù);4最后在實(shí)習(xí)指導(dǎo)老師的指導(dǎo)下,參與信息處理與計(jì)算工作,完成一篇相關(guān)的實(shí)習(xí)論文(或?qū)嵙?xí)記錄).4 實(shí)習(xí)內(nèi)容4。12048游戲簡(jiǎn)介2048游戲是一款簡(jiǎn)
6、單而流行的數(shù)字游戲,屬于益智游戲。操作界面上有16個(gè)格子,初始時(shí)會(huì)有兩個(gè)格子上安放了兩個(gè)數(shù)字2,每次可以選擇上下左右其中一個(gè)方向去滑動(dòng)。每滑動(dòng)一次,所有的數(shù)字方塊都會(huì)往滑動(dòng)的方向靠攏.兩個(gè)相同數(shù)字方塊撞在一起之后合并成為他們的和。每次操作之后會(huì)在空白的方格處隨機(jī)生成一個(gè)2或者4(其他模式會(huì)有所改變),最終得到一個(gè)“2048”的方塊就是勝利了。由于規(guī)則簡(jiǎn)單,各種版本和平臺(tái)上均有該款游戲。相信有不少人都玩過(guò)它,但是操作界面只有半個(gè)巴掌大的一個(gè)游戲,背后卻要用到類似隨機(jī)數(shù)的產(chǎn)生、大批量數(shù)據(jù)的處理、UI設(shè)計(jì)等任務(wù),真的不算是一個(gè)很簡(jiǎn)單的工作。本次的游戲程序設(shè)計(jì)任務(wù)將運(yùn)用C + + 來(lái)實(shí)現(xiàn).4.2 20
7、48模塊需求分析首先分析了這款游戲的功能需求。2048游戲一般由以下幾個(gè)模塊來(lái)構(gòu)成:1。矩陣方塊;2.控制模塊;3。計(jì)算模塊;4.輸出模塊。每個(gè)模塊來(lái)實(shí)現(xiàn)2048 游戲的各項(xiàng)功能:方向移動(dòng)、方塊合并、記錄當(dāng)前數(shù)據(jù)和輸出計(jì)分結(jié)果、游戲勝利或失敗后執(zhí)行結(jié)束游戲操作等。4。3 UI界面的規(guī)劃設(shè)計(jì)首先進(jìn)行UI界面的規(guī)劃設(shè)計(jì)。創(chuàng)建一個(gè)800×600的背景模塊,在模塊左側(cè)這里我們需要16個(gè)方塊,按照4×4的規(guī)格排列整齊。模塊右側(cè)的空白區(qū)域需要添加功能鍵:上、下、左、右、重置、關(guān)閉.另外我們還需要再添加一個(gè)計(jì)分標(biāo)簽,用來(lái)計(jì)算并輸出游戲得分.最后按照模塊功能與人的操作習(xí)慣,將標(biāo)簽分別排列在
8、合適的位置。最終的UI界面如圖1所示:圖1UI界面(矩陣方塊)設(shè)計(jì)完成以后,接著來(lái)開始程序代碼的編寫。4。4 頭文件的需求分析首先分析需要用到的頭文件.第一步需要生成隨機(jī)數(shù),第二步要為16個(gè)矩形模塊填充隨機(jī)數(shù)所對(duì)應(yīng)的圖片,第三步為操作界面添加背景,第四步在游戲成功或失敗時(shí)即時(shí)輸出信息。分析完成以后將所有需要用到的頭文件都寫入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 隨機(jī)數(shù)的生成接下來(lái)我們開始寫入生成兩個(gè)隨機(jī)數(shù)和分?jǐn)?shù)從零開始的代碼,同時(shí)加入圖片加載和聲明面板對(duì)象的代碼: 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;/聲明畫板對(duì)象 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è)計(jì)程序,以便后續(xù)的圖片加載工作。隨后我們進(jìn)入為16個(gè)矩形模塊和背景加載其各對(duì)應(yīng)隨機(jī)數(shù)圖片的設(shè)計(jì)過(guò)程,這個(gè)模塊以地址形式實(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 主體算法的分析和實(shí)現(xiàn)接下來(lái)進(jìn)入主要的算法設(shè)計(jì)步驟。在此根
17、據(jù)2048游戲算法的功能需求和功能模塊,對(duì)主要算法進(jìn)行分析并實(shí)現(xiàn).對(duì)于控制模塊,一共有上、下、左、右、重置、關(guān)閉六個(gè)控制功能鍵。對(duì)于左移功能鍵的算法,每點(diǎn)擊一次,所有的數(shù)字方塊都會(huì)往滑動(dòng)的方向靠攏。兩個(gè)相同數(shù)字方塊撞在一起之后合并成為他們的和。每次操作之后會(huì)在空白的方格處隨機(jī)生成一個(gè)2或者4.此時(shí)分?jǐn)?shù)也在累計(jì)增加。這一部分中重置和關(guān)閉這兩個(gè)功能鍵相對(duì)與其他功能鍵獨(dú)立,而上、下、左、右四個(gè)功能鍵的算法有一定的相似之處,所以以下僅詳細(xì)展示左移功能鍵的代碼?,F(xiàn)在開始對(duì)這六個(gè)功能鍵進(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)生隨機(jī)數(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é)束的判斷最后一個(gè)需解決的問(wèn)題就是對(duì)于游戲是否結(jié)束的判斷,其主要體現(xiàn)在控制和計(jì)算模塊.如果游戲未能達(dá)成任務(wù)而失敗,輸出“失敗"和“游戲結(jié)束"的信息,同時(shí)只有關(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能家居安全系統(tǒng)安裝協(xié)議
- 的股權(quán)轉(zhuǎn)讓合同書
- 節(jié)能環(huán)保設(shè)施采購(gòu)與運(yùn)營(yíng)協(xié)議
- 農(nóng)民合作種養(yǎng)殖技術(shù)支持合同
- 詳細(xì)收入及年終獎(jiǎng)金津補(bǔ)貼證明(7篇)
- 行政管理市政學(xué)知識(shí)更新試題及答案
- 在建筑工程中提升競(jìng)爭(zhēng)力試題及答案
- 行政管理的組織變革試題及答案
- 現(xiàn)代管理中的實(shí)施策略與執(zhí)行力考查試題及答案
- 科技助力市政管理試題及答案
- 瓦斯抽放泵培訓(xùn)PPT課件
- GA 1517-2018 金銀珠寶營(yíng)業(yè)場(chǎng)所安全防范要求
- 施工設(shè)計(jì)方案客土噴播
- 疑似預(yù)防接種異常反應(yīng)(AEFI)監(jiān)測(cè)與處理PPT課件
- 德森印刷機(jī)常見問(wèn)題點(diǎn)維修參考手冊(cè)
- 輸電線反時(shí)限零序電流保護(hù)_圖文
- 強(qiáng)對(duì)陣圖模板(共1頁(yè))
- 最新三級(jí)安全教育考試卷(防水工)帶答案
- 民營(yíng)醫(yī)院市場(chǎng)部業(yè)務(wù)員業(yè)績(jī)提成制度
- 應(yīng)用一種新的TLP測(cè)試方法解決ESD所引起的系統(tǒng)軟失效問(wèn)題
- 初級(jí)煙葉分級(jí)工理論題庫(kù)
評(píng)論
0/150
提交評(píng)論