《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于ARM和WinSock的多人對戰游戲平臺設計
基于ARM和WinSock的多人對戰游戲平臺設計
摘要: 具有多機互聯對戰功能的開放式便攜游戲機具有廣闊的應用價值和深遠的發展空間。以SAMSUNG公司基于ARM920T的處理器S3C2410為核心,嵌入WinCE5.0操作系統,在VS2008開發環境下創建智能設備MFC工程,并將在Win32環境下開發的單人/雙人五子棋游戲進行代碼移植,最終在ARM開發板上成功運行游戲。游戲開發基于WindowsSockets網絡鳊程,能夠實現ARM板與PC、ARM板與ARM板之間的游戲對戰,可利用以太網接口互聯,也可以通過無線局域網互聯。該文以五子棋游戲為例,詳述了硬件構建、游戲開發及移植的整個過程,極具借鑒價值。
關鍵詞: ARM 游戲平臺 S3C2410 WinCE
Abstract:
Key words :

  摘要:具有多機互聯對戰功能的開放式便攜游戲機具有廣闊的應用價值和深遠的發展空間。以SAMSUNG公司基于ARM920T的處理器S3C2410為核心,嵌入WinCE5.0操作系統,在VS2008開發環境下創建智能設備MFC工程,并將在Win32環境下開發的單人/雙人五子棋游戲進行代碼移植,最終在ARM開發板上成功運行游戲。游戲開發基于WindowsSockets網絡鳊程,能夠實現ARM板與PC、ARM板與ARM板之間的游戲對戰,可利用以太網接口互聯,也可以通過無線局域網互聯。該文以五子棋游戲為例,詳述了硬件構建、游戲開發及移植的整個過程,極具借鑒價值。

  游戲不僅能開發人的智力,使人頭腦反應靈敏,還能滿足人的精神需求(如冒險、創造力、情感等),極具娛樂性和趣味性,深受人們的喜愛。隨著消費類電子產業的蓬勃發展,越來越多的嵌入式電子產品走進了千家萬戶,催生出了諸如GBA(GameBoyAdvance)、PSP(Play-StationPortabk)以及最近才在我國上市的iPad等一大批專業的并且銷量驚人的明星級移動娛樂游戲設備。

  然而上述游戲平臺通常造價昂貴,且不具有開放性。例如備受推崇的PSP,開發授權問題和昂貴的專用開發套件(軟硬件)使得PSP游戲的開發門檻很高。這在很大程度上限制了這些游戲平臺的普及。如果利用通用的處理器和常用的嵌入式操作系統(如WinCE、Linux等)構建一種基于以太網或者無線以太網的便攜式的游戲機。則可以吸引大量熟悉C/C++嵌入式編程的工程師或發燒友制作出各種精彩的游戲,這必將極大地推動這種游戲平臺的普及。而且將平臺進行功能裁剪和批量生產后成本較低,對于中低收入人群來說將是極佳選擇,市場潛力無窮。

  本文詳述了這種游戲平臺的硬件構建、互聯對戰游戲開發框架和流程,以及從Win32到WinCE進行代碼移植的整個開發過程,并記錄了開發過程中積累的經驗,具有很高的借鑒價值。

  1硬件平臺

  硬件平臺架構如圖1所示。

硬件平臺架構

  S3C2410是Samsung公司推出的16/32位RISC處理器,為手持設備和一般類型應用提供了低價格、低功耗、高性能小型微控制器的解決方案。

  S3C2410采用了ARM920T內核,0.18μm工藝的CMOS標準宏單元和存儲器單元。它的低功耗、精簡和出色的全靜態設計特別適用于對低成本和功耗敏感的應用。ARM920T實現了MMU,AMBABUS和Harvard高速緩沖體系結構。這一結構具有獨立的16kB的指令Cache和16kB數據Cache,每個都由8字長的行構成。

  2套接字編程

  2.1WinSock基礎

  WinSock是WindowsSockets的縮寫,是Windows環境下廣泛應用的、開放的、支持多種協議的網絡編程接口規范。這里主要使用TCP/IP協議族實現通信。

  基于TCP/IP的套接字有流式套接字(SOCK_STREAM)、數據報式套接字(SOCK_DGRAM)、原始式套接字(SOCK_RAW)3種類型,如圖2所示。

TCP

  TCP協議是面向連接的網絡協議,它的連接步驟較多,而且當檢測到數據包丟失或錯誤時,會要求發送端重新發送,這樣一來就不可避免地引起了傳輸延時。

  UDP協議面向無連接服務,每個分組都攜帶有完整的目的地址,操作簡單,且無傳輸延遲,比較適合要求不高的游戲通信。它的通信時序如圖3所示。

