(參考)游戲開發(fā)俄羅斯方塊設(shè)計(jì)說明書_第1頁(yè)
(參考)游戲開發(fā)俄羅斯方塊設(shè)計(jì)說明書_第2頁(yè)
(參考)游戲開發(fā)俄羅斯方塊設(shè)計(jì)說明書_第3頁(yè)
(參考)游戲開發(fā)俄羅斯方塊設(shè)計(jì)說明書_第4頁(yè)
(參考)游戲開發(fā)俄羅斯方塊設(shè)計(jì)說明書_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、游戲開發(fā)設(shè)計(jì)說明書題 目俄羅斯方塊學(xué)號(hào)2011115010812學(xué)生姓名袁帥指導(dǎo)教師謝逸所在班級(jí)計(jì)科1108班專業(yè)名稱計(jì)算機(jī)科學(xué)與技術(shù) 目錄游戲開發(fā)設(shè)計(jì)說明書1目錄2一課程設(shè)計(jì)主要內(nèi)容31.題目32.需求分析33.設(shè)計(jì)環(huán)境3二詳細(xì)設(shè)計(jì)說明41.系統(tǒng)程序流程圖42.系統(tǒng)概要說明53.功能說明54.系統(tǒng)各函數(shù)及知識(shí)點(diǎn)說明5三游戲運(yùn)行說明141.游戲運(yùn)行流程圖141.游戲開始142.游戲進(jìn)行153.游戲結(jié)束15四課程設(shè)計(jì)總結(jié)16一 課程設(shè)計(jì)主要內(nèi)容1. 題目俄羅斯方塊2. 需求分析制作一個(gè)俄羅斯方塊的小游戲,用戶能夠通過上下左右鍵來控制方塊,滿行消去。3. 設(shè)計(jì)環(huán)境運(yùn)行環(huán)境:windows xp,w

2、indows 2003 windows 7開發(fā)環(huán)境:vc 6.0編寫語言:c+二 詳細(xì)設(shè)計(jì)說明1. 系統(tǒng)程序流程圖開始隨機(jī)產(chǎn)生一個(gè)方塊交給當(dāng)前圖形變量根據(jù)變化繪圖圖形到底了嗎N繪圖一次圖形下降一行Y隨機(jī)生成一個(gè)圖形交給提示圖形變量結(jié)束游戲清所有數(shù)據(jù)Y行滿YNN表格滿消除行并把上面的行數(shù)據(jù)下移并置Y繪圖提示圖形變量給當(dāng)前圖形結(jié)束2. 系統(tǒng)概要說明 本程序是在vc6.0環(huán)境下編寫的Windows應(yīng)用程序,函數(shù)中利用了畫圖函數(shù)繪制基本方塊模型,并通過相應(yīng)鍵盤相應(yīng)對(duì)應(yīng)地執(zhí)行相應(yīng)的操作。在產(chǎn)生7中不同類型的方塊中,調(diào)用了隨機(jī)函數(shù),隨機(jī)產(chǎn)生17中的任何一個(gè)數(shù)字,每一個(gè)數(shù)字都對(duì)應(yīng)了不同的模塊,通過這種方式,

3、實(shí)現(xiàn)了游戲中其中不同模塊的隨機(jī)產(chǎn)生。3. 功能說明(1) 實(shí)現(xiàn)其中形狀不同的方塊(2) 實(shí)現(xiàn)各個(gè)方塊的上下左右移動(dòng)和旋轉(zhuǎn)的功能;(3) 實(shí)現(xiàn)消行的功能;4. 系統(tǒng)各函數(shù)及知識(shí)點(diǎn)說明1主函數(shù) 主函數(shù)為一有返回值型的整型函數(shù),主要功能為執(zhí)行游戲主線及定義邊界。2. DrawCell函數(shù)(畫方格) DrawCell類的功能定義了單個(gè)方塊的構(gòu)架。此類中,定義了一內(nèi)一外兩個(gè)正方形,使方塊看起來更有立體感。畫正方形通過調(diào)用四個(gè)LineTo()函數(shù),即畫出一個(gè)張方形。代碼說明:void DrawCell (HDC hdc, int l, int t, int r, int b)/ 函數(shù)DrawCell: 畫

4、【方格】,/參數(shù): 設(shè)備環(huán)境句柄和【方格】的四角坐標(biāo),每個(gè)方格由內(nèi)外兩個(gè)【正方形】(DrawCell)畫成,使其有立體感 MoveToEx (hdc, l+1, t+1, NULL);/內(nèi)正方形, MoveToEx()函數(shù),設(shè)置畫筆當(dāng)前位置的函數(shù) LineTo (hdc, r-1, t+1);/LineTo()函數(shù),從當(dāng)前位置向指定坐標(biāo)點(diǎn)畫直線的函數(shù),x和y為線段的終點(diǎn)坐標(biāo) LineTo (hdc, r-1, b-1); LineTo (hdc, l+1, b-1); LineTo (hdc, l+1,t+1); MoveToEx (hdc, l+3, t+3, NULL);/外正方形 Lin

