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

正文內(nèi)容

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

2024-11-07 20:21本頁面

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

  

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