通信時序

  2.2應用程序接口函數

  1)加載套接字庫AfxSocketlnit()

  布爾型,參數缺省值為NULL,在程序結束前自動調用WSACleanup清除套接字。

  2)創建套接字socket()

  用于創建指定類型的套接字,流式(TCP協議)SOCK_STREAM或數據報式(UDP協議)SOCK_DGRAM。

  3)綁定本地地址bind()

  將套接字地址(包括本地主機地址和本地端口地址)與所創建的套接字號聯系起來,即將名字賦予套接字,以指定本地半相關。

  4)接收recvfrom()

  在套接字指定的已連接的數據報或流套接字上接收輸入數據。

  5)發送sendto()

  在套接字指定的已連接的數據報或流套接字上發送輸出數據。

  3Win32下五子棋程序設計

  3.1游戲設計思路

  游戲開始前有一系列引導步驟,讓用戶選擇游戲模式,并作相應的初始連接,如圖4所示。這些引導步驟可通過添加一系列對話框資源來實現。完成之后進入選擇的游戲模式。

引導步驟

  對于單人五子棋游戲,即人機對戰,只需要一個應用程序。當用戶鼠標左擊棋盤時,程序先在相應位置處畫棋子,然后執行電腦方策略,實現對戰。

   對于雙人五子棋游戲,則需要先運行一個服務器端程序,然后兩個用戶分別運行一個客戶端程序,并與此服務器相連。游戲進行過程中,由服務器執行游戲策略,客戶端程序只負責采集鼠標信息和顯示棋子。我們讓用戶A在游戲平臺A上運行服務器端程序,緊接著運行客戶端程序,并與服務器建立Socket連接;然后告訴用戶B服務器的IP地址,讓其在平臺B上運行客戶端程序,并與服務器建立Socket連接;連接成功后就可以開始游戲了。

 

  3.2單人游戲

  建立MFC工程,選擇創建單文檔類型的應用程序。添加對話框資源用于選擇游戲模式,并在View類構造函數中DoModal()。

  進入單人模式后的程序開發流程如圖5所示。

程序開發流程

  對于某些步驟需要作詳細說明:

詳細說明

  3)判斷游戲是否結束

  在Doc類中定義私有性質的成員變量intstate[15][10];,用于記錄棋盤上每一格的狀態:無棋(值為0)、用戶方棋(值為1)、電腦方棋(值為2),初始值是0。游戲過程中,某一方落棋后立即給state數組對應成員賦值,下標可由鼠標左鍵消息響應函數的CPointpoint參數轉換而來。

  對于棋盤上每一個坐標點(i,j),沿東西、南北、東南西北、東北西南四個方向掃描五個沿途點的狀態值,若發現五個相同狀態相連,則該狀態(用戶方或電腦方)的棋手獲勝,游戲結束。

  4)電腦方下棋策略

  對于棋盤上每一個坐標點(i,j),掃描它的狀態值state[i][j],一經發現不為0,就以此點為起點,沿東、南、西、北、東南、西南、東北、西北8個方向搜索5個棋位。

  事先定義針對每個點、每個方向的8個整型數組(初始值賦為0):

整型數組

  對于坐標點(i,j),搜索過程中若遇到具有相同狀態的點(m,n),則對應方向數組的[i][j]成員的值增加,遇到不同狀態點則減小。保存8個中絕對值最大的。

  上述操作完后,比較所有點存的值,絕對值最大的說明以該點起始的某個方向己方棋子相連較多,或者對方棋子相連較多,最適合落子。

  3.3雙人游戲

  從游戲開始到結束,客戶端與服務器的交互過程如圖6所示。

客戶端與服務器的交互過程

  3.3.1服務器端程序

  創建基于對話框的MFC工程。

  在App類的BOOLInitInstance()中加載套接字庫:AfxSocketInit();

  在Dlg類的BOOLOnInitDialog()中初始化套接字,包括新建和綁定套接字:socket()、bind();

  在對話框上畫兩個按鈕控件:“連接用戶”和“開始游戲”。

  開發流程如圖7所示。

開發流程

  對于某些步驟需要作詳細說明:

  1)開辟線程

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

  開辟線程的過程如下:

 ?、俣x要傳送給線程的全局性質的結構體RECVPARAM,成員為Dlg類指針類型變量。
