




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、計(jì)算機(jī)信息工程學(xué)院畢業(yè)設(shè)計(jì)說明書2D賽車游戲(yux)的設(shè)計(jì)與實(shí)現(xiàn)摘 要隨著電腦的普及,游戲已成為大多數(shù)年青人的主要休閑方式,賽車價(jià)格比較昂貴,而賽車游戲則可以讓那些想玩賽車卻沒法玩的人體驗(yàn)一把。愛好賽車競(jìng)速游戲的玩家們以體驗(yàn)比賽中的刺激為樂趣,玩家唯一的真實(shí)(zhnsh)目的就是“最快”。本設(shè)計(jì)所實(shí)現(xiàn)的賽車(si ch)游戲是基于C語言設(shè)計(jì)開發(fā)的,所選用的游戲引擎是基于Directx8.0編寫的。能進(jìn)行賽車、賽道以及各種圖片的繪制,實(shí)現(xiàn)各種游戲音效,獲取鍵盤輸入,單人游戲時(shí),可與電腦控制的賽車競(jìng)速,多人游戲時(shí)可與其他玩家或電腦AI競(jìng)速。與其他類似游戲相比,本設(shè)計(jì)所采用的碰撞檢測(cè)算法,像邊界矩
2、形盒算法和顏色識(shí)別算法,不僅速度快,而且檢測(cè)靈敏。多人游戲的實(shí)現(xiàn)是靠socket網(wǎng)絡(luò)編程與多線程的聯(lián)用,socket提供C/S模式下數(shù)據(jù)的可靠傳輸,多線程解決了socket等待問題,兩者結(jié)合使得在局域網(wǎng)內(nèi)的多人游戲運(yùn)行比較流暢。關(guān)鍵詞:2D,DirectX,賽車,游戲AbstractDesign and Implementation of 2D Racing GameAbstractWith the popularity of computer games has become a major leisure activity for most young people , cars are
3、expensive , and racing games for those who want to play can play racing who had no opportunity to experience one. Hobby car racing game players to experience the game for fun stimulation , players only real purpose is the fastest .This design is realized racing game based on the C language design an
4、d development , the choice of the game engine is based on Directx8.0 written . Capable of racing, track and draw various pictures , sound effects to achieve a variety of games to get keyboard input, single- player game, with computer-controlled car racing , multiplayer games with other players or co
5、mputer AI racing .Compared with other similar games , collision detection algorithms used in the design , like the bounding rectangle box algorithm and color recognition algorithm , not only fast, but also detection sensitivity . Multiplayer is achieved by the socket network programming and multi-th
6、readed MS , socket provides reliable data transmission under C / S mode , multi-threaded socket waiting to solve the problem , a combination that makes the LAN multiplayer games run more smooth.Keywords : 2D, DirectX, racing, game PAGE 44計(jì)算機(jī)信息工程學(xué)院畢業(yè)設(shè)計(jì)說明書目 錄 TOC o 1-3 h z u HYPERLINK l _Toc389143550
7、第一章 緒論(xln) PAGEREF _Toc389143550 h 1 HYPERLINK l _Toc389143551 1.1研究(ynji)背景及意義 PAGEREF _Toc389143551 h 1 HYPERLINK l _Toc389143552 1.2賽車游戲(yux)開發(fā)環(huán)境和語言 PAGEREF _Toc389143552 h 1 HYPERLINK l _Toc389143553 1.3賽車游戲的主要功能 PAGEREF _Toc389143553 h 1 HYPERLINK l _Toc389143554 1.4賽車游戲開發(fā)的主要步驟 PAGEREF _Toc389
8、143554 h 2 HYPERLINK l _Toc389143555 第二章 DirectX、游戲引擎和游戲結(jié)構(gòu) PAGEREF _Toc389143555 h 3 HYPERLINK l _Toc389143556 2.1 DirectX概述 PAGEREF _Toc389143556 h 3 HYPERLINK l _Toc389143557 2.2游戲引擎 PAGEREF _Toc389143557 h 3 HYPERLINK l _Toc389143558 2.2.1選用的游戲引擎結(jié)構(gòu) PAGEREF _Toc389143558 h 4 HYPERLINK l _Toc389143
9、559 2.3游戲結(jié)構(gòu) PAGEREF _Toc389143559 h 5 HYPERLINK l _Toc389143560 2.4本章小結(jié) PAGEREF _Toc389143560 h 6 HYPERLINK l _Toc389143561 第三章 游戲邏輯 PAGEREF _Toc389143561 h 8 HYPERLINK l _Toc389143562 3.1游戲主邏輯 PAGEREF _Toc389143562 h 8 HYPERLINK l _Toc389143563 3.2單人游戲邏輯 PAGEREF _Toc389143563 h 9 HYPERLINK l _Toc38
10、9143564 3.3多人游戲邏輯 PAGEREF _Toc389143564 h 13 HYPERLINK l _Toc389143565 3.3.1多人游戲服務(wù)器端邏輯 PAGEREF _Toc389143565 h 13 HYPERLINK l _Toc389143566 3.3.2多人游戲客戶端邏輯 PAGEREF _Toc389143566 h 15 HYPERLINK l _Toc389143567 3.4顯示游戲勝利 PAGEREF _Toc389143567 h 15 HYPERLINK l _Toc389143568 3.5本章小結(jié) PAGEREF _Toc389143568
11、 h 16 HYPERLINK l _Toc389143569 第四章 賽車碰撞檢測(cè)技術(shù) PAGEREF _Toc389143569 h 17 HYPERLINK l _Toc389143570 4.1邊界矩形盒方法 PAGEREF _Toc389143570 h 17 HYPERLINK l _Toc389143571 4.2顏色識(shí)別算法 PAGEREF _Toc389143571 h 19 HYPERLINK l _Toc389143572 4.3本章小結(jié) PAGEREF _Toc389143572 h 24 HYPERLINK l _Toc389143573 第五章 Socket網(wǎng)絡(luò)通信
12、實(shí)現(xiàn)多人游戲 PAGEREF _Toc389143573 h 25 HYPERLINK l _Toc389143574 5.1 Socket簡(jiǎn)介 PAGEREF _Toc389143574 h 25 HYPERLINK l _Toc389143575 5.1.1什么是Socket PAGEREF _Toc389143575 h 25 HYPERLINK l _Toc389143576 5.1.2 Windows Socket編程模型(mxng) PAGEREF _Toc389143576 h 25 HYPERLINK l _Toc389143577 5.1.3游戲(yux)所使用的Socket
13、模型(mxng) PAGEREF _Toc389143577 h 31 HYPERLINK l _Toc389143578 5.2 粘包問題 PAGEREF _Toc389143578 h 32 HYPERLINK l _Toc389143579 5.2.1 粘包出現(xiàn)的原因 PAGEREF _Toc389143579 h 32 HYPERLINK l _Toc389143580 5.2.2 粘包問題解決辦法 PAGEREF _Toc389143580 h 33 HYPERLINK l _Toc389143581 5.2.3 關(guān)閉優(yōu)化算法 PAGEREF _Toc389143581 h 34 H
14、YPERLINK l _Toc389143582 5.3 多線程與Socket組合實(shí)現(xiàn)多人游戲 PAGEREF _Toc389143582 h 34 HYPERLINK l _Toc389143583 5.3.1 多線程的使用 PAGEREF _Toc389143583 h 34 HYPERLINK l _Toc389143584 5.3.2 多線程與socket的聯(lián)用 PAGEREF _Toc389143584 h 36 HYPERLINK l _Toc389143585 5.4 本章小結(jié) PAGEREF _Toc389143585 h 39 HYPERLINK l _Toc38914358
15、6 第六章 游戲調(diào)試及運(yùn)行 PAGEREF _Toc389143586 h 40 HYPERLINK l _Toc389143587 6.1 游戲程序的環(huán)境 PAGEREF _Toc389143587 h 40 HYPERLINK l _Toc389143588 6.2游戲運(yùn)行界面 PAGEREF _Toc389143588 h 40 HYPERLINK l _Toc389143589 結(jié)論 PAGEREF _Toc389143589 h 42 HYPERLINK l _Toc389143590 致謝 PAGEREF _Toc389143590 h 43 HYPERLINK l _Toc389
16、143591 參考文獻(xiàn) PAGEREF _Toc389143591 h 44計(jì)算機(jī)信息工程學(xué)院畢業(yè)設(shè)計(jì)說明書第一章 緒論(xln)1.1研究(ynji)背景及意義游戲可以(ky)鍛煉我們的大腦,提高大腦思維的敏捷性和靈活性,讓我們暫時(shí)拋開自己的煩惱,緩解現(xiàn)實(shí)生活給予我們的壓力。玩游戲可以讓我們適當(dāng)?shù)姆潘?,緩解精神疲勞。中?guó)的游戲產(chǎn)業(yè)在多年里迅猛的發(fā)展。一開始主要依靠國(guó)外代理,而現(xiàn)在自主研發(fā)的游戲已經(jīng)占了大部分的市場(chǎng)份額,現(xiàn)在的游戲產(chǎn)業(yè),在中國(guó)的經(jīng)濟(jì)發(fā)展中發(fā)揮著不可替代的作用。隨著國(guó)際國(guó)內(nèi)的游戲產(chǎn)業(yè)的發(fā)展,三維游戲逐漸成為游戲市場(chǎng)中的主要形式,但2D游戲因?yàn)樽约旱莫?dú)特的優(yōu)點(diǎn)并沒有退出人們的視野,
17、反而在網(wǎng)頁游戲、娛樂休閑游戲等領(lǐng)域快速的發(fā)展。和歐美、日韓游戲產(chǎn)業(yè)發(fā)展比較成熟的國(guó)家相比,中國(guó)的3D技術(shù)并不成熟,很多游戲公司的精力主要放在技術(shù)方面的處理,想盡量模仿國(guó)外優(yōu)秀游戲的處理技術(shù),而且3D游戲的投資比較大,只有一小部分大型公司有實(shí)力進(jìn)行開發(fā)。與此相對(duì)的是,因?yàn)?D游戲的技術(shù)處理難度比較低,游戲公司不僅可以將精力放在技術(shù)處理方面,還可以多花些精力在游戲策劃方面,以豐富游戲的內(nèi)容,它的整體開發(fā)周期短,投入的資金少得多,這些優(yōu)點(diǎn)使得2D游戲非常適合在中國(guó)發(fā)展。從中國(guó)游戲玩家的反應(yīng)來看,3D游戲的吸引力比2D游戲強(qiáng)的多,玩家都更加喜歡畫面質(zhì)量?jī)?yōu)秀的游戲。大多數(shù)2D游戲通常比較輕松、休閑、操作
18、難度低,并且對(duì)硬件和系統(tǒng)沒什么要求,非常適合那些喜歡休閑娛樂、交友的人?,F(xiàn)在的2D游戲中也利用不少的3D處理技術(shù)來優(yōu)化游戲畫面,如粒子系統(tǒng)、水波特效、爆炸特效等。所以,中國(guó)的2D游戲還是有比較好的發(fā)展前途的,尤其是在手機(jī)游戲中,在電腦游戲里也不會(huì)被取代,因此,2D游戲的開發(fā)是我們值得關(guān)注和研究的問題。1.2賽車游戲開發(fā)環(huán)境和語言本設(shè)計(jì)所用的語言是C語言實(shí)現(xiàn)的,軟件使用的是VC+6.0,還要Directx8.0。DirectX是微軟公司開發(fā)的基于Windows系統(tǒng)的多媒體編程接口,編寫的語言是C+,并且遵循COM。它可以提高在window平臺(tái)運(yùn)行的游戲或者多媒體程序的運(yùn)行速度,有很強(qiáng)的3D圖像處
19、理能力,并且支持2D3D圖形加速。使得開發(fā)人員在創(chuàng)建3D場(chǎng)景時(shí)不需要考慮硬件的類型,只需要通過Direct3D調(diào)用設(shè)備接口就可以操作圖形設(shè)備,簡(jiǎn)化了游戲開發(fā)難度。1.3賽車游戲的主要功能本設(shè)計(jì)可實(shí)現(xiàn)較真實(shí)的游戲音效、鍵盤接口、局域網(wǎng)內(nèi)通信等功能。所設(shè)計(jì)的游戲可以進(jìn)行兩種類型的游戲即單人和多人游戲,游戲包括賽車創(chuàng)建、賽道載入、碰撞檢測(cè)、控制在跑賽車、賽車數(shù)據(jù)處理。單人游戲中有電腦控制的賽車可以與玩家進(jìn)行賽車,多人游戲是可以各自控制賽車,在不同的賽道上有不同的速度,第一個(gè)到終點(diǎn)勝利。編譯通過或找出查出的問題,進(jìn)行最終調(diào)試,完成游戲。1.4賽車(si ch)游戲開發(fā)(kif)的主要步驟(bzhu)本
20、游戲利用現(xiàn)在比較常用的Visual C+ 6.0工具,基于DirectX 8.0,用C語言實(shí)現(xiàn),進(jìn)行系統(tǒng)的分析,從玩家的角度去思考,怎么實(shí)現(xiàn)開賽車時(shí)的快感與激情。實(shí)現(xiàn)賽車的控制、賽道載入、碰撞檢測(cè)、賽車數(shù)據(jù)處理和多人游戲等。主要步驟為:(1)設(shè)計(jì)并畫游戲的場(chǎng)景;(2)設(shè)計(jì)界面;(3)游戲邏輯的設(shè)計(jì)與實(shí)現(xiàn);(4)游戲功能模塊設(shè)計(jì)與實(shí)現(xiàn);(5)游戲測(cè)試;第二章 DirectX、游戲(yux)引擎和游戲結(jié)構(gòu)DirectX是PC平臺(tái)上開發(fā)游戲的事實(shí)上的標(biāo)準(zhǔn),而游戲引擎能使開發(fā)游戲的工作量大大的減少,本畢業(yè)設(shè)計(jì)所使用的游戲引擎是在Directx8.0上編寫的。下面是Directx8.0、游戲引擎的一些(
21、yxi)介紹。2.1 DirectX概述(i sh)Microsoft公司的DirectX是一個(gè)多媒體應(yīng)用編程接口,它實(shí)際上是一種軟件系統(tǒng),抽象出音頻、輸入、視頻、網(wǎng)絡(luò)以及安裝等內(nèi)容,由C+語言實(shí)現(xiàn),遵循COM(組件對(duì)象模型)。你可以使用相同的代碼,而不管計(jì)算機(jī)的具體硬件配置怎么樣。另外,DirectX比Windows系統(tǒng)自帶的GDI要快很多,而且系統(tǒng)更穩(wěn)定。DirectX的主要組件有DirectDraw、DirectGraphic、DirectInput、DirectPlay、DirectMusic和DirectSound。不同的API負(fù)責(zé)完成DirectX內(nèi)核中不同的功能。DirectX中
22、的每個(gè)API都可以通過硬件加速。這意味著只要是DirectX支持的硬件,都可以用程序訪問到,而不用關(guān)心它的具體實(shí)現(xiàn)。下面是它的主要組件和功能:DirectDraw:主要負(fù)責(zé)2D圖像加速,所有圖像的繪制都要用到它,因此它是十分重要的。在8.0之后的版本已沒有了。DirectGraphic:主要負(fù)責(zé)向屏幕上渲染二維圖形和三維圖形。它實(shí)際是DirectDraw和Direct3D合并起來的。DirectInput:它可以直接使用所有與計(jì)算機(jī)關(guān)聯(lián)的輸入設(shè)備。這些設(shè)備包括鍵盤、鼠標(biāo)、游戲控制桿、操作桿、空間定位球等設(shè)備。重要的是,DirectInput可以和所有現(xiàn)在的或?qū)淼妮斎朐O(shè)備對(duì)話。DirectPl
23、ay:可以通過因特網(wǎng)、調(diào)制解調(diào)器或直接連接來建立抽象的連接。DirectMusic:支持MIDI。DirectSound:聲音組件,支持?jǐn)?shù)字化聲音(WAV),但不支持MIDI。DirectX目前已經(jīng)發(fā)展到到DirectX12,一開始,DirectX 1很不成功,當(dāng)?shù)搅薉irectX 8時(shí),它引發(fā)了顯卡革命,引入像素渲染概念。DirectX 11增加了新的計(jì)算shader技術(shù),它允許GPU從事更多的計(jì)算工作,而不僅是3D運(yùn)算,這可以將GPU作為并行處理器使用。DirectX 11還支持tessellation鑲嵌化技術(shù),這有助于開發(fā)人員創(chuàng)建更為細(xì)膩流暢的模型,實(shí)現(xiàn)高質(zhì)量實(shí)時(shí)渲染和預(yù)渲染場(chǎng)景。Di
24、rectX 11另外一大亮點(diǎn)是可以更好地利用多線程資源,從而使游戲更有效地利用多核處理器。目前,已更新到DirectX12, 毫無疑問DirectX給游戲業(yè)帶來了巨大的發(fā)展。 2.2游戲(yux)引擎游戲引擎是游戲中與游戲具體實(shí)現(xiàn)無關(guān)的核心技術(shù)部分,可以說是游戲的心臟,而游戲的部分就是場(chǎng)景模型、角色模型、動(dòng)畫、聲音(shngyn)等其他控制部分。經(jīng)過幾十年不斷的發(fā)展,現(xiàn)在的游戲引擎已經(jīng)發(fā)展成一個(gè)由多個(gè)子系統(tǒng)共同構(gòu)成的復(fù)雜系統(tǒng)。游戲引擎就是為了降低游戲開發(fā)者們重復(fù)勞動(dòng),節(jié)省開發(fā)時(shí)間和開發(fā)費(fèi)用而誕生的,它封裝了很多在游戲制作中常用的功能,讓我們(w men)能直接調(diào)用這些功能而不用再從頭編寫。下面
25、是游戲引擎主要的結(jié)構(gòu)。2.2.1選用的游戲引擎結(jié)構(gòu)畢業(yè)設(shè)計(jì)所設(shè)計(jì)的賽車游戲中所使用的的游戲引擎由3個(gè)庫函數(shù)組成:T3DLIB1、T3DLIB2、T3DLIB3。1、T3DLIB1:這是一個(gè)相當(dāng)簡(jiǎn)單的二維8/16位色,并具有后備緩沖的Directx引擎,支持任何分辨率,并且不在意是否為窗口模式。主要包含:(1)Direct接口函數(shù)如:DDraw_Init(int width, int height, int bpp, int windowed=0):?jiǎn)?dòng)并初始化DirectDraw,可以選擇任何分辨率和顏色色深,windowed為0表示全屏,若想為窗口模式,應(yīng)置1,并且不可選擇分辨率和顏色深度。
26、DDraw_Shutdown(void):關(guān)閉Directdraw并釋放所有接口。DDraw_Attach_Clipper()給發(fā)送的表面關(guān)聯(lián)一個(gè)裁剪器等等。(2)2D多邊形函數(shù)包含點(diǎn)、線、多邊形的繪制以及繪制GDI文字等。(3)數(shù)學(xué)和誤差函數(shù)包含計(jì)算兩點(diǎn)間的距離、打開誤差文件等。(4)位圖函數(shù)包括加載位圖函數(shù)、釋放位圖函數(shù)、創(chuàng)建內(nèi)存位圖、繪制位圖等(5)調(diào)色板函數(shù)這些函數(shù)只用于256色,即8位模式,包含讀取調(diào)色板函數(shù)、更新調(diào)色板、保存調(diào)色板等。(6)實(shí)用工具函數(shù)如Get_Clock()、Start_Clock()等時(shí)間函數(shù)以及矩形碰撞檢測(cè)和顏色檢測(cè)函數(shù)。(7)BOB對(duì)象(類似精靈)及其處理函
27、數(shù)包含對(duì)BOB操作的各種函數(shù)。2、T3DLIB2:輸入系統(tǒng)。此系統(tǒng)比較簡(jiǎn)單主要功能如下:(1)初始化DirectInput系統(tǒng)。(2)設(shè)置并獲取鍵盤、鼠標(biāo)、游戲桿。(3)從輸入(shr)設(shè)備中讀取數(shù)據(jù)。(4)關(guān)閉(gunb)設(shè)備。3、T3DLIB3:聲音(shngyn)控制。包含DirectSound和DirectMusic:(1)DirectSound實(shí)現(xiàn).wav格式的波形聲音數(shù)據(jù)的播放控制,它的API封裝功能如下:DirectSound的初始化及關(guān)閉。用11kHz、8聲道載入.WAV文件。播放加載的聲音文件。停止播放。檢測(cè)聲音的播放狀態(tài)。改變音量、回放速率或立體聲的聲道平衡。刪除聲音數(shù)據(jù)。
28、(2)DirectMusic實(shí)現(xiàn)MIDI文件的播放控制,其API封裝功能如下:DirectMusic的初始化及關(guān)閉。加載MIDI文件。播放MIDI文件。停止正在播放的MIDI文件。檢測(cè)聲音播放狀態(tài)。如果DirectSound已被初始化,則自動(dòng)連接DirectSound。刪除MIDI。2.3游戲結(jié)構(gòu)所有的游戲本質(zhì)上是一個(gè)持續(xù)不斷的while循環(huán),它執(zhí)行邏輯并在屏幕上不間斷的繪制更新圖像,通常以3060幀每秒速度不斷的繪制,本設(shè)計(jì)所實(shí)現(xiàn)的賽車游戲也是如此,但圖像是以30幀每秒的速度繪制。本設(shè)計(jì)所實(shí)現(xiàn)的賽車游戲流程如圖2-1,下面是游戲的每個(gè)子流程的說明。WinMian()CreateWindow(
29、);GameInit();主事件循環(huán)Game_Shutdown();GameInit()WinProc()Process MessagesGame_mian()Game_Shutdown()Game_main()輸入人工智能和邏輯.渲染圖2-1 游戲(yux)程序(chngx)流程(lichng)圖(1)Game_Init()初始化在這一部分中,游戲執(zhí)行初始化操作,此賽車游戲主要的初始化工作有對(duì)三角函數(shù)、DirectDraw、DirectSound、DirectInput的初始化、鍵盤的初始化、聲音的載入、創(chuàng)建裁剪器、游戲開始畫面載入與繪制、各個(gè)位圖(包括賽車、終點(diǎn)、賽道、指示燈、菜單畫面)的
30、載入。(2)Game_main()這一部分是游戲的主要部分,包括獲取玩家的輸入信息、執(zhí)行人工智能、游戲邏輯、繪制。(3)Game_Shutdown ()此部分是在退出游戲循環(huán)后執(zhí)行的,用來釋放資源。先釋放各種位圖資源(如賽車、終點(diǎn)、指示燈等),再將DirectDraw對(duì)象釋放掉,這兩個(gè)的順序不能搞錯(cuò),刪除所有聲音,釋放DirectSound對(duì)象,釋放鍵盤設(shè)備。2.4本章小結(jié)本章主要介紹了DirectX8.0、游戲引擎和游戲基本結(jié)構(gòu)。在列舉的Directx8.0的主要組件中,DirectDraw、DirectInput、DirectMusic和DirectSound是和本畢業(yè)設(shè)計(jì)所設(shè)計(jì)的游戲相關(guān)
31、的,并且是選用的游戲引擎的基礎(chǔ)。所列出的游戲引擎中的功能模塊是本畢業(yè)設(shè)計(jì)主要用到的,是實(shí)際編寫過程中必須要調(diào)用的部分。本設(shè)計(jì)的游戲的基本結(jié)構(gòu)與其他游戲類似,本質(zhì)上就是一個(gè)持續(xù)不斷的while循環(huán),它執(zhí)行邏輯,并根據(jù)邏輯計(jì)算出下一幀圖像,并在屏幕上不間斷的繪制更新圖像。游戲最終表現(xiàn)出來的就是一幀又一幀連續(xù)的畫面,本設(shè)計(jì)所要做的就是在循環(huán)中,不斷的獲取鍵盤的輸入,根據(jù)輸入執(zhí)行游戲邏輯,生成下一個(gè)游戲動(dòng)畫幀,最后渲染該動(dòng)畫幀。第三章 游戲(yux)邏輯3.1游戲(yux)主邏輯游戲(yux)主邏輯如圖21所示。圖21 游戲主邏輯流程圖開始時(shí)鐘,將后備緩沖填充黑色,依據(jù)game_state的值選擇相應(yīng)
32、的功能,game_state值類型有GAME_STATE_INIT(初始狀態(tài))、GAME_STATE_MENU(菜單選擇)、GAME_STATE_RUNNING(游戲進(jìn)行)、GAME_STATE_EXIT(退出)、GAME_STATE_WAIT_EXIT(等待退出)。如果game_state為GAME_STATE_INIT為游戲初始狀態(tài),停止準(zhǔn)備音樂,將game_state置GAME_STATE_MENU,并重置游戲數(shù)據(jù),進(jìn)入菜單選擇界面,讀取鍵盤鍵值,上、下移動(dòng)箭頭,Enter為確認(rèn)選擇,若為單人游戲或多人游戲則將當(dāng)前狀態(tài)置為GAME_STATE_RUNNING,將游戲種類置為當(dāng)前值,退出選
33、項(xiàng)與Escape鍵為退出,當(dāng)為可識(shí)別鍵時(shí),播放按鍵音,然后將菜單選擇界面與箭頭繪制在后備緩沖表面,換頁,并等待100毫秒,等待時(shí)間不宜太短,否則會(huì)出現(xiàn)連擊的現(xiàn)象。當(dāng)game_state為GAME_STATE_RUNNING時(shí)為游戲進(jìn)行時(shí),之后(zhhu)判斷game_type的值,GAME_TYPE_SINGLEPLAYER為單人模式(msh),GAME_TYPE_MULTIPLAYER為多人游戲(yux),GAME_TYPE_WIN為勝利狀態(tài),換頁,并等待30ms。期間如果檢測(cè)到Escape鍵,則將game_state置為GAME_STATE_MENU,并重置游戲數(shù)據(jù)。當(dāng)game_state
34、為GAME_STATE_EXIT為游戲退出狀態(tài),則將game_state置GAME_STATE_WAIT_EXIT(游戲退出等待狀態(tài)),發(fā)送消息WM_DESTROY,之后將進(jìn)入退出等待階段,期間游戲不進(jìn)行操作,等待退出。3.2單人游戲邏輯單人游戲的總的游戲邏輯如圖2-2所示。圖2-2 單人游戲流程圖具體模塊如下:(1)判斷準(zhǔn)備判斷(pndun)gameready是否(sh fu)為3,若為3,則讀取鍵值,若不為3,將當(dāng)前的gameready的值賦給指示燈當(dāng)前(dngqin)動(dòng)畫幀light.curr_frame,等待一秒鐘,播放準(zhǔn)備聲音,gameready自加,并將0號(hào)車的狀態(tài)改為玩家狀態(tài)。之
35、后對(duì)讀取的鍵值進(jìn)行相應(yīng)的操作,上鍵為打開引擎前進(jìn),左鍵與右鍵改變方向。(2)賽車數(shù)據(jù)處理這一部分是關(guān)鍵部分,決定了賽車的具體位置、引擎聲音以及各種狀態(tài)。賽車是BOB對(duì)象,本部分分別對(duì)各個(gè)對(duì)象進(jìn)行數(shù)據(jù)處理。首先對(duì)按鍵所產(chǎn)生的信號(hào)和AI所產(chǎn)生的信號(hào)進(jìn)行處理,無論信號(hào)是來自接受來自輸入或AI算法,他們對(duì)賽車對(duì)象所產(chǎn)生的變化是同一種類型,所以處理時(shí),只要根據(jù)賽車對(duì)象的內(nèi)部數(shù)據(jù)執(zhí)行相應(yīng)的改變,如果引擎打開,則提高當(dāng)前速度(不超過最大速度),并提高引擎發(fā)聲頻率,若引擎關(guān)閉,則減小引擎發(fā)聲頻率,方向向哪個(gè)方向變,則將相應(yīng)的加或減相應(yīng)的方向數(shù)值。第二步算出賽車在X和Y方向上這一幀的位移變化,進(jìn)行碰撞檢測(cè),因?yàn)?/p>
36、賽車之間只能進(jìn)行一次檢測(cè),所以,將當(dāng)前賽車與之后的賽車進(jìn)行碰撞檢測(cè),若檢測(cè)到碰撞,則將位移大的賽車減小位移,將位移小的增加位移,之后重新算出賽車的速度以及方向,查三角函數(shù)表,找出與賽車實(shí)際方向最接近的表中方向,并將該方向值賦給賽車方向。第三步,將賽車在世界坐標(biāo)中的位置加上位移變化得出當(dāng)前的位置坐標(biāo),并進(jìn)行越界檢測(cè),若賽車超出世界范圍,則強(qiáng)制將賽車位置約束在范圍之內(nèi)。(3)移動(dòng)窗口位置這一部分的功能是為保證主視角以玩家控制的賽車為中心,但不超過世界范圍10001000。窗口在世界中有它的坐標(biāo),窗口坐標(biāo)在360520范圍之內(nèi),不可超出此范圍,當(dāng)賽車超出窗口中心時(shí),窗口坐標(biāo)則移動(dòng)以確保賽車在中心處,
37、中心范圍為x坐標(biāo)在200到240,y坐標(biāo)在160到320。(4)繪制賽道賽道的繪制一定要在顏色識(shí)別之前進(jìn)行,不然,顏色識(shí)別將無法進(jìn)行。本游戲的賽道種類共有10種,外加一個(gè)草地,形成游戲的地形,每個(gè)位圖大小為200200大小。世界地形是存儲(chǔ)在一個(gè)二維字符數(shù)組里,此字符數(shù)組內(nèi)字符種類為09和g,09代表各個(gè)種類的賽道,g代表草地,字符數(shù)組的存儲(chǔ)如下所示:char *world5=61117,02g30,0ggg0,05g40,91118,;賽道在游戲(yux)世界里的排列如圖2-3所示。圖2-3 賽道顯示圖由圖中可以看到有些位圖完全在窗口內(nèi),有些完全在窗口外,有些部分在窗口內(nèi),有兩種方法可以將位圖
38、繪制(huzh)在后備緩沖表面,下面是兩種方法:第一種方法(fngf):可以將所有位圖直接繪制在后備緩沖表面,賽道對(duì)象為road,這是一個(gè)BOB對(duì)象,其中存儲(chǔ)了10張賽道位圖,可遍歷字符數(shù)組,因?yàn)槊繌垐D在世界中的坐標(biāo)可以算出,都為200的倍數(shù),在由世界坐標(biāo)算出他在窗口的坐標(biāo),之后,調(diào)用Draw_BOB(&road,lpddsback),將位圖繪制進(jìn)后備緩沖表面,在這里,將重復(fù)調(diào)用road和grass對(duì)象進(jìn)行繪制,因?yàn)镈raw_BOB的繪制是采用DirectDraw中的blt()函數(shù),它支持硬件加速,所以,即使繪制的位圖看不見或數(shù)量多一點(diǎn),也不會(huì)影響速度。第二種方法:因?yàn)橹灰粓D在窗口內(nèi)就要進(jìn)行
39、繪制,所以將窗口坐標(biāo)對(duì)200進(jìn)行整除就能得到對(duì)應(yīng)的數(shù)組位置,代碼如下:x_l=view_x/200;/左側(cè)位圖在數(shù)組的x位置x_r=(view_x+639)/200;/ 右側(cè)位圖在數(shù)組的x位置y_t=view_y/200;/ 上側(cè)位圖在數(shù)組的y位置y_b=(view_y+479)/200;/ 下側(cè)位圖在數(shù)組的y位置然后依據(jù)上述值,將所選中的位圖blt到后備緩沖表面。(5)實(shí)行AI算法AI算法是對(duì)所有非玩家控制的賽車進(jìn)行的,首先,當(dāng)gameready信號(hào)為3時(shí),打開引擎,之后對(duì)賽車左右兩邊30度距離賽車中心60像素的區(qū)域進(jìn)行顏色識(shí)別,若為綠色,那么將方向變化改為相反方向,最后進(jìn)行邊界檢測(cè)。(6)
40、檢測(cè)摩擦力路面摩擦力為0.15,草地摩擦力為0.19,并且,當(dāng)賽車在草地行駛時(shí),摩擦力會(huì)達(dá)到0.34,所以在路面行駛的加速度會(huì)比草地的加速度大,而且,路面速度的最大值比草地的最大值要大,實(shí)際行駛時(shí),在路面行如風(fēng),而在草地則非常(fichng)慢,這是為了不讓玩家從草地走。(7)繪制各種( zhn)物體以及賽車這一部分十分簡(jiǎn)單,就是調(diào)用Draw_BOB將地圖上的各個(gè)物體繪制上去,包括(boku)終點(diǎn)、賽車、紅綠燈,這些物體都要先計(jì)算在窗口的位置,之后繪制。(8)判斷勝負(fù)本游戲的勝負(fù)判斷一定要依次通過地圖上的6個(gè)區(qū)域,這是為了讓玩家走完全程,因?yàn)榇速愜囉螒虻馁惖朗且粋€(gè)環(huán)狀賽道,所以,終點(diǎn)也是起點(diǎn),
41、勝負(fù)判斷也是判斷誰先走完一圈,其中,終點(diǎn)與起點(diǎn)的判別是一樣的,而其余四種則是判斷是否走過賽道的四個(gè)角落,這四種的判別十分容易,這里不做說明,由于賽車可以繞過起點(diǎn)線,在草地上行駛,所以要判斷賽車是向上穿過終點(diǎn)或起點(diǎn),判斷穿過只需判斷賽車中心進(jìn)入終點(diǎn),而要確保賽車向上穿過可以同時(shí)判斷賽車此時(shí)的方向是否向上。當(dāng)賽車依次通過這6個(gè)區(qū)域,就將當(dāng)時(shí)賽車的排名記錄下來,保存在此時(shí)的賽車對(duì)象里,當(dāng)有三輛賽車經(jīng)過終點(diǎn),則將game_type賦值GAME_TYPE_WIN,進(jìn)入游戲勝利模塊。3.3多人游戲邏輯多人游戲的實(shí)現(xiàn)是靠Socket網(wǎng)絡(luò)編程實(shí)現(xiàn)的,它分為服務(wù)器端和客戶端,這兩個(gè)的游戲邏輯不一樣。主要的游戲數(shù)
42、據(jù)處理都在服務(wù)器端進(jìn)行,并且進(jìn)行發(fā)送數(shù)據(jù)和顯示等操作,而客戶端則接收數(shù)據(jù)并發(fā)送用戶所控制的賽車的引擎狀態(tài)和方向變化等信息。3.3.1多人游戲服務(wù)器端邏輯多人游戲服務(wù)器端流程如圖2-4所示。圖2-4 多人游戲服務(wù)器端流程各個(gè)模塊的功能如下:1、創(chuàng)建線程創(chuàng)建一個(gè)(y )主線程,用來對(duì)Socket的設(shè)置,創(chuàng)建其他線程用來接收或發(fā)送數(shù)據(jù)。2、鏈接(lin ji)界面這部分是顯示(xinsh)當(dāng)前鏈接上的玩家,在屏幕上顯示player x in,并不斷地發(fā)送給相應(yīng)玩家對(duì)應(yīng)的賽車號(hào)碼,若檢測(cè)到有玩家鏈接,則將下一個(gè)賽車控制權(quán)轉(zhuǎn)交到新連接的玩家手中,直到服務(wù)器端玩家按下回車鍵,之后向所有玩家發(fā)出游戲開始信號(hào)
43、,客戶端接收到信號(hào)后開始游戲。3、游戲進(jìn)行此部分與單人游戲相似,詳情可以參照?qǐng)D2-5,不同之處在兩處,下面是不同之處:(1)在檢測(cè)摩擦力之后進(jìn)行的是發(fā)送數(shù)據(jù),將各個(gè)玩家控制的賽車數(shù)據(jù)發(fā)給相應(yīng)玩家,如賽車的車號(hào)、坐標(biāo)、引擎狀態(tài)、方向。(2)在判斷勝負(fù)部分里,當(dāng)有賽車走完一圈時(shí),向所有玩家發(fā)送這輛賽車的車號(hào)以及名次,當(dāng)有三輛賽車到達(dá)終點(diǎn)時(shí),向所有玩家發(fā)送游戲結(jié)束信號(hào)。圖2-5 服務(wù)器端游戲運(yùn)行流程3.3.2多人游戲(yux)客戶端邏輯客戶端的游戲流程與服務(wù)器端類似,可參見圖2-4,但具體實(shí)現(xiàn)上有很大差別,下面(xi mian)是客戶端各個(gè)模塊的功能:1、創(chuàng)建(chungjin)線程創(chuàng)建一個(gè)主線程,
44、用來對(duì)Socket的設(shè)置,用來接收或發(fā)送數(shù)據(jù)。2、鏈接界面這部分是顯示當(dāng)前鏈接上的玩家的狀態(tài),如果連接上在屏幕上顯示player x in,如果沒有鏈接上,就不顯示。3、游戲進(jìn)行這一部分只依次進(jìn)行判斷準(zhǔn)備、接收輸入信號(hào)、賽車數(shù)據(jù)處理、移動(dòng)窗口、發(fā)送數(shù)據(jù)和繪圖,其中移動(dòng)窗口是以當(dāng)前玩家所控制的賽車為主視角,賽車數(shù)據(jù)處理只進(jìn)行賽車聲音以及方向的處理,勝負(fù)判斷是依據(jù)服務(wù)器發(fā)送過來的信號(hào)進(jìn)行的。具體流程如圖2-6所示。判斷準(zhǔn)備賽車數(shù)據(jù)處理移動(dòng)窗口位置繪制賽道繪制各種物體以及賽車判斷勝負(fù)發(fā)送數(shù)據(jù)圖2-6 客戶端游戲運(yùn)行流程3.4顯示游戲勝利當(dāng)游戲判斷結(jié)束時(shí),游戲?qū)?zhí)行這部分,此部分執(zhí)行時(shí),游戲畫面將不動(dòng)
45、,并在畫面上打出信息。第一行根據(jù)不同的名次打出不同的信息,如果是第一名將顯示Y O U W I N字樣,而第2、3名顯示具體的名次,如“N U M 2”,如果是第四名則顯示“Y O U f A I L”字樣。第二行打出“PRESS ”,按下Escape鍵,則進(jìn)入菜單選擇界面,并將游戲數(shù)據(jù)初始化。3.5本章(bn zhn)小結(jié)本章主要介紹了賽車游戲的游戲邏輯,其中包含好幾個(gè)部分,如單人游戲邏輯和多人游戲邏輯,游戲邏輯至關(guān)重要,因?yàn)樗鼘⒕唧w實(shí)現(xiàn)游戲各個(gè)方面的內(nèi)容,如具體的圖片繪制以及繪制順序、勝負(fù)(shn f)判別等等,游戲邏輯是運(yùn)用游戲引擎提供的一些方法并將其有序的組織起來來具體實(shí)現(xiàn)游戲的。第四
46、章 賽車(si ch)碰撞檢測(cè)技術(shù)碰撞檢測(cè)是賽車游戲設(shè)計(jì)中最關(guān)鍵(gunjin)的一項(xiàng)技術(shù),一個(gè)好的碰撞檢測(cè)往往會(huì)使游戲變得更真實(shí),而粗略的碰撞算法會(huì)出現(xiàn)許多bug使玩家無法玩下去。在此畢業(yè)設(shè)計(jì)所實(shí)現(xiàn)的賽車游戲中,涉及到的碰撞檢測(cè)共有兩種,第一種是邊界矩形盒方法,第二種是顏色識(shí)別算法,下面將分別介紹。4.1邊界矩形(jxng)盒方法邊界矩形盒方法是檢測(cè)兩個(gè)矩形是否重疊的方法,矩形可以代表任何東西,在這里代表賽車,你必須給出他們的左上角坐標(biāo)以及高度和寬度,如果有重疊,則返回TRUE,否則返回FALSE。下面是它的代碼:int Collision_Test(int x1, int y1, int
47、w1, int h1, int x2, int y2, int w2, int h2) / this function tests if the two rects overlap/ get the radi of each rectint width1 = (w11) - (w13);int height1 = (h11) - (h13);int width2 = (w21) - (w23);int height2 = (h21) - (h23);/ compute center of each rectint cx1 = x1 + width1;int cy1 = y1 + height1
48、;int cx2 = x2 + width2;int cy2 = y2 + height2;/ compute deltasint dx = abs(cx2 - cx1);int dy = abs(cy2 - cy1);/ abs()是取絕對(duì)值/ test if rects overlapif (dx (width1+width2) & dy (height1+height2) return(1);else/ else no collisionreturn(0); / end Collision_Test這個(gè)函數(shù)實(shí)現(xiàn)的基本思想是分別(fnbi)計(jì)算兩個(gè)矩形的中心坐標(biāo),然后根據(jù)中心坐標(biāo)的x和y軸
49、的距離判斷兩個(gè)矩形是否重疊。如果兩個(gè)矩形相交,如圖3-1所示。XY矩形1矩形2圖3-1 兩矩形(jxng)相交設(shè)這兩個(gè)矩形(jxng)的各個(gè)數(shù)據(jù)和函數(shù)的參數(shù)一樣,頂點(diǎn)坐標(biāo)為(x1,y1)和(x2,y2),矩形1的寬為w1,高為h1,矩形2的寬為w2,高為h2,那么兩矩形的中點(diǎn)坐標(biāo)為(x1+w1/2,y1+h1/2),(x2+w2/2,y2+h2/2),因?yàn)檫@兩個(gè)矩形相交,所以,他們的中點(diǎn)坐標(biāo)必有如下關(guān)系:|x1+w1/2-(x2+w2/2)|(w1+w2)/2并且|y1+h1/2-(y2+h2/2)|1) - (w13);int height1 = (h11) - (h13);int widt
50、h2 = (w21) - (w23);int height2 = (h21) - (h23);其中,width1為八分之三w1,并不是本系統(tǒng)所用的二分之一,這是因?yàn)榇撕瘮?shù)通常用于位圖的碰撞檢測(cè),而位圖是以長(zhǎng)方形載入的,且物體的圖像通常在長(zhǎng)方形的中央,但不會(huì)占滿整個(gè)長(zhǎng)方形,如圖3-2所示,圖3-2 賽車(si ch)位圖資源賽車實(shí)體與矩形是有區(qū)別(qbi)的,雖然本系統(tǒng)所列的判別方法可以準(zhǔn)確判斷(pndun)矩形重疊,但當(dāng)判斷重疊時(shí),屏幕上所顯示的物體并沒有發(fā)生碰撞,而上述函數(shù)所用的方法雖然不準(zhǔn)確(實(shí)際矩形重疊但檢測(cè)不出來),但在游戲運(yùn)行時(shí),實(shí)際看上去效果會(huì)好很多,也更加真實(shí),所以用八分之三比用
51、二分之一要好。還有一點(diǎn)“(w11) - (w13)”就是w1*3/8,但為什么要這么麻煩呢?這主要是考慮到執(zhí)行速度,位移與加減法比做乘除法要快的多,游戲要考慮到速率,所以,盡量用快速的方法。4.2顏色識(shí)別算法顏色識(shí)別算法在此游戲中被頻繁用到,這是一個(gè)非常好用的算法,它沒有非常復(fù)雜的原理,只是讀出顏色值,然后進(jìn)行判別,它的速度也很快,對(duì)在窗口內(nèi)的碰撞檢測(cè)十分有效,下面是它的具體實(shí)現(xiàn):int Color_Scan(int x1, int y1, int x2, int y2, UCHAR scan_start, UCHAR scan_end, UCHAR *scan_buffer, int sca
52、n_lpitch)/ this function implements a crude collision technique/ based on scanning for a range of colors within a rectangle if (x1 = screen_width) x1=screen_width-1;elseif (x1 = screen_width) x2=screen_width-1;elseif (x2 = screen_height) y1=screen_height-1;elseif (y1 = screen_height) y2=screen_heigh
53、t-1;elseif (y2 0) y2=0;/ scan the regionscan_buffer +=y1*scan_lpitch;for (int scan_y=y1; scan_y=y2; scan_y+) for (int scan_x=x1; scan_x= scan_start & scan_bufferscan_x = scan_end ) return(1); / end for x / move down a line scan_buffer+=scan_lpitch; / end for y/a=scan_bufferx2;/sprintf(s,%d,a);/Draw_
54、Text_GDI(s,8,8,RGB(255,255,255),lpddsback);/ return failurereturn(0); / end Color_Scan這個(gè)函數(shù)(hnsh)使用時(shí)須要的參數(shù)有很多,如下:1、需要掃描(somio)的區(qū)域,掃描區(qū)域是一個(gè)矩形,需要傳入矩形的左上頂點(diǎn)坐標(biāo)和右下頂點(diǎn)坐標(biāo),即參數(shù)列表中的x1,y1,x2,y2。2、需要給出要尋找(xnzho)的顏色值范圍即 scan_start和 scan_end,這是8位模式下的狀態(tài),它的數(shù)據(jù)也是應(yīng)該是8位索引值,而UCHAR是8位,函數(shù)會(huì)在尋找范圍里尋找從scan_start到 scan_end的顏色,如果找到則
55、返回1,否則返回0。3、UCHAR *scan_buffer是要傳入一個(gè)指向表面的指針,通常是指向后備緩沖表面的指針,因?yàn)橹鞅砻嫱ǔJ沁M(jìn)過換頁而來的,換頁是與后備緩沖表面交換的,即主表面顯示的是當(dāng)時(shí)的前一幀的狀態(tài),無法對(duì)當(dāng)前狀況作出反應(yīng),所以,不用主表面進(jìn)行顏色識(shí)別,而掃描離屏表面沒有任何意義,因?yàn)殡x屏表面是儲(chǔ)存位圖的表面,所以也不用離屏表面,繪圖的實(shí)際操作是在后備緩沖表面上進(jìn)行的,所以,通常傳入指向后備緩沖表面的指針。4、int scan_lpitch,這個(gè)(zh ge)參數(shù)通常傳入的是lPitch(或back_lpitch,這兩個(gè)的只是一樣的),即你所在顯示模式的水平內(nèi)存間距。如圖3-3所
56、示,lPitch是該顯示模式中每行上的字?jǐn)?shù),也被稱為步幅(stride)或內(nèi)存寬度(memory width)。這個(gè)參數(shù)(cnsh)也可以傳入一個(gè)具體的值,如果當(dāng)時(shí)的顯示模式是6404808,那么,該模式下每行有640個(gè)像素,每個(gè)像素為8位(或者說一個(gè)字節(jié)),因此(ync),實(shí)際每行應(yīng)該恰為640個(gè)字節(jié),即傳入的值為640,如果在64048016模式下,傳入的值是1280(每像素2個(gè)字節(jié)為6402)。雖然可以傳入一個(gè)具體的值,但這確有一定危險(xiǎn),lPitch可以是任何值,視VRAM布局而定。因此當(dāng)逐行訪問一個(gè)DirectDraw顯示表面內(nèi)存時(shí)(這里訪問的是后備緩沖表面),必須利用lPitch移到
57、下一行,而不是用像素字節(jié)數(shù)乘寬度,總之,如果使用lPitch來進(jìn)行內(nèi)存計(jì)算,這樣,所寫的代碼就總是安全的。圖3-3 訪問的表面該函數(shù)一開始就對(duì)傳入的矩形的頂點(diǎn)做判斷,保證掃描區(qū)域在窗口范圍之內(nèi),如果矩形超出掃描范圍,則只掃描在窗口范圍里的矩形大小。在上述代碼中,對(duì)x1的越界操作為“x1=0;”和“x1=screen_width-1;”,這里不將x1置為screen_width是有理由的,分辨率為640480,表示水平方向含有像素?cái)?shù)為640個(gè),垂直方向像素?cái)?shù)480個(gè),而在程序里,后備緩沖表面back_buffer的存儲(chǔ)是從0開始的,所以,當(dāng)x1為screen_width時(shí),實(shí)際上已不在表面的工作
58、區(qū)了,要它的最大邊界是screen_width-1,其他坐標(biāo)點(diǎn)類似。接下來該函數(shù)開始(kish)逐行訪問后備緩沖表面的內(nèi)存。因?yàn)椋髠渚彌_表面的內(nèi)存實(shí)際是一個(gè)線性數(shù)組,所以在換行時(shí)需要加上lPitch。上面所列出的顏色識(shí)別函數(shù)實(shí)際上是在8位模式下的才能用的,指向表面(biomin)的指針定義為UCHAR *scan_buffer,這是一個(gè)指向UCHAR的指針,而UCHAR是8位,正巧這個(gè)表面所儲(chǔ)存的一個(gè)顏色值是一個(gè)8位索引值,所以(suy),在查找對(duì)應(yīng)像素的顏色時(shí),指針的下標(biāo)值就是lPitch的整數(shù)倍再加上橫坐標(biāo)。這個(gè)函數(shù)不能在十六位模式下工作,但是如果要在十六位模式下進(jìn)行顏色識(shí)別呢?T3DL
59、IB1函數(shù)庫提供了一個(gè)工作于16位模式下的顏色識(shí)別算法:Color_Scan16(),雖然本游戲沒有用到,但還是要說明一下。Color_Scan16()與上述所列的8位模式下的函數(shù)的實(shí)現(xiàn)原理基本相同,不同的只是在顏色比較時(shí),他們的數(shù)據(jù)類型為USHORT(16位),查找時(shí)只將存儲(chǔ)的顏色值與開始顏色或末尾的顏色值比較,所以只能查找這兩種顏色,不能像8位那樣查找一段顏色范圍,這是因?yàn)?6位模式下,是RGB編碼的像素值,如果要查一個(gè)從紅色(red的值為10,green的值為0,blue的值為0)到深一點(diǎn)的紅色(red的值為11,green的值為0,blue的值為0),若按8位方法查詢,就會(huì)將其他顏色范
60、圍也一并包含進(jìn)來,如顏色值(0,01010,11110,00000)。T3DLIB1函數(shù)庫沒有給出24和32位模式下的顏色識(shí)別函數(shù),顏色識(shí)別也可以在其他模式下進(jìn)行。8位模式,存儲(chǔ)一個(gè)像素的顏色要一個(gè)字節(jié),而16位模式下,存儲(chǔ)一個(gè)像素的顏色要2個(gè)字節(jié),同樣24位要3個(gè)字節(jié),32位要4個(gè)字節(jié),除了8位模式外,其他模式都是RGB編碼的像素值,如圖3-4所示。圖3-4 16/24/32位RGB像素(xin s)編碼因?yàn)楦鱾€(gè)模式下的RGB像素編碼的模式不同,所以,建立他們時(shí),也要用不同的算法,基本上可以通過簡(jiǎn)單的移位和掩碼操作來完成(wn chng)此算法,算法表示為如下的宏:/ this builds
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東省日照市2024-2025學(xué)年高二上學(xué)期期末語文試題 含解析
- 藥店崗前培訓(xùn)內(nèi)容
- 創(chuàng)新創(chuàng)業(yè)課題分享
- 地理教育教學(xué)經(jīng)驗(yàn)總結(jié)
- 家庭農(nóng)場(chǎng)與合作社資源共享協(xié)議
- 農(nóng)民合作培訓(xùn)教育與活動(dòng)組織協(xié)議
- 小牛在線借款合同
- 電子工程技術(shù)模擬電路試題集
- 柱上式無功補(bǔ)償裝置相關(guān)行業(yè)投資規(guī)劃報(bào)告
- 個(gè)人樓商鋪?zhàn)赓U合同書
- 2025江西吉泰廬陵開發(fā)投資集團(tuán)有限公司及下屬子公司招聘26人筆試參考題庫附帶答案詳解
- 高中英語丨高考核心高頻詞匯
- 《數(shù)智化技術(shù)應(yīng)用與創(chuàng)新》課件 第1章 走進(jìn)數(shù)智化時(shí)代
- 2025中煤電力限公司面向中煤集團(tuán)內(nèi)部招聘15人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2024年江西青年職業(yè)學(xué)院高職單招職業(yè)技能測(cè)驗(yàn)歷年參考題庫(頻考版)含答案解析
- 四川省成都市高新區(qū)2024-2025學(xué)年八年級(jí)(上)期末物理試卷(含答案)
- 2025年浙江嘉興桐鄉(xiāng)市水務(wù)集團(tuán)限公司招聘10人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 個(gè)人雇傭保安合同范例
- 《cad基礎(chǔ)教程》課件
- 南昌工學(xué)院學(xué)年鑒定表樣表
- 2024年汽車加氣站作業(yè)人員安全考試練習(xí)題(含答案)
評(píng)論
0/150
提交評(píng)論