




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
基于linux下的網(wǎng)絡(luò)型五子棋嵌入式課程設(shè)計之涉及提綱基于linux下的網(wǎng)絡(luò)型五子棋系統(tǒng)簡介MiniGUI下的窗口、菜單及消息框的介紹本地人人對抗人機對抗網(wǎng)絡(luò)人人對抗系統(tǒng)介紹
通過嵌入式系統(tǒng)平臺上的觸摸屏和LCD屏實現(xiàn)本地人人對抗、人機對抗和聯(lián)網(wǎng)人人對抗三種模式的五子棋,并伴隨著優(yōu)雅的音樂,以增強娛樂性。
硬件平臺基于intel公司的xscalePXA272實驗平臺功能:本地人人對抗
在嵌入式平臺上,基于觸摸屏進行人與人之間的對抗。人機對抗
添加相應(yīng)的人工智能算法,實現(xiàn)人與嵌入式平臺之間對抗的功能。
網(wǎng)絡(luò)人人對抗基于tcp/ip的網(wǎng)絡(luò)間對抗涉及技術(shù):
Linux系統(tǒng)開發(fā)、MiniGui圖形界面開發(fā)技術(shù)、搭建局域網(wǎng)絡(luò)、socket網(wǎng)絡(luò)編程技術(shù)、多線程技術(shù)、串口操作、音視頻播放技術(shù),人工智能算法。MiniGUI概述面向嵌入式系統(tǒng)和實時系統(tǒng)的用戶界面支持系統(tǒng)完備的多窗口機制對話框和預(yù)定義的控件類事件驅(qū)動機制多字符多字體支持MiniGUI運行模式
MiniGUI-Threads:可在不同線程中建立多個窗口,但這些窗口均在一個進程中或地址空間中運行MiniGUI-Lite:每個程序是單獨的進程,每個進程可創(chuàng)建多個窗口MiniGUI-Standalone:可以獨立進程方式運行,不需多線程的支持主窗口MiniGUI中的主窗口沒有窗口類的概念,應(yīng)通過初始化一個MAINWINCREATE結(jié)構(gòu),然后調(diào)用CreateMainWindow函數(shù)來創(chuàng)建一個主窗口
HWNDhMainWnd;MAINWINCREATECreateInfo;CreateInfo.dwStyle=………h(huán)MainWnd=CreateMainWindow(&CreateInfo);主窗口的銷毀1)關(guān)閉主窗口2)主窗口過程接收到MSG_CLOSE消息3)處理如下:
caseMSG_CLOSE: DestroyMainWindow(hWnd); PostQuitMessage(hWnd); return0;4)while(GetMessage(&Msg,hMainWnd)) {... }DestroyMainWindow銷毀一個主窗口,但不會銷毀主窗口所使用的消息隊列以及窗口對象本身。因此,應(yīng)用程序要在線程或進程的最后使用MainWindowCleanup最終清除主窗口所使用的消息隊列以及窗口對象本身。菜單菜單通常依附于窗口中(稱為普通菜單),或者以獨立的、可彈出形式出現(xiàn)(稱為彈出式菜單)。主要是提供給用戶一種快捷選擇的方式。創(chuàng)建普通菜單在程序中,我們首先要建立菜單,然后將菜單句柄傳遞給創(chuàng)建主窗口的函數(shù)。當(dāng)主窗口顯示出來時,我們創(chuàng)建的菜單將會在標(biāo)題欄下顯示出來。當(dāng)用戶用鼠標(biāo)激活菜單并選擇了菜單項后,該菜單所依附的窗口會收到MAND消息。菜單創(chuàng)建需要兩個過程:建立菜單欄;建立菜單欄中各個菜單的子菜單。HMENUcreatepmenuabout_chess(void){HMENUhmnu;MENUITEMINFOmii;memset(&mii,0,sizeof(MENUITEMINFO));mii.type=MFT_STRING;mii.id=0;mii.typedata=(DWORD)"About";hmnu=CreatePopupMenu(&mii);
memset(&mii,0,sizeof(MENUITEMINFO));mii.type=MFT_STRING;mii.state=0;mii.id=GAME_ABOUT;mii.typedata=(DWORD)"AboutGobang";InsertMenuItem(hmnu,3,TRUE,&mii);returnhmnu;}MessageBox的函數(shù)說明消息框是用于給用戶一些提示或警告的主窗口,屬于內(nèi)建的對話框類型。函數(shù)原型為intGUIAPIMessageBox(HWNDhParentWnd,constchar*pszText,constchar*pszCaption,DWORDdwStyle)這個函數(shù)是可以顯示帶有幾個按鈕的消息框,程序可以通過用戶點擊不同的按鈕來獲得不同的返回值,從而進行一些操作。其中HWNDhParentWnd為主窗口的句柄,constchar*pszText為顯示在消息框中的文字提示信息,constchar*pszCaption為消息框的名稱,DWORDdwStyle為消息框的類型,例如有幾個按鈕等。本程序中的一個消息框函數(shù)舉例MessageBox(hwnd,"Newgame?VsComputer!","Gobang",MB_OK|MB_OKCANCEL|MB_ICONQUESTION)==IDOKGame菜單舉例GameVsHumanVsComputerOnlineGameQuitNewgame?VsHuman!Newgame?VsComputer!Onlinegame?Areyousuretoquit?人人對戰(zhàn)(在嵌入式平臺上,基于觸摸屏進行)首先選擇開始游戲,進入人人對戰(zhàn)模式,然后黑子和白子依次按照順序落子,每一方落子之后,會進行相應(yīng)的判斷,在此子的八個方向上有沒有連續(xù)的五個同色棋子,如果有則此方獲勝,顯示相應(yīng)的提示信息,游戲結(jié)束。如果沒有,則對方繼續(xù)落子,直到一方獲勝為止。在本程序的此模式下設(shè)有悔棋的功能,具體函數(shù)流程圖如下:是是否‘否人機對戰(zhàn)中的電腦智能人機對戰(zhàn)模式中,電腦的人工智能是本項目中算法的難點,怎樣平衡功守,讓電腦的下棋不至于象傻瓜一樣,并有一定的進攻性,有許多要考慮的情況。以攻為主,功守兼?zhèn)淇傮w流程人下棋人方勝利是宣布人方勝利否掃描整個棋盤,找最高優(yōu)先級在適當(dāng)位置下子此優(yōu)先級可設(shè)置成1(最高)棋局分析優(yōu)先級也是1棋局分析優(yōu)先級為2棋局分析優(yōu)先級為3棋局分析優(yōu)先級為4棋局分析優(yōu)先級為5棋局分析優(yōu)先級為6棋局分析背景音樂的添加Exec函數(shù)族Intexecl(constchar*path,constchar*arg,…)constchar*path參數(shù)是路徑名path,constchar*arg為參數(shù)列表execl("/host/madplay","madplay","fuyu.mp3")背景音樂的添加最初打算用多線程結(jié)果。。。死機線程間的資源占用問題用多進程實現(xiàn)。if(fork()==0){ execl("/host/madplay","madplay","fuyu.mp3"); exit(0);}網(wǎng)絡(luò)人人對抗發(fā)表流程搭建網(wǎng)絡(luò)連接本方下棋并發(fā)送棋子信息接收棋子信息并處理搭建網(wǎng)絡(luò)連接服務(wù)器端:客戶端:
服務(wù)器端首先服務(wù)器端程序創(chuàng)建了一個永久的套接口監(jiān)聽服務(wù)請求;當(dāng)客戶機連接到服務(wù)器時,就建立了一個臨時套接口。每次客戶機連接到服務(wù)器,一個臨時套接口就在客戶機和服務(wù)器之間打開。接下來的數(shù)據(jù)既支持為客戶連接創(chuàng)建的永久套接口,又支持臨時套接口:
structsockaddr_inmy_addr; structsockaddr_intheir_addr; intsin_size;首先創(chuàng)建一個socket通信,并獲得socket描述符:
sock_fd=socket(AF_INET,SOCK_STREAM,0);接下來填寫結(jié)構(gòu)sockaddr_in必要的域sin:
my_addr.sin_family=AF_INET; my_addr.sin_port=htons(MYPORT); my_addr.sin_addr.s_addr=0; bzero(&(my_addr.sin_zero),8);下面我們可以使用函數(shù)bind將套接口和端口2000連在一起:
bind(sock_fd,(structsockaddr*)&my_addr,sizeof(structsockaddr)最后我們開始監(jiān)聽連接到2000端口的新套接口:(服務(wù)器端使用)
listen(sock_fd,BACKLOG);new_fd用來接收客戶端的socket連接,服務(wù)器端的程序會一直阻塞到有一個客戶程序發(fā)出了連接.其返回值則作為新的socket處理代碼,供send,recv函數(shù)使用。
new_fd=accept(sock_fd,(structsockaddr*)&their_addr,&sin_size);當(dāng)該調(diào)用成功返回后,我們即建立起來了網(wǎng)絡(luò)連接??蛻舳?/p>
為了監(jiān)聽服務(wù)器端的發(fā)送服務(wù)請求,客戶端建立了一個臨時套接口,以下的數(shù)據(jù)是用來建立臨時套接口與服務(wù)器的連接: intsock_fd; structsockaddr_intheir_addr;客戶端程序必須知道主機的IP地址,當(dāng)我們知道主機的IP地址后,就可以對結(jié)構(gòu)sockaddr_in中的數(shù)據(jù)pin賦值:
their_addr.sin_family=AF_INET; their_addr.sin_port=htons(MYPORT); their_addr.sin_addr.s_addr=inet_addr("192.168.0.2"); bzero(&(their_addr.sin_zero),8);建立與主機進行套接口連接的工作已經(jīng)準(zhǔn)備就緒:
sock_fd=socket(AF_INET,SOCK_STREAM,0);最后我們使用該套接口連接到主機:
connect(sock_fd,(structsockaddr*)&their_addr,sizeof(structsockaddr);當(dāng)服務(wù)器忙,本次調(diào)用可能會阻塞(等待)。當(dāng)對connect的調(diào)用成功返回時,我們就完成了網(wǎng)絡(luò)的連接。當(dāng)我們建立好網(wǎng)絡(luò)連接后,服務(wù)器端和客戶端就可以互相通信了。服務(wù)器端
socket-->bind-->listen-->accept-->recv、send客戶端
socket-->connect-->recv、send服務(wù)器端和客戶端建立網(wǎng)絡(luò)連接示意圖本方下棋并發(fā)送棋子信息搭建好網(wǎng)絡(luò)連接以后,我們就可以開始網(wǎng)絡(luò)人人對抗游戲。在此,我們默認(rèn)服務(wù)器端執(zhí)黑棋,客戶端執(zhí)白棋,并且默認(rèn)開始網(wǎng)絡(luò)人人對抗新游戲時,總是服務(wù)器端(執(zhí)黑子者)先下子。在此我們需要定義一個網(wǎng)絡(luò)標(biāo)示位flag_online,用于提示和監(jiān)視該哪方下子。在這個小模塊中,服務(wù)器端和客戶端原理基本一樣,在此,我們僅以服務(wù)器端為例,首先,根據(jù)網(wǎng)絡(luò)標(biāo)示位flag_online來判斷黑子是否能下子,若能下,則服務(wù)器端執(zhí)黑棋下子。當(dāng)下子以后,程序進行判斷,判斷點擊位置是否在有效范圍內(nèi),若無效,則不繪棋子。當(dāng)有效時,經(jīng)計算后在相應(yīng)的位置繪出黑子。此后,立即發(fā)送該黑子的信息(位置)。同是對方接收到該黑子的位置信息后,進行相應(yīng)的處理,在第三部分詳細(xì)說明。然后,調(diào)用棋子判斷輸贏算法,若黑子贏,給出提示信息,然后重新開始游戲。若黑子不贏,則置網(wǎng)絡(luò)標(biāo)示位flag_online=0,此時,在等待對方下子,在對方下子之前,禁止黑子下子。點擊按鍵拆分點擊位置的x,y坐標(biāo)坐標(biāo)是否有效發(fā)送該位置信息黑子是否贏給出提示初始化棋盤YNYYNN退出下棋并發(fā)送下棋信息流程圖信息置標(biāo)志位flag_online=0允許黑子下接收棋子信息并處理線程:是在共享內(nèi)存空間中并發(fā)的多道執(zhí)行路徑,他們共享一個進程的資源,如文件描述符和信號處理。線程能夠檢查程序中潛在的并行性,能夠找出同時執(zhí)行的任務(wù)。我們知道linux
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 萬兆網(wǎng)絡(luò)在各行業(yè)中的應(yīng)用
- 太陽能熱電聯(lián)產(chǎn)項目后期運營與維護
- 高端裝備數(shù)字化項目建設(shè)周期與進度安排
- 商品房屋租賃合同示范文本(3篇)
- 第3章 廣袤浩瀚的宇宙第3節(jié) 人類對宇宙的探索 第二課時教學(xué)設(shè)計-2024-2025學(xué)年浙教版七年級上冊科學(xué)
- 二零二五年度金融數(shù)據(jù)托管與風(fēng)險管理協(xié)議匯編
- 《第八章 第一節(jié) 自然資源的開發(fā)利用》教學(xué)設(shè)計教學(xué)反思-2023-2024學(xué)年高中化學(xué)人教版(2019)必修第二冊
- 二零二五年度網(wǎng)絡(luò)主播與直播APP解除合同協(xié)議
- 二零二五年度房屋租賃中介與租客租賃合同修改協(xié)議
- 2025年幼兒園大班健康骨骼標(biāo)準(zhǔn)教案考必過
- 《陶瓷彩繪裝飾工藝》課程標(biāo)準(zhǔn)
- 2024年醫(yī)學(xué)高級職稱-全科醫(yī)學(xué)(醫(yī)學(xué)高級)筆試歷年真題薈萃含答案
- 預(yù)防頸動脈斑塊
- 半生熟紙制作工藝
- 國防動員建設(shè)總體規(guī)劃方案
- 教案檢查總結(jié)及整改措施
- 商業(yè)銀行經(jīng)營管理課件
- ESD靜電管理標(biāo)準(zhǔn)課件
- 19.SL-T19-2023水利基本建設(shè)項目竣工財務(wù)決算編制規(guī)程
- 火葬場管理制度
- 《老年護理》教學(xué)教案
評論
0/150
提交評論