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

正文內(nèi)容

基于vc++的坦克大戰(zhàn)游戲開發(fā)論文-預(yù)覽頁

2024-12-14 15:02 上一頁面

下一頁面
 

【正文】 。 當(dāng)然還有各種應(yīng)用軟件了。 任天堂和 Battle City背景介紹 FC(Family Computer)主機(jī)在歐美又稱 Nintendo Entertainment System(可譯作任天堂娛樂平臺即 NES)。由于其價格便宜且極易使用,經(jīng)過任天堂的改造后又煥發(fā)了全新活力。 圖 11 80 年代中期 器 圖 12 Battle City 的界面 3 Batt e ity 的界面 3 研究內(nèi)容 本文主要的研究內(nèi)容包括: 敵人坦克的轉(zhuǎn)向,出生點(diǎn)的設(shè)置,發(fā)射子彈,獲得寶物后的變化; 玩家坦克的控制,操縱桿的設(shè)置,獲得寶物的變化; 坦克之間的碰撞,坦克與寶物之間的碰撞,子彈之間的碰撞和子彈和坦克之間的碰撞的判斷,子彈發(fā)射時間間隔的控制; 還有關(guān)卡的選擇,通過 page up 和 page down 選擇上一關(guān)或下一關(guān)。 2. 己方坦克的運(yùn)行可以通過鍵盤響應(yīng)事件控制,但敵方則因?yàn)槭亲詣舆\(yùn)行,就需要有一定其一定的智能性;同時,出現(xiàn)在屏幕上的敵方可能會有較多的數(shù)量,這需要為每個敵方開辟一個線程以便能讓其獨(dú)立運(yùn)行。敵方子彈僅需要掃描用戶坦克,而用戶坦克需要在每一步掃描所有的敵方坦克。每一次刷新頁 面、每前進(jìn)一步都需要將所有的周圍環(huán)境都進(jìn)行掃描。 2. 封裝性 封裝是面向?qū)ο蠓椒ǖ?重要的原則。 3. 繼承性 繼承是軟件復(fù)用的一種方式。 4. 多態(tài)性 多態(tài)性也是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特性之一。 C++作為一種面對對象的程序設(shè)計(jì)語言,也具有這樣的特點(diǎn)。 Visual C++ 不僅僅是一個編譯器。 Visual C++采用的框架是 MFC。MFC 是在整個 Windows 家族中都是兼容的 ,也就是說,無論是 、Windows95 還是 Windows NT,所使用的 MFC 是兼容 的。 MFC 中包含了上成千上萬行正確、優(yōu)化和功能強(qiáng)大的 Windows 代碼。 最后要指出的是 MFC 類庫在提供的對象的各種屬性和方法都是經(jīng)過謹(jǐn)慎的編寫和嚴(yán)格的測試,可靠性很高,這就保證了使用 MFC 類庫不會影響程序的可靠性和正確性。 DirectDraw 提供以下功能: DirectDraw 的硬件抽象層 (HAL)提供的兼容接口可以直接操作顯示硬件,從而獲得最大性能。 DirectDraw 從操作系統(tǒng)所提供的 32 位內(nèi)存尋址和平面內(nèi)存模型中獲益。 支持 3D Zbuffer。 其他的特性,包括動態(tài)改變調(diào)色板,獨(dú)占訪問硬件和分辨率切換等。 DirectPlay 網(wǎng)絡(luò)服務(wù)提供了多種網(wǎng)絡(luò)連接支持,如 TCP/IP、 IPX、 Modem和 Serial Link。 DirectPlay 地址 為了傳送消息,每個加入游戲的機(jī)器都要有一個唯一的地址。 DirectPlay 對象之間的通信就是通過組件的接口來完成的。游戲要執(zhí)行這些回調(diào)函數(shù),只需要在 DirectPlay 初始化期間傳送回調(diào)函數(shù)指針即可。比如主持聊天室,發(fā)送新聞和信息,主持商業(yè)買賣等。一個大廳客戶端通過與大廳服務(wù)器連接程序進(jìn)行工作,連接程序被安裝到用戶的系統(tǒng)上。設(shè)置引入路徑的方法如下: 首先選擇 Tools 菜單中的 Options 選項(xiàng) 這時就打開了 Options 對話框,然后在 Directories 選項(xiàng)卡中的 Show directories for 下拉列表框中選擇 Include files 選項(xiàng),并加入新路徑連接到 DirectX 中的 include 目錄。 建立好一個基本的 Win32 應(yīng)用程序以后,再建立這個項(xiàng)目所屬的資源文件,方法如下: 11 圖 33 新建資源文件 圖 34 引入頭文件 12 啟動 Class Wizard 以建立存放類信息的文件。在開始游戲后將先從外部文件載入地圖文件,對背景的所有物體進(jìn)行繪圖。用戶再次發(fā)射子彈時只是將終止的線程再次激活。主程序流程如 圖 41 所示: 系統(tǒng)框架設(shè)計(jì) 在這個游戲中,有 11 個核心的類。 CTank 類繼承了 CBullet 類,完成對坦克的控制。 CDirectInput 類完成玩家操縱桿的設(shè)置。其主邏輯如圖 44 所示。 其他,還需保存的變量有 ,敵人的總數(shù)、屏幕上敵人的數(shù)量、下一個敵人需要出現(xiàn)的位置(總共允許在五個不同的位置出現(xiàn))、游戲是否一成功結(jié)束或是否已死亡。 = OFFSETY。// 畫窗口的中間 圖 43 游戲第一關(guān)界面 17 = 0。 DDClear( amp。 DDClear( amp。 = OFFSETY。 //畫窗口的左部 = OFFSETX + 416。 //畫窗口下部 地圖由外部文件讀入。本程序設(shè)置為 4 或 6。 如果玩家已經(jīng)死亡,將“ Game Over”字樣插入到最上層,以免被其他物體覆蓋。 enum BONUS { BONUS_LIFE,//如圖 46 BONUS_CLOCK,//如圖 47 BONUS_SHOVEL,//如圖 48 BONUS_BOMB,//如圖 49 BONUS_STAR,//如圖 410 BONUS_HELMET//如圖 411 }。構(gòu)造函數(shù)中創(chuàng)建了每個坦克必須擁有的一顆子彈,這些子彈就將只跟隨自己的坦克調(diào)動。 Move()函數(shù)將返回坦克是否能夠向前前進(jìn),考慮到的因素有邊界,它返回一個 boolean 值。 else if( m_y + m_height MAX_Y ) m_y = MAX_Y m_height。因?yàn)樽訌検菍儆谔箍说?,它的屬性需要跟?dāng)前的坦克保持一致。 無論子彈是屬于敵人還是玩家的,它都必須記錄自己的來源和攻擊的對象。 sprite )函數(shù)判斷是否和寶物相交。 player ) { int i。 m_lockTime = timeGetTime()。 case BONUS_BOMB: for( i = 0。 !m_enemy[i].m_bBoring ) { Explode( m_enemy[i], TRUE )。 case BONUS_STAR: if( ++ 3 ) = 3。 } = FALSE。 break。 case DIR_LEFT: m_bullet[i].m_x=m_x+4。 m_bullet[i].m_y=m_y+m_height/24。因?yàn)閿橙说倪\(yùn)行是自動的,需要有設(shè)定的程序讓它可自己控制 ,而不像CPlayer 完全通過每次輸入的鍵盤信號來做出反映。這樣,它們才可以自動檢測自己是否與同伴發(fā)生了碰撞,以便采取躲避、轉(zhuǎn)向等行動。amp。 m_enemy[i].m_dir = dir。如果剛出現(xiàn),就直接走一步。 sprite )函數(shù)判斷是否和寶物相交。 m_nEnemysLeft += 5。 break。 PlayerBeenHit( m_player[1] )。 break。 } 敵人坦克出彈口位置的設(shè)置。 case DIR_DOWN: m_bullet[0].m_x = m_x + m_width/2 4。 m_bullet[0].m_y = m_y + m_height/2 4。 } 子彈的運(yùn)行和控制 子彈繼承了 CSprite,運(yùn)行在獨(dú)立的線程中。如果沒有和子彈發(fā)生碰撞,就檢測是否與敵人碰撞,發(fā)生碰撞時,敵人數(shù)量減少一位,敵人屏幕上數(shù)量減少一位。因?yàn)樵诎l(fā)炮期間,坦克的再次發(fā)炮的功能是被鎖定的。 break。 break。 得分顯示在屏幕的左上方和右上方(分單人和雙人兩種模式,第一個玩家顯示在左,第二個玩家顯示在右)。 ??? 1 創(chuàng)建 DirectInput 對象 設(shè)置 DirectInput 系統(tǒng),即創(chuàng)建一個 DirectInput 對象作為總體的管理者。m_pDI, NULL )。第三個參數(shù)決定了 DirectInput 返回哪種接口。 2 創(chuàng)建 DirectInput 鍵盤設(shè)備 創(chuàng)建完 DirectInput 接口之后,應(yīng)用程序應(yīng)該創(chuàng)建鍵盤設(shè)備,即獲得一個DirectInputDevice 接口指針。m_pdevKeyboard, NULL )。因?yàn)橐褂面I盤設(shè)備,所以這里傳遞的是,如果函數(shù)調(diào)用成功則返回接口指針。 m_pdevKeyboardSetDataFormat( amp。在下面的代碼中,請求的是前景,非獨(dú)占式的訪問。而DISCL_NONEXCLUSIVE 的意思是可以和其他程序同時訪問設(shè)備,而不是獨(dú)占式的。 if( m_pdevJoystick ) m_pdevJoystickAcquire()。 GetDeviceState 函數(shù)有兩個參數(shù):設(shè)備狀態(tài)數(shù)據(jù)緩沖區(qū)和其緩沖區(qū)的大小。如果某個元素中的最高比特為為 1,那么就代表了這個鍵處于被按下狀態(tài),否則這個間是松開狀態(tài)。 0x80) //判斷最高比特位是否為 1, 1表示這個鍵被按下。 hr = m_pdevKeyboardGetDeviceState( sizeof(buffer), amp。 } 30 // 鍵位設(shè)置 if( KEYDOWN( DIK_W ) ) input1 |= KEY_UP。 if( KEYDOWN( DIK_SPACE ) ) input1 |= KEY_FIRE。 else if( KEYDOWN( DIK_RIGHT ) ) input2 |= KEY_RIGHT。// 輪循設(shè)備讀取當(dāng)前狀態(tài) // get data from the joystick hr = m_pdevJoystickGetDeviceState( sizeof(js), amp。 } if( 0 ) input1 |= KEY_LEFT。 if( [0] amp。 define SAFE_RELEASE(x) if(x) { xRelease()。 SAFE_RELEASE( m_pdevKeyboard )。對游戲有關(guān)的各運(yùn)行界面也做了展示。即使是作為操作系統(tǒng)的各種版本的 Windows 也時常會發(fā)生許多類型的錯誤和漏洞。 在本次畢業(yè)設(shè)計(jì)的過程中,通過指導(dǎo)老師的耐心指導(dǎo)和自身的學(xué)習(xí)及努力,使我對游戲編程知 識有了進(jìn)一步的提高,同時對本次畢業(yè)設(shè)計(jì)所涉及的 DirectX也有了一定的認(rèn)識。 本科期間做過很多課程設(shè)計(jì),大多規(guī)模很小。 34 致謝 首先感謝我的指導(dǎo)老師,他在我的畢業(yè)設(shè)計(jì)過程中提出了指導(dǎo)性的方案和架構(gòu),并指引我閱讀相關(guān)的資料和書籍,使我在不熟悉的領(lǐng)域中仍能迅速掌握新興的技術(shù)。 35 參考文獻(xiàn) [1]. Bruce ++ 深入淺出 [M].北京: 學(xué)苑出版社 , 1994, 10: 1255 [2].楊正華,張秋生: Visual C++ 游戲編程導(dǎo)學(xué) [M].北京:清華大學(xué)出版社,2020, 12: 1350 [3].揣錦華 .面向?qū)ο蟪绦蛟O(shè)計(jì)與 VC++實(shí)踐 [M].西安:西安電子科技大學(xué)出版社, 2020, 2: 1321 [4].Andrew [M].北京: 紅旗出版社 , 2020: 1200 [5].楊淑瑩 . VC++圖像處理程序設(shè)計(jì) [M].北京: 北方交通大學(xué)出版社 , 2020:20125 [6].坂本千尋 .Visual C++專業(yè)游戲程序設(shè)計(jì) [M].北京: 中國鐵道出版社 , 2020:1120 [7].孫鑫 . VC++深入詳解 [M].北京: 電子工業(yè)出版社 , 2020: 1191 [8].榮欽科技 .Visual C++游戲設(shè)計(jì) [M].北京: 北京科海電子出版社 , 2020: 1395 [9].丁展 . Visual C++ 游戲開發(fā)技術(shù)與實(shí)例 [M].北京:人民郵電出版社, 2020,2: 1279 [10].David Kruglinski, Scot Wingo, Gee Visual C++ [M].Microsoft, 1999, 5:120
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1