②定義RECVPARAM結構體變量pRecvParam,并把當前工程的Dlg類指針賦給其成員;創建線程,把pRecvParam傳遞給線程;然后關閉線程。
③在線程回調函數中接收傳遞來的變量pRecvParam,然后就可以調用Dlg類的成員來實現功能。

  2)信息格式

 ?、倏蛻舳诉B接信息

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

 ?、诳蛻舳讼缕逍畔?/p>

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

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

 ?、鄯掌鞫税l送信息

  指導客戶端畫棋子以及顯示狀態。

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

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

  3.3.2客戶端程序

  創建基于單文檔的MFC工程。

在App類的BOOLInitInstance()中加載套接字庫:AfxSocketInit();
添加對話框資源CDlgMode,用于選擇游戲模式:
添加對話框資源CDlgLink,用于連接服務器;并在其上畫一個IP地址控件,用于填寫服務器IP;在確定按鈕的響應函數中初始化套接字socket()、bind(),并向服務器發送連接請求sendto();
在View類構造函數中將模式選擇對話框DoModal(),選擇進入雙人模式,之后的程序開發流程如圖8所示。

程序開發流程

   4代碼移植

  4.1WindowsCE簡介

  WindowsCE是基于Win32API重新開發的新型信息設備平臺,具有模塊化、結構化和基于Win32應用程序接口以及與處理器無關等特點。大量用戶對于Windows操作方式和編程的熟悉,是WindowsCE作為嵌入式操作系統迅速發展的最大的優勢,也是選擇的原因。

  4.2代碼移植

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

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

