人工智能課程設計報告-俄羅斯方塊_第1頁
人工智能課程設計報告-俄羅斯方塊_第2頁
人工智能課程設計報告-俄羅斯方塊_第3頁
人工智能課程設計報告-俄羅斯方塊_第4頁
人工智能課程設計報告-俄羅斯方塊_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1.1 項目名稱俄羅斯方塊游戲1.2 設計平臺Visual C+ 6.0, 它是以C+語言作為其基本語言的一種可視化編程工具。1.3程序設計思想從游戲的基本玩法出發(fā),主要就是俄羅斯方塊的形狀和旋轉(zhuǎn),我們在設計中在一個圖片框中構(gòu)造了一個4*4的網(wǎng)狀小塊,由這些小塊組合成新的形狀,每四個小塊連接在一起就可以構(gòu)造出一種造型,因此我們總共設計了7中造型,每種造型又可以通過旋轉(zhuǎn)而變化出2到4種形狀,利用隨機函數(shù)在一個預覽窗體中提前展示形狀供用戶參考,然后將展示的形狀復制到游戲窗體中進行擺放,在游戲窗體中用戶就可以使用鍵盤的方向鍵來控制方塊的運動,然后利用遞歸語句對每一行進行判斷,如果有某行的方塊是滿的,

2、則消除這行的方塊,并且使上面的方塊自由下落,其中,方塊向下的速度是有時鐘控件控制的,在游戲中,用戶也可以使用向下鍵加快下落速度,定義一個變量,對消除的函數(shù)進行記錄,最后就可以得出用戶的分數(shù),用if 語句對分數(shù)判斷,達到一定的積分就可以升級到下一個檔次。俄羅斯方塊游戲設計的主要步驟為以下6個方面:(1)游戲界面的設計。(2)俄羅斯方塊的造型。(3)俄羅斯方塊的旋轉(zhuǎn)。(4)俄羅斯方塊的運動情況(包括向左,向右和向下)。(5)俄羅斯方塊的自動消行功能。當不同的方塊填滿一行時可以消行,剩余方塊向下移動并統(tǒng)計分數(shù)。(6)游戲得分的計算。當達到一定的分數(shù)時過關(guān)。設置六關(guān),每關(guān)方塊下落的速度不同。1.4主要

3、實現(xiàn)的功能我們開發(fā)的俄羅斯方塊游戲,主要實現(xiàn)了以下幾種功能:1.可以靈活控制方塊在圖形框中運動。2.游戲過程中方塊可以自由旋轉(zhuǎn)。3.當某一行的方塊排列滿時,將自動將這一行方塊消除,然后將上面所有方塊向下移動,可以支持連續(xù)消行。4.游戲前可以選擇游戲的速度和游戲的等級,游戲速度既為方塊下落速度,游戲等級為初始游戲時在基層隨機生成一定行數(shù)的無規(guī)律方塊,對于游戲高手來說,無疑不是一個新的挑戰(zhàn)。2.1 需求分析隨著信息技術(shù)的迅速發(fā)展,給人們帶來了各種各樣的信息和更多更新的娛樂。其中游戲又最為常見和普遍。所以我們實現(xiàn)了一個俄羅斯方塊的小游戲,來對所學到的知識進行實踐。2.2 關(guān)于游戲界面我們制作了一個良

4、好的用戶界面,有關(guān)數(shù)顯示和分數(shù)顯示。讓方塊在一定的區(qū)域內(nèi)運動和變形,該區(qū)域用一種顏色表明,既用一種顏色作為背景,最好設為黑色。還需用另一種顏色把黑色圍起來,寬度適中,要實現(xiàn)美感。方塊下落時,可通過鍵盤方向鍵(上、下、左、右鍵)對該方塊進行向上(變形),向下(加速)、向左、向右移動。2.3 游戲的數(shù)據(jù)結(jié)構(gòu) 相信大家都玩過俄羅斯方塊,對這個游戲的玩法和方塊形狀都比較熟悉。我們這個游戲只選擇了最基本的7中造型,包括長條型,正方型,正S型,反S型,正7型,反7型,T型。在旋轉(zhuǎn)的過程中我們以逆時針旋轉(zhuǎn)為基礎。為此,我們對于方塊在某一瞬間的位置標識,采用一個42的小數(shù)組標識出來,即用4個存儲單位空間存儲當

5、前下墜物的每一子塊的位置,也就是說,用4個存儲單位空間存儲當前下墜物的每一子塊的位置來對整個下墜物件的位置進行標識,而每個存儲空間的大小就是一個點的坐標值(x,y),而每個方塊按照從左到右的方式進行編號,并且在編號過程中對于同一列的方塊實行從上到下進行編號。123ActiveStatus00和ActiveStatus01則是第0號方塊的橫坐標x和縱坐標y ;ActiveStatus20和ActiveStatus21則是第2號方塊的橫坐標x和縱坐標y。(x0,y0)(x1,y1)(x2,y2)(x3,y3)2.3 創(chuàng)建主框架 首先建立一個項目工程,名為skyblue_Rect,并在AppWiza

