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

正文內(nèi)容

基于visualc實(shí)現(xiàn)的單機(jī)版俄羅斯方塊游戲的設(shè)計(jì)-----畢業(yè)論文-資料下載頁(yè)

2024-11-12 15:01本頁(yè)面

【導(dǎo)讀】俄羅斯方塊是非常傳統(tǒng)的游戲,操作簡(jiǎn)單,難度卻不低,廣受娛樂(lè)界歡迎。生活帶來(lái)了健康愉快的補(bǔ)充,唯美的藝術(shù)享受。中的各個(gè)類的關(guān)系和它們內(nèi)部之間的聯(lián)系。4俄羅斯方塊游戲的實(shí)現(xiàn)..

  

【正文】 視圖類對(duì)象增加了一個(gè)成員函數(shù) FlectStatusToNextStatus()來(lái)實(shí)現(xiàn)。 (3)新下墜物的使用 對(duì)于下墜物的使用 ,可以先用 RectStatusToActiveStatus()函數(shù)并根據(jù)初始化當(dāng)前新的下墜物狀態(tài)來(lái)映射出當(dāng)前下墜物的 4 個(gè)小方塊的初始位置 ,然后再用函數(shù) ActiveStatusToGameStatus()將當(dāng)前的下墜物位置映射到地圖區(qū)域中去。 對(duì)于 RectStatusToActiveStatus()的映射實(shí)現(xiàn) ,基本跟前面提到的函數(shù) RectStatusToN extStatus()的實(shí)現(xiàn)一樣 ,也是根據(jù)不同形狀的下墜物填寫它們的第一種變化形態(tài)。只是一開始將這些物放到激活狀態(tài)下的時(shí)候 ,需要確保它們?nèi)慷硷@示在游戲區(qū)域中 ,所以在每個(gè)物件的縱坐標(biāo)上有一定向下的偏移。 本科生畢業(yè)論文 18 (4)底部到達(dá)的判斷與銷行的實(shí)現(xiàn) 將新的下墜物放置到游戲區(qū)域中去,這時(shí)可能出現(xiàn)馬上到達(dá)底部的情況,因此需要對(duì)它進(jìn)行判斷,如果是到達(dá)底部,則進(jìn)行銷行處理,并且修改相應(yīng)的數(shù)據(jù)狀態(tài)。 IsBottom()函數(shù)不僅僅是 對(duì)到達(dá)底部進(jìn)行判斷, 否則不需要封裝成一個(gè)獨(dú)立的函數(shù)而只需做一個(gè)簡(jiǎn)單的 if 語(yǔ)句判斷就可以了。這個(gè) IsBottom()函數(shù)的功能除了判斷是否到達(dá)底部外 ,還進(jìn)行一些基本狀態(tài)的修改和銷行處理。 中斷操作流程的設(shè)計(jì) 上面的分析是基于正常情況下 ,項(xiàng)目程序在無(wú)人操作的情況下由定時(shí)器驅(qū)動(dòng)的游戲流程。它的工作不受外界的任何影響 ,與外界的控制基本不存在直接的關(guān)聯(lián)。 除此之外 ,當(dāng)用戶進(jìn)行一定的操作交互的時(shí)候 ,運(yùn)行程序可以根據(jù)用戶的操作指示進(jìn)行當(dāng)前下墜物的控制。而這些操作都是響應(yīng)相關(guān)的功能鍵而執(zhí)行的 ,所以這里可以把 它看作是一種 “ 中斷 ” 操作 ,也就是說(shuō) ,在正常的流程下 ,俄羅斯方塊程序執(zhí)行正常的 流程 ,而一旦在用戶的按鍵命令到來(lái)的時(shí)候 ,就需要做這些不定時(shí)的操作指示。通過(guò)下面的圖來(lái)理清它們之間的協(xié)作關(guān)系 ,如圖 所示。 圖 正常和中斷的操作關(guān)系 從圖 可看到 ,整個(gè)游戲開始后的運(yùn)行過(guò)程中分成了很多個(gè)問(wèn)隔相等的時(shí)間片 ,而每經(jīng)過(guò)一個(gè)時(shí)間片后 ,就會(huì)觸發(fā)一個(gè)定時(shí)的操作。這個(gè)操作就是前面提到的定時(shí)器觸發(fā)的正常 流程操作 ,因此 ,除了定時(shí)器到達(dá)后的正常流程工作 ,其他情況可以看作是空閑 ,也就是說(shuō) , 在這些情況下一般是沒有做任何事情。而在這條時(shí)間軸上 ,由于用戶需要對(duì)當(dāng)前下墜物進(jìn)行操作 ,因此需要做沒有特定規(guī)律的按鍵指示操作 ,這些操作可以看作是插入在一些時(shí)間片中的 “ 中斷 ” 操作 ,它們的插入是隨機(jī)的 ,是由用戶控制的 ,所以它們?cè)跁r(shí)間軸上的分布是不規(guī)則的。它們的關(guān)系基本是并列的 ,一起處理整個(gè)流程 ,只不過(guò)是在正常的流程下根據(jù)用戶的功能按鍵插入一些花絮而已。 那么 ,當(dāng) “ 中斷 ” 指示命令觸發(fā)的時(shí)候 ,如果正在處理定時(shí)器到達(dá)的正常流程工作 ,該怎 么辦 ?很簡(jiǎn)單 ,因?yàn)槌绦虻墓ぷ髂J皆O(shè)計(jì)的是單線程 ,當(dāng)以上情況發(fā)生的時(shí)候 ,就會(huì)先處理前面正在執(zhí)行的工作 ,再執(zhí)行后者觸發(fā)的工作。 本科生畢業(yè)論文 19 現(xiàn)在就來(lái)對(duì)這個(gè)中斷性的用戶指示操作進(jìn)行分析。其實(shí) ,用戶的按鍵指示操作是根據(jù)功能按鍵的不同 ,去響應(yīng)不同的操作 ,其流程如圖 所示。 圖 用戶指示命令中斷操作流程 用戶指示命令中斷操作的流程主要分成 3 大步驟 ,而第 3步則是根據(jù)不同的功能按鍵響應(yīng)做相應(yīng)的功能操作。下面對(duì)流程簡(jiǎn)要描述一下。 接 收到用戶功能按鍵后分析傳入的參數(shù) ,并解釋出該功能按鍵的鍵值。 對(duì)按鍵的鍵值進(jìn)行判斷 ,構(gòu)建一個(gè)大的邏輯分析流程 ,并對(duì)相應(yīng)按鍵的功能模塊進(jìn)行操作。 具體功能模塊操作的實(shí)現(xiàn) (包括左移、右移、變形、加速下降等 )。 經(jīng)過(guò)對(duì)整個(gè)游戲運(yùn)行的兩個(gè)大框架的流程 (定時(shí)器正常流程和按鍵中斷流程 )進(jìn)行分析后 ,就可以對(duì)它們進(jìn)行實(shí)現(xiàn)了。 中斷操作流程的實(shí)現(xiàn) 在對(duì)正常游戲流程實(shí)現(xiàn)后,接下來(lái)將進(jìn)行用戶按鍵中斷流程的實(shí)現(xiàn)。歸納游戲按鍵功能流程,發(fā)現(xiàn)整個(gè)流程就是根據(jù)不同的按鍵指示命令實(shí)現(xiàn)不同的操作功能的,它們分別是向左移動(dòng) 、 向右 移動(dòng) 、 加速向下移動(dòng) 、 變形。 關(guān)于按鍵命令消息的響應(yīng),可以通過(guò)對(duì) WM_KEYDOWN 消息的處理函數(shù)進(jìn)行截獲并重寫來(lái)實(shí)現(xiàn),對(duì)于這個(gè)消息處理函數(shù)的添加,可以在視圖類 Cskyblue_RectView 中通過(guò)添加ClassWizard 進(jìn)行實(shí)現(xiàn),下面是對(duì)該處理函數(shù) OnkeyDonw()的重寫。 //in file: //處理用戶的輸入,方塊的左移 、 右移 、 加速及變形 void CSkyblue_RectView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { switch(nChar) { 開始 作 左 移動(dòng)一個(gè)單 位 變形 結(jié)束 本科生畢業(yè)論文 20 case VK_LEFT: RectArrow(LEFT)。 break。 case VK_RIGHT: RectArrow(RIGHT)。 break。 case VK_UP: RectChange()。 break。 case VK_DOWN: RectArrow(DOWN)。 break。 } CView::OnKeyDown(nChar, nRepCnt, nFlags)。 } 該函數(shù)體只對(duì)某些按鍵功能進(jìn)行截獲與響應(yīng),它們對(duì)應(yīng)不同的功能模塊,分別是向左移動(dòng)的左鍵 VK_LEFT,向右移動(dòng)的右鍵 VK_DOWN,變形的向上鍵 VK_UP。把上面除變形外的3個(gè)功能 (向下,向上,向左 )整合成一個(gè)功能模塊 RectArrow(),而它們的具體使用則根據(jù)傳入的方向參數(shù)來(lái)區(qū)分。上面的這些參數(shù),在類定義文件的頂部需要添加對(duì)運(yùn)動(dòng)方向趨勢(shì)的定義。 //in file: //中斷操作的運(yùn)動(dòng)趨勢(shì) define left 0 //向 左移動(dòng) define right 1 //向右移動(dòng) define up 2 //向上 (變形 ) define down 3 //向下移動(dòng) 至此,已經(jīng)基本實(shí)現(xiàn)了整個(gè)游戲?qū)?nèi)部數(shù)據(jù),包括有定時(shí)器驅(qū)動(dòng)的正常游戲流程以及由用戶交互操作觸發(fā)而驅(qū)動(dòng)的用戶中斷操作流程。接下來(lái),要將游戲區(qū)域中的數(shù)據(jù)映射到屏幕上。 游戲區(qū)域繪圖的實(shí)現(xiàn) 對(duì)游戲繪制顯像部分通常是先設(shè)計(jì)好繪制的方案 ,并準(zhǔn)備好所需的各種位圖資源 ,然后再調(diào)用適當(dāng)?shù)睦L制操作 去完成圖像的繪制。 位圖資源的準(zhǔn)備 由于做的是 3D效果的俄羅斯方塊 ,所以需要提供多個(gè)位圖圖樣以供選擇。這里必須先準(zhǔn)備好一組不同圖樣類型的位圖 ,并且每個(gè)方塊的尺寸 (高度和寬度 )需要跟游戲區(qū)域中的每個(gè)小方塊尺寸一樣。其文件名為 ,將其放在 工程項(xiàng)目的根目錄下,以供動(dòng)態(tài)調(diào)入。 本科生畢業(yè)論文 21 有了位圖資源后 ,下面將實(shí)現(xiàn)整個(gè)游戲區(qū)域的圖樣繪制并將其顯示到屏幕上。由于這個(gè) 游戲區(qū)域的地圖數(shù)據(jù)比較簡(jiǎn)單 ,每個(gè)方塊只有占用和空閑兩種狀態(tài) ,而對(duì)這兩種狀態(tài)的表達(dá) 也相當(dāng)簡(jiǎn)單 ,對(duì)于被占用的區(qū)域 ,只需顯示當(dāng)前某選定的方塊類型 圖樣 :對(duì)于空閑狀態(tài) ,則 不用繪制 ,填充默認(rèn)的背景色即可 繪圖機(jī)制設(shè)計(jì) 下面將位圖中的方塊圖樣繪制到屏幕上 , 其繪圖機(jī)制如圖 所示 位圖資源 內(nèi)存游戲區(qū)域設(shè)備環(huán)境 屏幕游戲區(qū)域設(shè)備環(huán)境 圖 繪圖機(jī)制圖 如圖 所示 ,對(duì)于屏幕中游戲區(qū)域的繪制 ,是通過(guò)內(nèi)存設(shè)備環(huán)境的區(qū)域映射來(lái)實(shí)現(xiàn)的。首先分配好兩個(gè)與設(shè)備環(huán)境關(guān)聯(lián)的內(nèi)存位圖 ,一個(gè)用作對(duì)外部調(diào)入的小方塊位圖進(jìn)行存儲(chǔ) (映射 ),另外一個(gè)是用作整個(gè)游戲區(qū)域的圖像繪制在內(nèi)存中的映射。當(dāng)然 ,以上的這兩個(gè)內(nèi)存位圖的存儲(chǔ)大小應(yīng)該和它們分別映射的物件數(shù)據(jù)的大小完全一樣。那么怎么通過(guò)它們進(jìn)行屏幕的繪制呢 ? 從圖 可以得出實(shí)現(xiàn)的方法 : (1)首先將外部位圖文件 中的位圖動(dòng)態(tài)導(dǎo)入 (映射 )到內(nèi)存位圖里面。 (2)根據(jù)游戲區(qū)域中的二維數(shù)組 GameStatus[MAX_ROW] [MAX _ COL]中的內(nèi)部數(shù)據(jù) ,將所有數(shù)據(jù)狀態(tài)中為被占用狀態(tài) MAP_STATE_NOT_EMPTY 的小方塊區(qū)域用當(dāng)前指定的小方塊圖樣類型來(lái)填充 (從裝載位圖的內(nèi)存位圖中選取 ),這樣就可以在與屏幕關(guān)聯(lián)的內(nèi)存設(shè)備環(huán)境中先將整個(gè)游戲區(qū)域的圖像繪制好。 (3)最后將已經(jīng)繪制好的游戲區(qū)域圖像一次性地拷貝到與屏幕關(guān)聯(lián)的設(shè)備環(huán)境中 ,從而達(dá)到屏幕的顯示。 繪圖環(huán)境資源的初始化和釋放 (1)繪圖資源的初始化 從前面的分析中可以看出 ,游戲視圖是通過(guò)將內(nèi)存設(shè)備環(huán)境中關(guān)聯(lián)的內(nèi)存位圖從映射拷貝到屏幕上這樣的方法 來(lái)實(shí)現(xiàn)的 ,因此 ,在使用這兩個(gè)內(nèi)存位圖之前 ,需要在游戲開始之前對(duì)它們進(jìn)行初始化屏幕的顯示 ,并且在退出游戲運(yùn)行程序之前 ,將這些關(guān)聯(lián)的資源進(jìn)行釋放。下面就將資源設(shè)備環(huán)境的初始化和釋放分別封裝成兩個(gè)功能函數(shù) ,然后在適當(dāng)?shù)奈恢谜{(diào)用它們。具體實(shí)現(xiàn)如下 :首先在視圖類對(duì)象 CSkyblue _ RectView 中分別為位圖資源本科生畢業(yè)論文 22 新添與其對(duì)應(yīng)的內(nèi)存設(shè)備環(huán)境和內(nèi)存位圖資源 ,并為屏幕繪圖添加與其對(duì)應(yīng)的內(nèi)存設(shè)備環(huán)境和內(nèi)存位圖資源。 //in file: class:cskyblue_rectview //內(nèi)存繪圖設(shè)備的處理 CDC m_memDC。 //內(nèi)存設(shè)備環(huán)境 CBitmap m_memBmp。 //內(nèi)存位圖 CDC m_memRectDC。 //方塊內(nèi)存設(shè)備環(huán)境 HBITMAP m_hMemRectBmp。 //方塊內(nèi)存位圖句柄 增添好繪圖資源成員變量后 ,下面就來(lái)對(duì)這些資源進(jìn)行初始化與資源釋放。 //in file: // //繪圖設(shè)備環(huán)境的初始化 // void CSkyblue_RectView::DcEnvInitial(void) { if(m_bFistPlay) { m_bFistPlay = FALSE。 //用默認(rèn)的參數(shù),獲取當(dāng)前屏幕設(shè)備環(huán)境 CDC *pWindowDC = GetDC()。 // //獲取游戲窗口的大小用于下面設(shè)置內(nèi)存位圖的尺寸 CRect windowRect。 GetClientRect(amp。windowRect)。 m_nWidth = ()。 m_nHeight = ()。 //內(nèi)存設(shè)備環(huán)境與屏幕設(shè)備環(huán)境關(guān)聯(lián)(兼容) (pWindowDC)。 //內(nèi)存位圖與與屏幕關(guān)聯(lián) (兼容 ),大小為游戲窗口的尺寸 (pWindowDC,m_nWidth,m_nHeight)。 //內(nèi)存設(shè)備環(huán)境與內(nèi)存位圖關(guān)聯(lián),以便通過(guò) m_memDC 在內(nèi)存位圖上作畫 (amp。m_memBmp)。 // //內(nèi)存設(shè)備環(huán)境與屏幕設(shè)備環(huán)境關(guān)聯(lián)(兼容) (pWindowDC)。 //相當(dāng)于將外部位圖 動(dòng)態(tài)載入 m_hMemRectBmp 中 m_hMemRectBmp=(HBITMAP)LoadImage(NULL,IMAGE_BITMAP,150,30,LR_LOADFROMFILE)。 本科生畢業(yè)論文 23 //內(nèi)存設(shè)備環(huán)境與內(nèi)存位圖關(guān)聯(lián),以便通過(guò) m_memDC 在內(nèi)存位圖上作畫 SelectObject(, m_hMemRectBmp)。 函數(shù)體分別對(duì)用于屏幕映射的繪圖資源和用于位圖映射的繪圖資源進(jìn)行初始化。在對(duì)上面這兩種資源初始化前 ,先獲取了游戲窗口的尺寸和屏幕設(shè)備環(huán)境的句柄 ,以便下面參數(shù)的使用。對(duì)于用作屏幕映射的設(shè)備環(huán)境 ,先聲明它與屏幕設(shè)備環(huán)境兼容 ,然后將它與已經(jīng)初始化好跟屏幕兼容并且大小為游戲窗口尺寸的內(nèi)存位圖 m_memBmp 關(guān)聯(lián)起來(lái) ,以便可以操作 m_memRectDC 設(shè)備環(huán)境并在上面作畫。對(duì)于用作外部位圖資源 映射的設(shè)備環(huán)境m_memRectDC,由于它是先將與其關(guān)聯(lián)的內(nèi)存圖像多次重復(fù)拷貝到內(nèi)存位圖 m_memBmp 中被占用的小方塊區(qū)域中去 ,最后再一次性地將整個(gè)結(jié)果拷貝到屏幕上 ,所以它也需要聲明跟屏幕設(shè)備環(huán)境兼容 ,并且還需將該 m_memRectDC 設(shè)備環(huán)境與已經(jīng)載入外部位圖的 m _ hMemRectBmp 關(guān)聯(lián)起來(lái) ,以便拷貝位圖的時(shí)候 ,可以從 m_hMemRectBmp 中進(jìn)行拷貝。 (2)繪圖資源的釋放 對(duì)于資源 ,可以在需要的時(shí)候通過(guò)申請(qǐng)方式去獲取 ,而系統(tǒng)的處理機(jī)
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1