俄羅斯游戲案例剖析C語言版_第1頁
俄羅斯游戲案例剖析C語言版_第2頁
俄羅斯游戲案例剖析C語言版_第3頁
俄羅斯游戲案例剖析C語言版_第4頁
俄羅斯游戲案例剖析C語言版_第5頁
已閱讀5頁,還剩33頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

游戲案例剖析

俄羅斯方塊游戲開發C/C++語言程序設計龔尚福,賈澎濤主編《C/C++語言程序設計》西安電子科技大學出版社游戲說明及規則俄羅斯方塊是由俄羅斯人阿列克謝·帕基特諾夫發明的。俄羅斯方塊原名是俄語Тетрис(英語是Tetris),這個名字來源于希臘語tetra,意思是“四”,而游戲的作者最喜歡網球(tennis)。于是,他把兩個詞tetra和tennis合而為一,命名為Tetris,這也就是俄羅斯方塊名字的由來。游戲規則Tetris游戲在一個m*n的矩形框內進行。游戲開始時,矩形框的頂部會隨機出現一個由四個小方塊構成的磚塊,每過一個很短的時間(我們稱這個時間為一個tick),它就會下落一格,直到它碰到矩形框的底部,然后再過一個tick它就會固定在矩形框的底部,成為固定塊。接著再過一個tick頂部又會出現下一個隨機形狀,同樣每隔一個tick都會下落,直到接觸到底部或者接觸到下面的固定塊時,再過一個tick它也會成為固定塊,再過一個tick之后會進行檢查,發現有充滿方塊的行則會消除它,同時頂部出現下一個隨機形狀。直到頂部出現的隨機形狀在剛出現時就與固定塊重疊,表示游戲結束。操作說明:‘a’或

‘4’

—左移

‘d’

‘6’

—右移

‘w’

‘8’

—旋轉

‘s’或‘5’

—快速下落

‘x’或‘2’

—快速下落項目規劃在做項目前一定要好好地構思和規劃項目,根據需求規劃開發流程。項目開發流程圖功能分析:分析整個系統所需要的功能;模塊結構規劃:規劃系統中所需要的功能模塊;總體設計:分析系統處理流程,探索系統核心模塊的運作;數據結構:設計系統中需要的數據結構;規劃函數:預先規劃系統中需要的功能函數;具體編碼:編寫系統的具體實現代碼。功能分析做一個簡單的項目規劃書,整個規劃書分為兩個部分:系統需求分析;結構規劃。系統需求分析(1)1) 游戲方塊的隨機生成功能

當游戲運行開始或方塊成為固定塊后,應能在游戲面板頂部隨機生成一個新方塊,這樣便于玩家提前進行控制處理。2) 游戲方塊的控制功能

游戲玩家可以對出現的方塊進行移動處理,分別實現左移、右移、快速下移、自由下落和行滿自動消除功能的效果。3) 更新游戲顯示

當在游戲中移動方塊時,需要先消除先前的游戲方塊,然后在新坐標位置重新繪制新方塊。系統需求分析(2)4)游戲速度設置和分數更新通過游戲分數能夠實現對行數的劃分,例如,可以設置消除完整的一行為10分。當達到一定數量后,需要給游戲者進行等級上的升級。當玩家級別升高后,方塊的下落速度將加快,從而游戲的難度就相應地提高了。5)系統幫助

游戲玩家進入游戲系統后,通過幫助了解游戲的操作提示。結構規劃系統模塊結構圖總體設計——1.方塊生成新游戲的方塊使用隨機函數rand()可以產生0-6之間的游戲方塊編號。2.游戲方塊控制處理:左移方塊的移動控制是整個游戲的重點和難點,具體信息如下。左移處理處理過程如下。(1)判斷是否能夠左移,判斷條件有兩個:左移一位后方塊不能超越游戲底板的左邊線,否則將越界;并且在游戲方塊有值(值為1)的位置,游戲底板不能是被占用的(占用時值為1)。(2)清除左移前的游戲方塊;(3)在左移一位的位置處,重新顯示此游戲的方塊。總體設計——2.游戲方塊控制處理:右移右移處理處理過程如下。(1)判斷是否能夠右移,判斷條件有兩個:右移一位后方塊不能超越游戲底板的右邊線,否則將越界;游戲方塊有值位置,游戲底板不能被占用;(2)清除右移前的游戲方塊;(3)在右移一位的位置處,重新顯示此游戲的方塊。總體設計——2.游戲方塊控制處理:下移3) 下移處理處理過程如下。(1) 判斷是否能夠下移,判斷條件有兩個:下移一位后方塊不能超越游戲底板的底邊線,否則將越界;游戲方塊有值位置,游戲底板不能被占用。滿足上述兩個條件后,可以被下移處理。(2) 清除下移前的游戲方塊;(3) 在下移一位的位置處,重新顯示此游戲的方塊。總體設計——2.游戲方塊控制處理:旋轉4) 旋轉處理處理過程如下。(1) 判斷是否能夠旋轉,判斷條件有兩個:旋轉后方塊不能超越游戲底板的底邊線、左邊線和右邊線,否則將越界;游戲方塊有值位置,游戲底板不能被占用;(2) 清除旋轉前的游戲方塊;總體設計——3.更新顯示