5、eTo (hdc, r-3, t+3); LineTo (hdc, r-3, b-3); LineTo (hdc, l+3, b-3); LineTo (hdc, l+3,t+3);3. DrawBlock函數(shù)(畫方塊)此函數(shù)調(diào)用繪圖函數(shù),首先定義畫筆,然后定義一個(gè)for循環(huán),依次調(diào)用自定義的DrawCell函數(shù),最后畫出一個(gè)由四個(gè)方格組合成的方塊代碼說明: void DrawBlock (HDC hdc, int block42)/ 函數(shù)DrawBlock: 畫【方塊】/ 參數(shù): 設(shè)備環(huán)境句柄和【方塊】中四個(gè)【方格】在游戲區(qū)域中的位置 int i; HPEN hpen; hpen =Crea

6、tePen(PS_SOLID,1,RGB(255,255,255);/用指定的樣式、寬度和顏色創(chuàng)建一個(gè)畫筆,PS_SOLID畫筆畫出的是實(shí)線 SelectObject(hdc,hpen);/該函數(shù)選擇一對(duì)象到指定的設(shè)備上下文環(huán)境中,該新對(duì)象替換先前的相同類型的對(duì)象。/hpen,被選擇的對(duì)象的句柄,該指定對(duì)象必須由如下的函數(shù)創(chuàng)建for(i=0;i4;i+) DrawCell(hdc,(blocki0-1)*CELL,(blocki1-1)*CELL,blocki0*CELL,blocki1*CELL); DeleteObject(hpen);/釋放所有與該對(duì)象有關(guān)的系統(tǒng)資源,在對(duì)象被刪除之后,指

7、定的句柄也就失效了。4. Cover函數(shù)(消除方塊原來位置)當(dāng)方塊每一次移動(dòng)時(shí),都需要消除方塊原先的位置,這時(shí)候就需要自定義一個(gè)函數(shù),每次位置變化時(shí),就調(diào)用此函數(shù),因?yàn)橛螒虮尘笆呛谏模虼嗣看畏綁K位置發(fā)生改變時(shí),只需要把原先的位置的方塊變成黑色即可達(dá)到消除方塊的作用。 首先調(diào)用SelectObject函數(shù)替換先前的相同類型的對(duì)象,同時(shí)定義顏色為黑色,然后通過for循環(huán)依次調(diào)用Rectangle函數(shù),參數(shù)與沒改變位置之前,調(diào)用的DrawCell函數(shù)一樣,繪制四個(gè)黑色的正方形,以達(dá)到消除的目的代碼說明:void Cover (HDC hdc, int org42)/ 函數(shù)Cover: 清除原來位

