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

正文內容

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

2024-11-07 20:21本頁面

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

  

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