6、rd的架構(gòu)選擇過程中選擇單文檔方式,其他保持默認選項。其項目的架構(gòu)類視圖信息如圖所示: 在構(gòu)架類視圖中是MFC基本架構(gòu)組合:App(應用程序)類、Document(文檔)類、View(視圖)類、Frame(框架)類和用于提示關(guān)于作者的對話框CAboutDlg類,至于COptionDlg類是用作俄羅斯方塊參數(shù)選擇的對話框類對象。 2.4 游戲區(qū)域繪圖首先將外部位圖文件rect.bmp中的位圖動態(tài)導入(映射)到內(nèi)存位圖里面,根據(jù)游戲區(qū)域中的二維數(shù)組GameStatusMAX_ROWMAX_COL中的內(nèi)部數(shù)據(jù)將所有數(shù)據(jù)狀態(tài)中為被占用狀態(tài)MAP_STATE_NOT_EMPTY的小方塊區(qū)域用指定的小方塊

7、圖樣類型來填充,然后將已經(jīng)繪制好的游戲區(qū)域圖像一次性的拷貝到與屏幕關(guān)聯(lián)的設備環(huán)境中,從而達到屏幕的顯示。2.5 游戲設計分析我先虛擬出俄羅斯方塊游戲的類對象,并抽象出核心的數(shù)據(jù)屬性和操作方法等,然后再作細化,最后將整個虛擬類的外殼脫掉,再移植到視圖類中去,其實現(xiàn)如下:CRectGameView : public CView/內(nèi)部存取數(shù)據(jù)結(jié)構(gòu)int m_stateMapMAX_ROWMAX_COL;/初始化操作GameInitnal(); /游戲的初始化/用于判斷數(shù)據(jù)相關(guān)狀態(tài)的操作IsLeftLimit(); /下墜物件是否可向左移動IsRightLitmit(); /IsBottom(); /

8、是否已經(jīng)到達了底部IsGameEnd(); /是否游戲已經(jīng)結(jié)束/方塊物件下墜過程中的操作RectChange(); /下墜物件變形RectDown(); /下墜物件正常下落RectArrow(); /下墜物件方向移動(左,右,下加速) /狀態(tài)控制操作GameStart(); /游戲開始GamePause(); /游戲暫停GameEnd(); /游戲結(jié)束2.6正常流程設計 (1)定時制機制 從分析游戲的特性可以知道,定時器的產(chǎn)生與生效應該在游戲開始的時候,而在游戲暫?;蛘哂螒蚪Y(jié)束時則將已經(jīng)設定的定時器失效/銷亡(對于暫停的情況,使它銷亡,當游戲從暫停狀態(tài)又進入游戲狀態(tài)時候,則重新創(chuàng)建一個定時器并

9、激活它的運作),所以分別在游戲的開始函數(shù)、暫停函數(shù)已經(jīng)結(jié)束函數(shù)中實現(xiàn)定時器的激活與去激活工作。這里,先在資源編輯器菜單資源里面添加三個菜單選項,分別是游戲的“開始”、“暫?!薄⒑汀敖Y(jié)束”,然后利用ClassWizard直接在視圖類對象Cskyblue_RectView中為它們添加空白的處理函數(shù),(2)定時處理 經(jīng)過定時器的設置后,這里通過利用ClassWizard跳到定時器到時候的處理函數(shù)OnTimer()去實現(xiàn),當固定時間片間隔到達后,先檢測當前下墜物是否已經(jīng)到達了底部,不是則進行RectDown()下墜物向下移動一個單位的操作,是則到底后產(chǎn)生一個新的“下一個下墜物”,并代替舊的,將原先舊的

10、“下一個下墜物”用作當前激活狀態(tài)下正在使用的下墜物,并對使用后的一些狀態(tài)進行檢測:是否馬上到達底部,使則進行銷行操作;是否在到達底部的同時到達游戲區(qū)域的頂部,從而判定游戲是否因違規(guī)而結(jié)束。 產(chǎn)生的隨機數(shù)函數(shù):int CSkyblue_RectView:Random(int MaxNumber)/部下隨機種子srand( (unsigned)time( NULL ) );/產(chǎn)生隨機數(shù)int random = rand() % MaxNumber;/保證非0if(random = 0 ) random+;return random;視圖類創(chuàng)建了m_icurrentStatus和m_inextSta