1)某些函數發生變化,不再識別ASCII碼字符或字符串,例如MessageBox,其字符串參數必須經_T(“”)轉換成Unicode;另外Cstring類不要輕易使用;
2)某些功能使用不同函數,例如整型轉字符串型,由函數itoa變為_itoa_s;
3)智能設備項目中沒有IP地址控件,用編輯框代替,多了些字符串拼接、轉換的工作;
4)不要忘了使客戶端與服務器端的端口號保持一致。

  5硬件調試及結果

  5.1PC與ARM板連接

  1)平臺連接

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

  2)運行游戲

  利用同步軟件MicrosoftAcfiveSync將開發的WinCE5.0下游戲程序傳到ARM平臺中,即可在上面運行。

  5.2ARM板與ARM板連接

  與上述過程類同。

  6結論

  經實際操作驗證,這種多人游戲開發方式(多線程)使得資源占用率很低,S3C2410處理器完全可以勝任,整個游戲運行流暢。游戲平臺可以通過有線方式互聯,也可以通過無線方式互聯,操作簡單,使用方便。而且這種游戲平臺具有很高的開放性,利用上述的開發框架可以輕易開發出更多更好玩的游戲。

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          国产精品免费视频xxxx| 亚洲国产精品久久久久秋霞影院| 国产亚洲va综合人人澡精品| 国产精品对白刺激久久久| 国产精品午夜在线观看| 亚洲国产成人在线播放| 99国产精品一区| 野花国产精品入口| 国产精品每日更新在线播放网址| 国产精品久久久久毛片大屁完整版| 久久久夜夜夜| 午夜精品久久久久久久99黑人| 欧美jizz19性欧美| 欧美午夜三级| 国产精品v日韩精品| 欧美性做爰猛烈叫床潮| 国产精品久久久久久久久免费桃花| 新片速递亚洲合集欧美合集| 国产综合色在线视频区| 欧美午夜不卡在线观看免费| 国产精品福利在线观看| 欧美影院成年免费版| 国产精品免费在线| 午夜亚洲影视| 久久亚洲综合色一区二区三区| 亚洲一区日韩在线| 亚洲综合清纯丝袜自拍| 亚洲综合成人婷婷小说| 国产精品黄视频| 亚洲深夜激情| 日韩一区二区精品在线观看| 国产视频欧美| 久久久精品性| 国产精品久久久久久久app| 国产精品对白刺激久久久| 亚洲午夜视频在线| 欧美激情亚洲综合一区| 国产精品拍天天在线| 六月婷婷一区| 欧美淫片网站| 一色屋精品视频在线观看网站| 国产一区二区三区在线观看免费视频| 欧美日韩精品免费观看视频完整| 精品成人一区二区三区| 一区二区三区四区五区视频| 久久九九热re6这里有精品| 欧美午夜不卡视频| 亚洲国产精品va在线看黑人动漫| 激情综合网激情| 一本色道久久综合亚洲精品不卡| 日韩一区二区免费看| 激情六月综合| 久久综合99re88久久爱| 国产手机视频一区二区| 亚洲乱码国产乱码精品精| 午夜精品短视频| 久久精品国产2020观看福利| 国产麻豆日韩欧美久久| 在线亚洲激情| 久久久91精品国产一区二区精品| 午夜免费在线观看精品视频| 午夜精品久久99蜜桃的功能介绍| 男人的天堂亚洲| 亚洲一区二区网站| 欧美国产欧美亚州国产日韩mv天天看完整| 国产精品男女猛烈高潮激情| 久久美女性网| 午夜一区二区三区在线观看| 亚洲永久免费精品| 国产精品免费看| 亚洲一区精品视频| 亚洲大片在线观看| 欧美日韩综合网| 国产精品影片在线观看| 亚洲美女中文字幕| 99成人在线| 亚洲精品国产精品国产自| 亚洲国产欧美一区二区三区久久| 欧美华人在线视频| 亚洲精品视频在线观看网站| 国产精品老女人精品视频| 亚洲国产成人av| 欧美日韩国产美| 国产午夜精品视频免费不卡69堂| 亚洲欧美国产va在线影院| 亚洲一区欧美激情| 亚洲一区二区三区免费视频| 欧美在线中文字幕| 国产精品sm| 欧美高清你懂得| 久久久久久久尹人综合网亚洲| 韩国久久久久| 99精品视频免费观看| 男人插女人欧美| 在线日韩精品视频| 国产精一区二区三区| 91久久中文| 亚洲国产精品久久久久久女王| 国产免费观看久久黄| 久久综合久久综合九色| 欧美精品www在线观看| 亚洲无玛一区| 欧美日韩亚洲精品内裤| 一区二区三区福利| 激情综合激情| 美女国产精品| 欧美午夜久久久| 欧美成人亚洲成人| 亚洲免费不卡| 久久嫩草精品久久久精品一| 久久久午夜电影| 欧美sm极限捆绑bd| 国产日韩精品在线| 午夜精品区一区二区三| 欧美激情亚洲国产| 欧美日韩精品一区二区三区四区| 亚洲久久在线| 亚洲福利电影| 亚洲三级影片| 欧美日韩激情网| 欲香欲色天天天综合和网| 欧美日韩亚洲视频一区| 中文国产一区| 欧美高清hd18日本| 国产精品激情av在线播放| 欧美成人久久| 夜夜爽夜夜爽精品视频| 久久久久久97三级| 亚洲福利视频二区| 在线中文字幕日韩| 欧美日韩性生活视频| 亚洲欧美日本日韩| 欧美激情小视频| 欧美有码在线观看视频| 亚洲自拍偷拍福利| 亚洲影音一区| 9l视频自拍蝌蚪9l视频成人| 亚洲作爱视频| 欧美一区在线直播| 久久se精品一区精品二区| 欧美在线精品一区| 亚洲视频日本| 国产欧美一区二区三区另类精品| 国模套图日韩精品一区二区| 亚洲一区视频| 快射av在线播放一区| 中文精品一区二区三区| 国产欧美91| 欧美日韩综合在线| 国产精品性做久久久久久| 欧美—级a级欧美特级ar全黄| 一区二区三区产品免费精品久久75| 99re6这里只有精品视频在线观看| 欧美激情综合五月色丁香小说| 亚洲欧美中文在线视频| 亚洲欧洲一二三| 欧美二区在线播放| 国产亚洲福利一区| 国语自产在线不卡| 欧美日韩国产精品成人| 91久久精品视频| 一色屋精品视频在线观看网站| 欧美一区午夜精品| 尤物yw午夜国产精品视频| 国产一区二区三区高清在线观看| 久久久久久成人| 久久久久免费视频| 国产伦精品一区二区三区四区免费| 麻豆久久精品| 欧美亚洲日本一区| 久久久久女教师免费一区| 欧美亚州在线观看| 亚洲美女在线视频| 午夜在线观看免费一区| 久久国产精品72免费观看| 欧美激情一区二区三区在线视频| 国产精品一区二区男女羞羞无遮挡| 欧美日韩一区二区三区免费| 亚洲欧美综合网| 激情亚洲一区二区三区四区| 夜夜嗨av一区二区三区| 欧美一进一出视频| 亚洲高清一区二区三区| 久久久久国产精品厨房| 久久久99久久精品女同性| 欧美日韩亚洲一区二区三区四区| 亚洲欧美日韩一区二区| 亚洲精品少妇| 久久在线91| 在线观看日韩www视频免费| 欧美精品久久久久久久久久| 国产精品免费福利| 国产精品分类| 免费久久99精品国产| 国模 一区 二区 三区| 午夜精品久久久久久久久久久久| 麻豆成人综合网| 久久综合成人精品亚洲另类欧美| 亚洲黄色尤物视频| 国产一区二区三区在线观看网站| 国产美女高潮久久白浆| 免费在线播放第一区高清av| 亚洲高清不卡在线| 久久阴道视频| 国产拍揄自揄精品视频麻豆| 欧美一区中文字幕| 欧美一区二区三区在线观看视频| 国产精品美女久久久免费| 亚洲欧美日韩在线高清直播| 欧美视频一区二区三区四区| 欧美深夜影院| 性做久久久久久免费观看欧美| 一本久道久久综合婷婷鲸鱼| 久久动漫亚洲| 国产一区二三区| 亚洲综合视频1区| 国产精品分类| 国产精品福利在线| 欧美午夜美女看片| 久久亚洲精品网站| 欧美精选一区| 久久精品亚洲国产奇米99| 夜色激情一区二区| aa级大片欧美| 国产一区二区三区四区老人| 欧美.日韩.国产.一区.二区| 精品动漫3d一区二区三区免费| 在线观看av不卡| 欧美影视一区| 黄色欧美日韩| 亚洲国产福利在线| 一本色道久久综合亚洲精品按摩| 亚洲国内精品在线| 日韩视频免费观看高清完整版| 美日韩丰满少妇在线观看| 亚洲一级黄色| 欧美激情国产高清| 99伊人成综合| 国产精品初高中精品久久| 久久久久久欧美| 欧美人与禽性xxxxx杂性| 91久久国产自产拍夜夜嗨| 欧美国产极速在线| 国产精品久久二区| 亚洲免费福利视频| 亚洲欧美在线x视频| 久久视频一区| 狠狠色噜噜狠狠色综合久| 欧美另类人妖| 亚洲国产天堂久久国产91| 伊人婷婷久久| 狼人天天伊人久久| 日韩午夜av电影| 久久免费国产精品1| 久久精品日韩一区二区三区| 国产精一区二区三区| 欧美视频四区| 欧美午夜www高清视频| 国产精品性做久久久久久| 国产伦理精品不卡| 欧美一站二站| 亚洲日本中文字幕免费在线不卡| 伊人久久成人| 久久视频精品在线| 国产午夜精品一区二区三区视频| 亚洲在线视频观看| 欧美午夜精品久久久久久超碰| 欧美性猛交xxxx乱大交蜜桃| 在线成人欧美| 欧美激情一区二区三级高清视频| 国产精品久久夜| 国产精品高清一区二区三区| 亚洲一区二区三区在线播放| 亚洲欧美影院| 美腿丝袜亚洲色图| 亚洲区第一页| 亚洲欧美日韩国产一区| 午夜精品一区二区三区在线视| 欧美日韩亚洲一区| 在线视频精品一区| 99综合在线| 欧美三级小说| 欧美国产亚洲另类动漫| 午夜一级在线看亚洲| 欧美日韩中文字幕| 亚洲尤物视频在线| 欧美日韩亚洲不卡| 欧美sm重口味系列视频在线观看| 国产视频亚洲精品| 欧美亚洲免费在线| 久久久久高清| 久久久水蜜桃av免费网站| 久久影视三级福利片| 亚洲第一视频网站| 中文精品一区二区三区| 99热免费精品| 91久久精品网| 欧美激情第9页| 亚洲尤物在线视频观看| 午夜久久黄色| 中文国产成人精品久久一| 久久精品国产一区二区三| 国产精品狠色婷| 亚洲欧美久久久久一区二区三区| 今天的高清视频免费播放成人| 国产一区二区电影在线观看| 国产欧美日韩激情| 国产精品视频第一区| 亚洲欧美一区二区三区极速播放| 亚洲一区二区综合| 亚洲黄色视屏| 精品91视频| 久久综合久久综合久久| 欧美日精品一区视频| 亚洲一区二区高清视频| 国产日韩综合| 欧美www视频在线观看| 激情成人综合| 国产性天天综合网| 亚洲精品影视在线观看| 久久电影一区| 亚洲国产成人不卡| 久久精品亚洲一区| 欧美日韩在线电影| 欧美一区永久视频免费观看| 欧美一区二区在线看| 国产精品免费网站| 国产精品中文字幕欧美|