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

正文內(nèi)容

二d賽車游戲的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)-免費(fèi)閱讀

  

【正文】 但只能在局域網(wǎng)內(nèi)進(jìn)行通信,這主要是 IP地址問(wèn)題,另外 還要解決 NAT,防火墻等問(wèn)題 。 如果數(shù)據(jù)報(bào)讀入成功, recvfrom()將返回所接收到的數(shù)據(jù)報(bào)的字節(jié)數(shù)。 ( 1) sendto() 具體調(diào)用形式如下: int sendto ( SOCKET s,const char FAR* buf,int len,int flags,const struct sockaddr FAR* to,int tolen )。 使用一個(gè)面向無(wú)連接的 socket 數(shù)據(jù)報(bào)套接字的一般使用方法如圖 42 所示。 這是用來(lái)發(fā)送數(shù)據(jù)的函數(shù),它的第一個(gè)參數(shù) s 是指發(fā)送數(shù)據(jù)的套接字的描述符;第二個(gè)參數(shù) buf 是指要發(fā)送數(shù)據(jù)的緩沖區(qū)的指針;第三個(gè)參數(shù) len 是指數(shù)據(jù)的長(zhǎng)度;第四個(gè)參數(shù) flags 指定了該函數(shù)的調(diào)用方式。 這個(gè)函數(shù)是用來(lái)完 成實(shí)際的連接。 ( 1) listen()函數(shù),它的調(diào)用格式如下: int listen( SOCKET s, int backlog)。 ( 3)轉(zhuǎn)換字節(jié)順序 在上面的代碼段里,可以看到, 本系統(tǒng) 向地址的 sin_port 和 sin_addr 成員分配了一個(gè)值,并且使用了 htons()和 htonl()函數(shù),這兩個(gè)函數(shù)用于轉(zhuǎn)化端口號(hào)和地址參數(shù)的字節(jié)順序。 nResult = bind(sListen, (SOCKADDR *)amp。 int bind(SOCKET s,const struct sockaddr FAR* name,int namelen)。根據(jù)通信服務(wù)類型選擇恰當(dāng)?shù)?socket 類型。 Socket 類型是指 socket 用于數(shù)據(jù)報(bào)傳輸或字節(jié)流傳輸。 計(jì)算機(jī)信息工程學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書 24 第五章 Socket 網(wǎng)絡(luò)通信實(shí)現(xiàn)多人游戲 Socket 簡(jiǎn)介 什么是 Socket Socket(即套接字)是一種網(wǎng)絡(luò)編程接口,它是對(duì)通信端點(diǎn)的一種抽象,提供了一種發(fā)送和接受數(shù)據(jù)的機(jī)制。 31) 5) + ((r amp。因?yàn)椋髠渚彌_表面的內(nèi)存實(shí)際是一個(gè)線性數(shù)組,所以在換行時(shí)需要加上 lPitch。這個(gè)參數(shù)也可以傳入一個(gè)具體的值,如果當(dāng)時(shí)的顯示模式是 640 480 8,那么,該模式下每行有 640 個(gè)像素,每個(gè)像素為 8位(或者說(shuō)一個(gè)字節(jié)),因此,實(shí)際每行應(yīng)該恰為 640個(gè)字節(jié),即傳入的值為 640,如果在 640 480 16模式下,傳入的值是 1280(每像素2個(gè)字節(jié)為 640 2)。 //sprintf(s,%d,a)。 scan_y=y2。 if (x2 = screen_width) x2=screen_width1。 int width1 = (w11) (w13)。// abs()是取絕對(duì)值 // test if rects overlap if (dx (width1+width2) amp。 int width2 = (w21) (w23)。第一行根據(jù)不同的名次打出不同的信息,如果是第一名將顯示 Y O U 判斷準(zhǔn)備 賽車數(shù)據(jù)處理 移動(dòng)窗口位置 繪制賽道 繪制各種物體以及賽車 判斷勝負(fù) 發(fā)送數(shù)據(jù) 計(jì)算機(jī)信息工程學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書 15 W I N字樣,而第 3 名顯示具體的名次,如“ N U M 2”,如果是第四名則顯示“ Y O U f A I L”字樣。 鏈接界面 這部分是顯示當(dāng)前鏈接上的玩家,在屏幕上顯示 player x in,并不斷地發(fā)送給相應(yīng)玩家對(duì)應(yīng)的賽車號(hào)碼,若檢測(cè)到有玩家鏈接,則將下一個(gè)賽車控制權(quán)轉(zhuǎn)交到新連接的玩家手中,直到服務(wù)器端玩家按下回車鍵,之后向所有玩家發(fā)出游戲開始信號(hào),客戶端接收到信號(hào)后開始游戲。 ( 6)檢測(cè)摩擦力 計(jì)算機(jī)信息工程學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書 12 路面摩擦力為 ,草地摩擦力為 ,并且,當(dāng)賽車在草地行駛時(shí),摩擦力會(huì)達(dá)到 ,所以在路面行駛的加速度會(huì)比草地的加速度大,而且,路面速度的最大值比草地的最大值要大,實(shí)際行駛時(shí),在路面行如風(fēng),而在草地則非常慢,這是為了不讓玩家從草地走。 圖 23 賽道顯示圖 由圖中可以看到有些位圖完全在窗口內(nèi),有些完全在窗口外,有些部分在窗口內(nèi),有兩種方法可以將位圖繪制在后備緩沖表面,下面是 兩種方法: 第一種方法:可以將所有位圖直接繪制在后備緩沖表面,賽道對(duì)象為 road,這是一個(gè) BOB 對(duì)象,其中存儲(chǔ)了 10 張賽道位圖,可遍歷字符數(shù)組,因?yàn)槊繌垐D在世界中的坐標(biāo)可以算出,都為 200 的倍數(shù),在由世界坐標(biāo)算出他在窗口的坐標(biāo),之后,調(diào)用Draw_BOB( amp。 第二步算出賽車在 X 和 Y 方向上這一幀的位移變化,進(jìn)行碰撞檢測(cè),因?yàn)橘愜囍g只能進(jìn)行一次檢測(cè),所以,將當(dāng)前賽車與之后的賽車進(jìn)行碰撞檢測(cè),若檢測(cè)到碰撞,則將位移大的賽車減小位移,將位移小的增加位移,之后重新算出賽車的速度以及方向,查三角函數(shù)表,找出與賽車實(shí)際方向最接近的表中方向,并將該方向值賦給賽車方向。期間如果檢測(cè)到 Escape 鍵,則將game_state 置為 GAME_STATE_MENU,并重置游戲數(shù)據(jù)。 GameInit()。 計(jì)算機(jī)信息工程學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書 6 圖 21 游戲 程序 流程 圖 ( 1) Game_Init()初始化 在這一部分中,游戲執(zhí)行初始化操作,此賽車游戲主要的初始化工作有對(duì)三角函數(shù)、 DirectDraw、 DirectSound、 DirectInput的初始化、鍵盤的初始化、聲音的載入、創(chuàng)建裁剪器、游戲開始畫面載入與繪制、各個(gè)位圖(包括賽車、終點(diǎn)、賽道、指示燈、菜單畫面)的載入。 ( 2) DirectMusic 實(shí)現(xiàn) MIDI 文件的播放控制,其 API 封裝功能如下: ( 4)關(guān)閉設(shè)備。 (3)數(shù)學(xué)和誤差函數(shù) 包含計(jì)算兩點(diǎn)間的距離、打開誤差文件等。 游戲引擎就是為了降低游戲開發(fā)者們重復(fù)勞動(dòng),節(jié)省開發(fā)時(shí)間和開發(fā)費(fèi)用而誕生的,它封裝了很多在游戲制作中常用的功能,讓我們能直接調(diào)用這些功能而不用再?gòu)念^編寫。 DirectSound:聲音組件,支持?jǐn)?shù) 字化聲音( WAV),但不支持 MIDI。在 之后的版本已沒有了。 DirectX 概述 Microsoft 公司的 DirectX 是一個(gè)多媒體應(yīng)用編程接口,它實(shí)際上是一種軟件系統(tǒng),抽象出音頻、輸入、視頻、網(wǎng)絡(luò)以及安裝等內(nèi)容,由 C++語(yǔ)言實(shí)現(xiàn),遵循 COM(組件對(duì)象模型)。 賽車 游戲的主要功能 本設(shè)計(jì)可實(shí)現(xiàn)較真實(shí)的游戲音效、鍵盤接口、局域網(wǎng)內(nèi)通信 等功能。 從中國(guó)游戲玩家的反應(yīng)來(lái)看, 3D游戲的吸引力比 2D 游戲強(qiáng)的多,玩家都更加喜歡畫面質(zhì)量?jī)?yōu)秀的游戲。多人游戲的實(shí)現(xiàn)是靠 socket 網(wǎng)絡(luò)編程與多線程的聯(lián)用, socket 提供 C/S 模式下數(shù)據(jù)的可靠傳輸,多線程解決了 socket 等待問(wèn)題,兩者結(jié)合使得在局域網(wǎng)內(nèi)的多人游戲運(yùn)行比較流暢。 本設(shè)計(jì)所實(shí)現(xiàn)的賽車游戲是基于 C 語(yǔ)言設(shè)計(jì)開發(fā)的,所選用的游戲引擎是基于 編寫的。 隨著國(guó)際國(guó)內(nèi)的游戲產(chǎn)業(yè)的發(fā)展,三維游戲逐漸成為游戲市場(chǎng)中的主要形式,但2D游戲因?yàn)樽约旱莫?dú)特的優(yōu)點(diǎn)并沒有退出人們的視野,反而在網(wǎng)頁(yè)游戲、娛樂休閑游戲等領(lǐng)域快速的發(fā)展。 DirectX是微軟公司開發(fā)的基于 Windows系統(tǒng)的多媒體編程接口,編寫的語(yǔ)言是 C++,并且遵循 COM。 實(shí)現(xiàn)賽車的控制、 賽道載入、碰撞檢測(cè)、賽車數(shù)據(jù)處理和多人游戲 等。 DirectX中的每個(gè) API 都可以通過(guò)硬件加速。重要的是, DirectInput 可以和所有現(xiàn)在的或?qū)?lái)的輸入設(shè)備對(duì)話。目前,已更新到 DirectX12, 毫無(wú)疑問(wèn) DirectX 給游戲業(yè)帶來(lái)了巨大的發(fā)展。 DDraw_Shutdown(void):關(guān)閉 Directdraw 并釋放所有接口。此系統(tǒng)比較簡(jiǎn)單主要功能如下: ( 1)初始化 DirectInput 系統(tǒng)。用 11kHz、 8 聲道載入 .WAV 文件。改變音量、回放速率或立體聲的聲道平衡。播放 MIDI 文件。刪除 MIDI。在列舉的 的主要組件中, DirectDraw、 DirectInput、 DirectMusic 和 DirectSound 是和本畢業(yè)設(shè)計(jì)所設(shè)計(jì)的游戲相關(guān)的,并且是選用的游戲引擎的基礎(chǔ)。 圖 2— 1 游戲主邏輯流程圖 開始時(shí)鐘,將后備緩沖填充黑色,依據(jù) game_state 的值選擇相應(yīng)的功能,game_state 值類型有 GAME_STATE_INIT( 初始狀態(tài))、 GAME_STATE_MENU(菜單選擇)、GAME_STATE_RUNNING(游戲進(jìn)行)、 GAME_STATE_EXIT(退出)、 GAME_STATE_WAIT_EXIT(等待退出)。 ( 2)賽車數(shù)據(jù)處理 這一部分是關(guān)鍵部分,決定了賽車的具體位置、引擎聲音以及各種狀態(tài)。本游戲的賽道種類共有 10 種,外加一個(gè)草 地,形成游戲的地形,每個(gè)位圖大小為 200 200 大小。// 上側(cè)位圖在數(shù)組的 y 位置 y_b=(view_y+479)/200。主要的游戲數(shù)據(jù)處理都在服務(wù)器端進(jìn)行,并且進(jìn)行發(fā)送數(shù)據(jù)和顯示等操作,而客戶端則接收數(shù)據(jù)并發(fā)送用戶所控制的賽車的引擎狀態(tài)和方向變化等信息。 游戲進(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ā)送過(guò)來(lái)的信號(hào)進(jìn)行的。 邊界矩形盒方法 邊界矩形盒方法是檢測(cè)兩個(gè)矩形是否重疊的方法,矩形可以代表任何東西,在這里代表賽車,你必須給出他們的 左上角坐標(biāo)以及高度和寬度,如果有重疊,則返回 TRUE,否則返回 FALSE。 int cy2 = y2 + height2。如果兩個(gè)矩形相交,如圖 31 所示。 還有一點(diǎn)“ (w11) (w13)”就是 w1*3/8,但為什么要這么麻煩呢?這主要是考慮到執(zhí)行速度,位移與加減法比做乘除法要快的多,游戲要考慮到速率,所以,盡量用快速的方法。 else if (y2 0) y2=0。 scan_buffer[scan_x] = scan_end ) return(1)。 UCHAR *scan_buffer 是要傳入一個(gè)指向表面的指針,通常是指向后備緩沖表面的指針, 因?yàn)橹鞅砻嫱ǔJ沁M(jìn)過(guò)換頁(yè)而來(lái)的,換頁(yè)是與后備緩沖表面交換的,即主表面顯示的是當(dāng)時(shí)的前一幀的狀態(tài),無(wú)法對(duì)當(dāng)前狀況作出反應(yīng),所以,不用主表面進(jìn)行顏色識(shí)別,而掃描離屏表面沒有任何意義,因?yàn)殡x屏表面是儲(chǔ)存位圖的表面,所以也不用離屏表面,繪圖的實(shí)際操作是在后備緩沖表面上進(jìn)行的,所以,通常傳入指向后備緩沖表面的指針?!焙汀?x1=screen_width1。 8 位模式,存儲(chǔ)一個(gè)像素的顏色要一個(gè)字節(jié),而 16 位模式下,存儲(chǔ)一個(gè)像素的 顏色要 2 個(gè)字節(jié),同樣 24 位要 3 個(gè)字節(jié), 32 位要 4 個(gè)字節(jié),除了 8 位模式外,其他模式都是 RGB 編碼的像素值,如圖 34 所示。當(dāng)指向表面的指針定義為 UCHAR *時(shí),傳入的 lPitch 值不需要做任何改變,如果將指向表面的指針類型轉(zhuǎn)換為 USHORT*或 UINT *時(shí),也要改變 lPitch 的值,這是因?yàn)?lPitch的值是指一行的字節(jié)數(shù),所以,此時(shí)應(yīng)將 lPitch 除以 2 或 4 再賦給其他變量(注意,不能改變 lPitch 的值)。下面是實(shí)際調(diào)用 socket 函數(shù)的一個(gè)例子: m_socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)。 ( 2) socket 類型是第二個(gè)參數(shù),有兩種類型,即 SOCK_DGRAM(數(shù)據(jù)報(bào))和SOCK_STREAM(字節(jié)流)。 ?遠(yuǎn)地主機(jī) IP地址:指出目的主機(jī)。 = htonl(INADDR_ANY)。 ( 2) IP 地址的使用 在程序中將 s_addr 的值指定為 INADDR_ANY,實(shí)際上就是指定地址為 的地址,可以將它理解為不確定地址,或“所有地址”、“任意地址”。在通信工作結(jié)束之后,客戶端與服務(wù)器要調(diào)用 closesocket()函數(shù)關(guān)閉套接字。 其中,第一個(gè)參數(shù) s是請(qǐng)求連接的 socket;第二個(gè)參數(shù) name 是遠(yuǎn)地 socket 地址, 客戶端 服務(wù)器端 socket() socket() bind() listen() accept() 創(chuàng)建套接字 recv() send() closesocket() closesocket() connect() send() recv() closesocket() 計(jì)算機(jī)信息工程學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書 28 這個(gè) sockaddr 地址結(jié)構(gòu)和傳遞給服務(wù)器 bind()函數(shù)的 sockaddr 地址結(jié)構(gòu)是完全相同的,端口號(hào)必須用服務(wù)器設(shè)置的端口號(hào),網(wǎng)絡(luò)主機(jī)地址要用 i_addr()函數(shù)轉(zhuǎn)換過(guò)的一個(gè)用點(diǎn)分隔的十進(jìn)制 IP 地址;第三個(gè)參數(shù) namelen 是指定地址長(zhǎng)度。 accept 函數(shù)返回的新 socket 其實(shí)是指本次創(chuàng)建的連接,而一個(gè)連接是由兩部分信息組成的,一部分是
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1