當游戲中的方塊在進行移動處理時,要清除先前的游戲方塊,用新坐標重繪游戲方塊。當消除滿行后,要重繪游戲底板的當前狀態。總體設計——4.游戲速度和分數更新處理當行滿后,積分變量score會增加一個固定的值,然后將等級變量level和速度變量speed相關聯,實現等級越高速度越快的效果。需要一個檢查一行是否填滿的函數數據結構設計(1)1.Tetris游戲的矩形框——二維數組首先描述Tetris游戲的矩形框。數據結構設計(2)2.游戲方塊結構體/*■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/staticintbrickX[7][4]={{0,1,2,3},{0,1,1,2},{2,1,1,0},{1,1,2,2},{0,0,1,2},{2,2,1,0},{0,1,1,2}};static intbrickY[7][4]={{0,0,0,0},{0,0,1,1},{0,0,1,1},{0,1,0,1},{0,1,1,1},{0,1,1,1},{0,0,1,0}};詳細設計voidWelcome(void);/*歡迎界面*/voidDisplay(intbinimage[20][10]);/*顯示游戲面板函數*/voidGotoXY(intx,inty);/*輸出定位函數*/voidPause(void);/*暫停*/voidBlock_Random();/*隨機生成一個磚塊*/intmove(intoffsetX,intoffsetY,intbinImage[20][10]);/*左移、右移、下移*/introtate(intbinImage[20][10]);/*旋轉函數*/voidoutput(intbinImage[20][10]);/*輸出到顯示面板*/unsignedintremoveFullLines();/*檢查是否有一行填滿*/voidcopyimage(intdestimage[20][10],intsourceimage[20][10]);/*拷貝數組*/游戲歡迎界面繪制游戲面板算法描述:定位輸出位置(1,1)根據面板對應的二維數組繪制繪制面板界墻,為實心方格如果二維數組相應位為0,繪制空格否則,繪制空心方格繪制游戲面板繪制游戲面板定位輸出位置函數voidGotoXY(intx,inty)//設定輸出位置{ COORDc; c.X=x-1; c.Y=y-1; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);}typedefstruct_COORD{ SHORTX; SHORTY;}COORD,*PCOORD;SetConsoleCursorPosition:Setsthecursorpositioninthespecifiedconsolescreenbuffer.BOOLWINAPISetConsoleCursorPosition(__in

HANDLEhConsoleOutput,__in

COORDdwCursorPosition);

隨機生成一個磚塊暫停移動方塊——左移、右移、下移旋轉點P(x,y)到原點O繞O點逆時針旋轉角度θ后到點P′(x′,y′)。由三角函數的幾何意義,有x=r*cosα,y=r*sinα和x′=r*cos(α+θ),y′=r*sin(α+θ),推出:

x′=x*cosθ–y*sinθ

y′=y*cosθ+x*sinθ當把旋轉點一般化為Q(x0,y0),得到:

x′=x0+(x-x0)cosθ-(y-y0)sinθ

y′=y0+(y-y0)cosθ+(x-x0)sinθ旋轉任意點(x,y)繞其中心(x0,y0)逆時針旋轉angle角度后,新的坐標位置(x1,y1)的計算公式為:

x1=(x-x0)cosθ-(y-y0)sinθ+x0;

y1=(x-x0)sinθ+(y-y0)cosθ+y0;將坐標(x,y)繞(x0,y0)順時針旋轉90度(相當于逆時針-90度),得到的新坐標(x1,y1),則滿足:x1=x0+y-y0y1=y0+x0-x旋轉輸出到游戲面板voidoutput(intbinImage[20][10]){inti; for(i=0;i<4;i++) binImage[y[i]][x[i]]=1;

}/*檢查是否有一行填滿*/游戲功能設計定義用于程序流程控制的變量一個

溫馨提示

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

評論

0/150

提交評論