11、tus兩個成員變量來記錄下墜物的類型,共有七種形狀,并從7種方塊中隨機抽取圖形。而m_currentRect除了記錄下墜物的類型外,還需記錄其當前的變形狀態(tài),最多用兩位表示,第1位用作類型標識(17),第2位用作同種類型的不同表現(xiàn)方式,最多有4種狀態(tài)(14)。 在產(chǎn)生新的下一個下墜物前,需要先將當前狀態(tài)物的記錄和舊的下一個下墜物保存下來,然后用隨機函數(shù)Random()產(chǎn)生一個最大值不大于指定值的隨機正整數(shù),將這個新生成的正整數(shù)用作新的“下一個下墜物”的形狀值。(3)底部到達的判斷與銷行的實現(xiàn)將新的下墜物放置到游戲區(qū)域中去,這時可能出現(xiàn)馬上到達底部的情況,因此需要對它進行判斷,如果是到達底部,則

12、進行銷行處理,并且修改相應的數(shù)據(jù)狀態(tài)。而判斷是否已經(jīng)到達了底部,可以通過當前下墜物件所對應的接觸面的方塊位置為被占用狀態(tài)(MAP_STATE_NOT_EMPTY=1)來確定,利用數(shù)組InterFace744記錄17種下墜物的14種形態(tài)的接觸面信息。統(tǒng)計分數(shù):在消行處理里面有一個專門用來統(tǒng)計消行數(shù)的變量,然后根據(jù)變量的值決定分數(shù)的多少,程序統(tǒng)計分數(shù)是:消一行得100分,同時消2行得400分,銷掉x行,則分數(shù)為:x*(x*100)。如果總分數(shù)達到過關(guān)條件就過關(guān),改變游戲速度,游戲初始化,開啟新的一關(guān),然后再加載方塊。沒有達到過關(guān)分數(shù)或者沒有滿行,則加載下一個方塊繼續(xù)游戲。檢測游戲區(qū)域中的所有行,并

13、對每行的所有縱列狀態(tài)進行檢測,如果其中有一列是空閑狀態(tài)則不可以銷行。如果可以銷行的話,將增加單位分數(shù),并且將該行清空,再將該行上面的所有物件都向下偏移一個單位,以填充該行的空缺。例銷行與積分if (m_isBottom)/判斷是否已得分for (i=0;im_iRow;i+)m_bIsSucced = TRUE;for (j=0;j0;k-)for (j=0;jm_iCol;j+)GameStatuskj = GameStatusk-1j;/第1行清零for (j=0;j0) & IsLeftLimit() & !m_isBottom)/清原來的方塊GameStatusx1y1=MAP_STA

14、TE_EMPTY;GameStatusx2y2=MAP_STATE_EMPTY;GameStatusx3y3=MAP_STATE_EMPTY;GameStatusx4y4=MAP_STATE_EMPTY;/InvalidateCurrent();/添加新的移動后數(shù)據(jù)狀態(tài)ActiveStatus01 -= 1;ActiveStatus11 -= 1;ActiveStatus21 -= 1;ActiveStatus31 -= 1;GameStatusx1y1-1=MAP_STATE_NOT_EMPTY;GameStatusx2y2-1=MAP_STATE_NOT_EMPTY;GameStatusx

15、3y3-1=MAP_STATE_NOT_EMPTY;GameStatusx4y4-1=MAP_STATE_NOT_EMPTY;InvalidateCurrent();Break;case RIGHT:if ( (ActiveStatus31 m_iCol-1) & IsRightLitmit() & !m_isBottom)/清原來的方塊GameStatusx1y1=MAP_STATE_EMPTY;GameStatusx2y2=MAP_STATE_EMPTY;GameStatusx3y3=MAP_STATE_EMPTY;GameStatusx4y4=MAP_STATE_EMPTY;/Inval

16、idateCurrent();/添加新的移動后數(shù)據(jù)狀態(tài)ActiveStatus01 += 1;ActiveStatus11 += 1;ActiveStatus21 += 1;ActiveStatus31 += 1;GameStatusx1y1+1=MAP_STATE_NOT_EMPTY;GameStatusx2y2+1=MAP_STATE_NOT_EMPTY;GameStatusx3y3+1=MAP_STATE_NOT_EMPTY;GameStatusx4y4+1=MAP_STATE_NOT_EMPTY;InvalidateCurrent();break;case DOWN:RectDown();break; 2.9 游戲主界面 游戲設置界面 2.8總結(jié) 著手開始做的時候,發(fā)現(xiàn)很多東西并不容易實現(xiàn)。比如:如何顯示每一個俄羅斯小方塊,如何預測下一個俄羅斯小方塊,如何控制每一個方塊的下落速度,如何判斷俄羅斯方塊是否可以停止,如何通過鍵

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論