freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

vc制作俄羅斯方塊畢業(yè)設計(編輯修改稿)

2025-01-04 06:11 本頁面
 

【文章內(nèi)容簡介】 游戲中要求可以選擇方塊顏色,因此初步繪制了五種不同顏色的方塊。五種方塊要求能夠通過菜單欄的選項 進行調(diào)試,因此需要如下語句來完成: m_hMemRectBmp=(HBITMAP)LoadImage(NULL,IMAGE_BITMAP,100,20,LR_LOADFROMFILE)。 游戲背景是可以選擇的,有灰、綠、紅三種顏色背景,再加上游戲區(qū)域底色是黑色,因此需要定義四種顏色的畫刷: m_pGrayBrush = new CBrush(RGB(66,66,66))。 m_pGREENBrush = new CBrush(RGB(0,255,0))。 m_pREDBrush = new CBrush(RGB(255,0,0))。 m_pBlackBrush = new CBrush(BLACK)。 圖 4— 2 方塊的 BMP圖 13 畫刷定義好后,就要開始填充背景。由于背景是可供選擇的,因此需要使用一個條件選擇語句 SWITCH 來完成這項功能。這些繪制功能是用 DrawGame()函數(shù)來實現(xiàn)的。 小方塊為邊長為二十象素的方塊,其繪制如下所示: x = m_iStartY+j*m_iLarge +2。 y = m_iStartX+i*m_iLarge +2。 nW = m_iLarge1。 nH = m_iLarge1。 pDCBitBlt(x,y,nW,nH,amp。m_memRectDC,m_iBlockStyle*20,0,SRCCOPY)。 得分由白色字顯示在游戲區(qū)域下方, pDC TextOut(m_iStartY+60, m_iStartX+402,lsStr)。 畫下一次將要出現(xiàn)的方塊,用于提示玩家。其繪制方法與繪制其他小方塊的方法相同,只是位置上產(chǎn)生了一些變化: x = m_iStartY+j*20+65。 y = m_iStartX+i*2090。 nW = m_iLarge1。 nH = m_iLarge1。 pDCBitBlt(x,y,nW,nH,amp。m_memRectDC,m_iBlockStyle*20,0,SRCCOPY); 當繪圖設備環(huán)境的初始化都完成后,便可用 OnDraw()函數(shù)進行繪制了。 void CSkyblue_RectView::OnDraw(CDC* pDC) { DcEnvInitial()。 DrawGame(amp。m_memDC)。 pDCBitBlt(0,0,m_nWidth,m_nHeight,amp。m_memDC,0,0,SRCCOPY)。 } 此函數(shù)本身并不長,但是它卻做了最重要的繪圖工作。當這些都做完后,游戲中運行窗口的繪制也完成了。 14 方塊設計 方塊的實現(xiàn) 七種下墜物都有一個共同點,就是它們占據(jù)的空間一樣,都是由四個等面積的小方塊構(gòu)成,因此用一個整型的二維數(shù)組 ActiveStatus[][]來存儲每個下墜物的四個小方塊的坐標位置。每個下墜物中的方塊都有編號,編號按從左到右,從上到下的順序排列。 ActiveStatus[0][0]和 ActiveStatus[0][1]則是第 0 號方塊的 橫坐標X和縱坐標 Y。 除了當前用戶正在操作的的下墜物之外,游戲界面上方還需要顯示出下一個下墜物的形狀。因此還需要用一個 NextStatus[][]數(shù)組來存儲下墜物的形態(tài)。可以先根據(jù)當前的物件形狀來初始化其具體形狀,在視圖類對象增加了一個成員函數(shù)RectStatusToNextStatus()來實現(xiàn)。舉一個下墜物的例子來具體說明實現(xiàn)過程: ActiveStatus[0][0] = 0。 ActiveStatus[0][1] = 1。 ActiveStatus[1][0] = 1。 ActiveStatus[1][1] = 1。 ActiveStatus[2][0] = 2。 ActiveStatus[2][1] = 1。 ActiveStatus[3][0] = 3。 ActiveStatus[3][1] = 1。 圖 4— 3 方塊的編號 15 這段程序中描述的便是第一個下墜物的形態(tài)。其對應坐標分別是: (x0,y0)=(0,1)。 (x1,y1)=(1,1)。 (x2,y2)=(2,1)。 (x3,y3)=(3,1)。 可以看出這個下墜物是一條直線的下墜物。對于新的下墜物的使用,可以先用RectStatusToActiveStatus()函數(shù)并根據(jù)初始化當前新的下墜物狀態(tài)來映射出當前下墜物的四個小方塊的初始位置,然后再用函數(shù) ActiveStatusToGameStatus()將當前的下墜物位置映射到地圖區(qū)域中。 方塊的移動 方塊的移動是由鍵盤輸入來完成的,因此首先需要添加對運動方向趨勢的定義: define LEFT 0 define RIGHT 1 define UP 2 define DOWN 3 關于按鍵命令消息的響應,可以通過對 WM_KEYDOWN 消息的處理函數(shù)進行截獲并重寫來實現(xiàn)。該函數(shù)只對某些按鍵功能進行截獲和響應,對應不同的功能模塊。向左移動的左鍵 VK_LEFT,向右移動的右鍵 VK_RIGHT,向下加速的下鍵 VK_DOWN,變形的向上鍵 VK_UP。把向左,向右,向下整和成一個功能模塊 RectArrow()。 16 來看看向左的命令是如何具體實現(xiàn)的: case LEFT: if ( (ActiveStatus[0][1]0) amp。amp。 IsLeftLimit() amp。amp。 !m_isBottom) { GameStatus[x1][y1]=MAP_STATE_EMPTY。 GameStatus[x2][y2]=MAP_STATE_EMPTY。 GameStatus[x3][y3]=MAP_STATE_EMPTY。 GameStatus[x4][y4]=MAP_STATE_EMPTY。 InvalidateCurrent()。 ActiveStatus[0][1] = 1。 ActiveStatus[1][1] = 1。 ActiveStatus[2][1] = 1。 ActiveStatus[3][1] = 1。 GameStatus[x1][y11]=MAP_STATE_NOT_EMPTY。 GameStatus[x2][y21]=MAP_STATE_NOT_EMPTY。 GameStatus[x3][y31]=MAP_STATE_NOT_EMPTY。 GameStatus[x4][y41]=MAP_STATE_NOT_EMPTY。 InvalidateCurrent()。 } break。 從代碼中可以看出程序首先獲取了當前下墜物的四個小方塊坐標,然后所有縱坐標遞減一格,由 InvalidateCurrent()函數(shù)計算出改變數(shù)據(jù)的視圖區(qū)域,并通知重繪。這樣便可完成左移命令。 右移和下移的道理也是一樣。但是這里涉及到一個問題,就是要對移動是否到達游戲區(qū)域的邊界做出判斷。左、右移的限制原理是一樣的,只是方向和坐標數(shù)據(jù)有點區(qū)別,分別用 IsLeftLimit(),IsRightLimit()函數(shù)來實現(xiàn)。根據(jù)各種不同形態(tài)的下墜物最左邊的小方塊的正左(右)方區(qū)域是 否為非被占用狀態(tài)來判斷它是否可以移動。而下移的限制涉及到消行判斷, 這些 將在后面做具體分析。 17 方塊的旋轉(zhuǎn) 方塊的旋轉(zhuǎn)操作需要考慮到兩個問題,一個是如何實現(xiàn)旋轉(zhuǎn),另一個是判斷能否旋轉(zhuǎn)。 為了實現(xiàn)旋轉(zhuǎn),首先獲取當前下墜物的四個小方塊的坐標位置。由于每種方塊變形后的狀態(tài)都不同,因此需要對下墜物的不同形態(tài)進行編號。 編號情況如下: 圖 4— 4 方塊變換后的編號 18 編號完成后,根據(jù)當前下墜物的形態(tài)特征計算出變形后的各個小方塊坐標,并計算出下一狀態(tài)應該顯示的狀態(tài)值。這樣方塊的旋轉(zhuǎn)便實現(xiàn)了。 要判斷方塊能否變形,需要先進行虛擬變形,如果變形后所在區(qū)域內(nèi)無其他方
點擊復制文檔內(nèi)容
公司管理相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1