8、置的【方塊】/ 參數(shù): 設(shè)備環(huán)境句柄和待清除的【方塊】/ 清除【方塊】即在該【方塊】的每個(gè)【方塊】處畫一個(gè)正方形的黑塊 int i; SelectObject (hdc,(HBRUSH)GetStockObject(BLACK_BRUSH); for(i=0; i4; i+) Rectangle (hdc,(orgi0-1)*CELL,(orgi1-1)*CELL,orgi0*CELL,orgi1*CELL);5. 游戲執(zhí)行函數(shù)(窗口函數(shù))此函數(shù)接受玩家發(fā)出的鍵盤響應(yīng),針對(duì)不得不同的消息調(diào)用不同的函數(shù)進(jìn)行消息處理,控制整個(gè)游戲的循環(huán)以及對(duì)各子函數(shù)的調(diào)用。各函數(shù)具體實(shí)現(xiàn)說明:(1).創(chuàng)建窗口響應(yīng)

9、函數(shù)(case WM_CREATE)當(dāng)用戶創(chuàng)建新的窗口時(shí),會(huì)產(chǎn)生這個(gè)消息,此消息在CreateWindow 函數(shù)返回之前被送到消息處理函數(shù)。此函數(shù)主要控制了隨著方塊的往底部的堆積情況,控制方塊的活動(dòng)范圍。代碼具體實(shí)現(xiàn)說明:case WM_CREATE: top=H-1;/top定義了距離頂部的高度 for(i=0; iH; i+)/ 將第一列和最后一列【方格】置1,控制【方塊】不超出游戲區(qū)域 cells0i=1; cellsW+1i=1; for(i=0; iW+2; i+) / 將最底下一行【方格】置1,控制【方塊】不超出游戲區(qū)域 cellsiH-1=1; for(i=1; i=W; i+)

10、 for(j=0; jH-1; j+)/ 其他【方格】置0,游戲方塊只能在這里移動(dòng) cellsij=0; return 0;(2).新的模塊產(chǎn)生響應(yīng)函數(shù)(case MS_NEWBLOCK:)產(chǎn)生新的方塊進(jìn)行消息處理,該函數(shù)首先檢查是否有某一行全部被方格都填滿,若該行被填滿,則將上一行的填充狀態(tài)復(fù)制到該行,依此類推,即從該行開始,所有的方格都下移一行,然后產(chǎn)生隨機(jī)方塊,隨機(jī)模塊的產(chǎn)生如下:隨機(jī)方塊的產(chǎn)生首先通過調(diào)用rand()%7;函數(shù),獲取07中7個(gè)隨機(jī)數(shù),在通過switch語句,針對(duì)七個(gè)數(shù)據(jù),繪制相應(yīng)的方塊形狀,最后實(shí)現(xiàn)隨機(jī)模塊的產(chǎn)生具體代碼說明:sel =rand()%7; / 產(chǎn)生隨機(jī)數(shù)

11、,分別代表【方塊】的種形狀 switch(sel) case 0: / / org00=block00=10; org01=block01=0; org10=block10=11; org11=block11=0; org20=block20=10; org21=block21=1; org30=block30=11; org31=block31=1; break; case 1: / org00=block00=9; org01=block01=0; org10=block10=10;org11=block11=0; org20=block20=11; org21=block21=0; or

12、g30=block30=12; org31=block31=0; break; case 2: / / / org00=block00=10;org01=block01=0; org10=block10=10; org11=block11=1; org20=block20=11; org21=block21=1; org30=block30=11; org31=block31=2; break; case 3: / / / org00=block00=11;org01=block01=0; org10=block10=11;org11=block11=1; org20=block20=10;o

13、rg21=block21=1; org30=block30=10;org31=block31=2; break; case 4: / / / org00=block00=10;org01=block01=0; org10=block10=10; org11=block11=1; org20=block20=10;org21=block21=2; org30=block30=11; org31=block31=2; break; case 5:/ / / org00=block00=10; org01=block01=0; org10=block10=10; org11=block11=1; o

14、rg20=block20=10; org21=block21=2; org30=block30=9;org31=block31=2; break; case 6: / / org00=block00=10; org01=block01=0; org10=block10=9; org11=block11=1; org20=block20=10; org21=block21=1; org30=block30=11; org31=block31=1; break; default: SendMessage (hwnd,MS_NEWBLOCK,0,0); break; (3).鍵盤消息響應(yīng)控制(cas

15、e WM_KEYDOWN:)此函數(shù)分別對(duì)鍵盤消息。即(上,下,左,右)進(jìn)行處理當(dāng)響應(yīng)消息為下,左,右,的時(shí)候,直接更改方塊的再矩陣的位置,以達(dá)到方塊移動(dòng)的效果,當(dāng)相應(yīng)消息上的時(shí)候,就需要改變方塊的定位。首先定義一個(gè)整型變量,記錄變換的次數(shù),然后通過switch語句,當(dāng)前方塊作為條件,不同的方塊,所旋轉(zhuǎn)的消息處理函數(shù)也不一樣,每一個(gè)方塊隨后所變化的種類也不相同,因此,根據(jù)不同的方塊,在進(jìn)行旋轉(zhuǎn)除的余數(shù),對(duì)方塊中四個(gè)方格的位置進(jìn)行改變,當(dāng)旋轉(zhuǎn)后新位置時(shí)有方格時(shí),則旋轉(zhuǎn)取消具體代碼實(shí)現(xiàn)如下:case WM_KEYDOWN: / 響應(yīng)鍵盤控制 r=0; switch(int)wParam) case

16、VK_LEFT: for(i=0;i4;i+) blocki0-; break; case VK_RIGHT: for(i=0; i4; i+) blocki0+; break; case VK_DOWN: for(i=0;i4;i+) blocki1+; break; / 按向上鍵,【方塊】順時(shí)針旋轉(zhuǎn) /【方塊】的旋轉(zhuǎn)不是真正的旋轉(zhuǎn),而是根據(jù)不同的【方塊】形狀和 / 該【方塊】旋轉(zhuǎn)過的次數(shù)來移動(dòng)其中的一個(gè)或幾個(gè)【方格】,從而 / 達(dá)到旋轉(zhuǎn)的效果 case VK_UP: r=1; flag+; /【方塊】旋轉(zhuǎn)加 switch(sel) / sel代表當(dāng)前【方塊】的形狀 case 0: brea

17、k; case 1: flag =flag%2; for(i=0; i4; i+) blocki(flag+1)%2 =org2(flag+1)%2; blockiflag =org2flag-2+i; break; case 2: flag =flag%2; if(flag) block01 +=2; block30 -=2; else block01 -=2; block30 +=2; break; case 3: flag =flag%2; if(flag) block01 +=2; block30 +=2; else block01 -=2; block30 -=2; break; c

18、ase 4: flag=flag%4; switch(flag) case 0: block20 +=2; block30 +=2; block21 +=1; block31 +=1; break; case 1: block20 +=1; block30 +=1; block21 -=2; block31 -=2; break; case 2: block20 -=2; block30 -=2; block21 -=1; block31 -=1; break; case 3: block20 -=1; block30 -=1; block21 +=2; block31 +=2; break;

19、 break; case 5: flag=flag%4; switch(flag) case 0: block20 +=1; block30 +=1; block21 +=2; block31 +=2; break; case 1: block20 +=2; block30 +=2; block21 -=1; block31 -=1; break; case 2: block20 -=1; block30 -=1; block21 -=2; block31 -=2; break; case 3: block20 -=2; block30 -=2; block21 +=1; block31 +=1; break; break; case 6: flag =

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論