<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于A(yíng)RM的多人對戰游戲平臺

基于A(yíng)RM的多人對戰游戲平臺

作者: 時(shí)間:2013-12-04 來(lái)源:網(wǎng)絡(luò ) 收藏

  開(kāi)發(fā)流程如圖7所示。

基于A(yíng)RM的多人對戰游戲平臺

  對于某些步驟需要作詳細說(shuō)明:

  1)開(kāi)辟線(xiàn)程

  如果讓服務(wù)器一直recvfrom(),則主線(xiàn)程將一直執行此函數,造成消息擁堵,從而導致其他事件難以響應,因此選擇開(kāi)辟新線(xiàn)程在后臺接收客戶(hù)端信息,合理分配系統資源。

  開(kāi)辟線(xiàn)程的過(guò)程如下:

 ?、俣x要傳送給線(xiàn)程的全局性質(zhì)的結構體RECVPARAM,成員為Dlg類(lèi)指針類(lèi)型變量。

 ?、诙xRECVPARAM結構體變量pRecvParam,并把當前工程的Dlg類(lèi)指針賦給其成員;創(chuàng )建線(xiàn)程,把pRecvParam傳遞給線(xiàn)程;然后關(guān)閉線(xiàn)程。

 ?、墼诰€(xiàn)程回調函數中接收傳遞來(lái)的變量pRecvParam,然后就可以調用Dlg類(lèi)的成員來(lái)實(shí)現功能。

  2)信息格式

 ?、倏蛻?hù)端連接信息

  格式隨意的字符串,目的是讓服務(wù)器端接收到數據,從而發(fā)現客戶(hù)端IP地址。我們發(fā)的是“0000”。

 ?、诳蛻?hù)端下棋信息

  信息格式:用戶(hù)標識(1位)、落子橫坐標(2位)、落子縱坐標(2位)。

  其中,用戶(hù)標識位1代表先手(白方),0代表后手(黑方)。

 ?、鄯?wù)器端發(fā)送信息

  指導客戶(hù)端畫(huà)棋子以及顯示狀態(tài)。

  信息格式:用戶(hù)標識(1位)、落子橫坐標(2位)、落子縱坐標(2位)、游戲狀態(tài)(1位)。

  其中,前5位與從客戶(hù)端接收的相同:游戲狀態(tài)位1表示游戲結束,0表示游戲未結束。

  3.3.2 客戶(hù)端程序

  創(chuàng )建基于單文檔的MFC工程。

  在A(yíng)pp類(lèi)的BOOL InitInstance()中加載套接字庫:AfxSocketInit();

  添加對話(huà)框資源CDlgMode,用于選擇游戲模式:

  添加對話(huà)框資源CDlgLink,用于連接服務(wù)器;并在其上畫(huà)一個(gè)IP地址控件,用于填寫(xiě)服務(wù)器IP;在確定按鈕的響應函數中初始化套接字socket()、bind(),并向服務(wù)器發(fā)送連接請求sendto();

  在View類(lèi)構造函數中將模式選擇對話(huà)框DoModal(),選擇進(jìn)入雙人模式,之后的程序開(kāi)發(fā)流程如圖8所示。

基于A(yíng)RM的多人對戰游戲平臺

  4 代碼移植

  4.1 WindowsCE簡(jiǎn)介

  Windows CE是基于Win32 API重新開(kāi)發(fā)的新型信息設備平臺,具有模塊化、結構化和基于Win32應用程序接口以及與處理器無(wú)關(guān)等特點(diǎn)。大量用戶(hù)對于Windows操作方式和編程的熟悉,是Windows CE作為嵌入式操作系統迅速發(fā)展的最大的優(yōu)勢,也是選擇的原因。

  4.2 代碼移植

  安裝WinCE5.0的標準SDK,在VS2008開(kāi)發(fā)環(huán)境下創(chuàng )建智能設備的MFC工程,選擇基于對話(huà)框或單文檔的應用程序,并選擇剛剛安裝的標準SDK平臺。工程創(chuàng )建完成后,將在Win32下開(kāi)發(fā)的代碼按同樣的方式轉移過(guò)來(lái),然后編譯,修改錯誤。

  WinCE是Unicode環(huán)境,盡管WinCE支持ASCII功能來(lái)進(jìn)行文件交換,但是WinCE的本地文件格式是Unicode。所以,要將字符串轉換為UmcMe才能使用。另外就是代碼移植過(guò)程中丟三落四的粗心錯誤。以下列舉代碼移植過(guò)程中遇到的問(wèn)題及解決方法:

  1)某些函數發(fā)生變化,不再識別ASCII碼字符或字符串,例如MessageBox,其字符串參數必須經(jīng)_T(“”)轉換成Unicode;另外Cstring類(lèi)不要輕易使用;

  2)某些功能使用不同函數,例如整型轉字符串型,由函數itoa變?yōu)開(kāi)itoa_s;

  3)智能設備項目中沒(méi)有IP地址控件,用編輯框代替,多了些字符串拼接、轉換的工作;

  4)不要忘了使客戶(hù)端與服務(wù)器端的端口號保持一致。

  5 硬件調試及結果

  5.1 PC與arm板連接

  1)平臺連接

  通過(guò)網(wǎng)線(xiàn)相連,然后指定網(wǎng)關(guān)地址和IP地址。指定方法如下:本地連接一>點(diǎn)右鍵看屬性—>雙擊“Internet協(xié)議(TCP/IP)”一>使用下面的IP地址,自己填寫(xiě)即可。特別注意,當兩臺機器直接用網(wǎng)線(xiàn)相連而不使用路由器時(shí),必須同一個(gè)網(wǎng)關(guān)才可實(shí)現數據交換??赏ㄟ^(guò)ping命令測試網(wǎng)絡(luò )是否連通。

  2)運行游戲

  利用同步軟件Microsoft AcfiveSync將開(kāi)發(fā)的WinCE5.0下游戲程序傳到arm平臺中,即可在上面運行。

  5.2 板與arm板連接

  與上述過(guò)程類(lèi)同。

  6 結論

  經(jīng)實(shí)際操作驗證,這種多人游戲開(kāi)發(fā)方式(多線(xiàn)程)使得資源占用率很低,處理器完全可以勝任,整個(gè)游戲運行流暢。游戲平臺可以通過(guò)有線(xiàn)方式互聯(lián),也可以通過(guò)無(wú)線(xiàn)方式互聯(lián),操作簡(jiǎn)單,使用方便。而且這種游戲平臺具有很高的開(kāi)放性,利用上述的開(kāi)發(fā)框架可以輕易開(kāi)發(fā)出更多更好玩的游戲。


上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: ARM 對戰游戲平臺 S3C2410

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>