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

正文內(nèi)容

基于cocos2d-x的斗地主游戲開發(fā)畢業(yè)設(shè)計(編輯修改稿)

2024-12-29 16:09 本頁面
 

【文章內(nèi)容簡介】 功能。 ( 6)網(wǎng)絡(luò)通信 斗地主要實現(xiàn)聯(lián)網(wǎng)打牌可通過 SOCKET 技術(shù)來實現(xiàn)服務(wù)器與客服端的通信,再借助多線程技術(shù)創(chuàng)建接受線程即可多接受的數(shù)據(jù)進行處理,從而轉(zhuǎn)發(fā)給其他玩家,打到玩家間互相通信的效果。 ( 7) 人工智能 首先,電腦本身是不會出牌的,但是我們可給電腦玩家設(shè)計出一套出牌及跟牌的優(yōu)先級,再結(jié)合地主與農(nóng) 民身份的區(qū)別做一些特殊處理,即可實現(xiàn)簡單的人工智能。 2 相關(guān)技術(shù)背景 Cocos2dx 簡介 Cocos2Dx 中“ x”包含兩個意思 :一方面是 C++ 的文件擴展 CXX,“ X”表示該項目是由 C++ 編寫的 ;另一方面意味著交叉,這個開源項目的目標是讓用戶創(chuàng)建跨平臺的代碼。 Cocos2Dx 是用 C++ 重寫的 Cocos2D 框架,因為Android 和 iOS 均支持 C++。因為 Cocos2Dx 具有跨平臺的特點,再加上 Cocos2D 全球社區(qū)的支持, Cocos2D 框架 簡單易學(xué)、十分容易快速上手。因此 Cocos2Dx 迅速成為開發(fā)者的首選。經(jīng)過一段時間的發(fā)展,眾多開發(fā)者使用 Cocos2Dx 開發(fā)出了多款游戲,包括捕魚達人、地鐵總動員等 [3]。 2020 年年初, Cocos2Dx 團隊再次開發(fā)出兩個分支,分別是支持 Windows Phone 的 XNA 版和支持 HTML5 的 HTML5 版(后者還得到了 Google 公司的贊助)。此外,在 Zygaena 的幫助下,還研發(fā)出綁定 JavaScript 的 Cocos2Dx 版本。隨著 Cocos2D 及其分支的發(fā)展,其會有更多跨平臺特性,從而可以支持桂林 電子科技大學(xué)畢業(yè)設(shè)計(論文)報告用紙 第 5 頁 共 49 頁 更多的平臺,這會提高開發(fā)者的開發(fā)效率。相信 Cocos2Dx 將會更加受到廣大開發(fā)者的歡迎, Cocos2Dx 引擎也可以擴大其影響,成為全平臺的二維游戲引擎。 Cocos2Dx 繼承了 Cocos2D 的全部特點,包括如下內(nèi)容: ( 1) 流程控制:非常容易地管理不同場景之間的流程控制。 ( 2) 精靈:快速而方便的精靈。 ( 3) 動作:可組合精靈的動作(如移動、旋轉(zhuǎn)和縮放等),使精靈動起來。 ( 4) 特效:包括波浪、旋轉(zhuǎn)和透鏡等特性。 ( 5) 平 面地圖:支持平面地圖和 45 度角地圖。 ( 6) 轉(zhuǎn)換:從一個場景移動到另外一個不同的場景。 ( 7) 菜單:創(chuàng)建內(nèi)部菜單,包括主菜單和游戲菜單。 ( 8) 文本渲染:支持文本渲染標簽。 ( 9) 文檔:包括編程指南、 API 參考、視頻教學(xué)和很多簡單的測試例子。 ( 10) BSD 許可 : BSD( Berkelyan Software Distribution,伯克利軟件套件)開源協(xié)議給予使用者很大的自由。使用者可以自由使用、修改源代碼,也可以將修改后的代碼作為開源或者專有軟件再次發(fā)布。 ( 11) 基于 OpenGL:支持硬件 加速。 數(shù)據(jù)結(jié)構(gòu)及算法 對于一款像斗地主這樣的紙牌游戲,需要對牌進行一些判定及分類,那么一種好的數(shù)據(jù)結(jié)構(gòu)來存儲這些牌數(shù)據(jù)是至關(guān)重要的。 ( 1) 順序容器 vector Vector 是一種順序容器,跟數(shù)組類似,可以將其稱為動態(tài)數(shù)據(jù) [4]。選這種容器來存儲牌數(shù)據(jù)有很多好處,我們可以利用其自帶的一些方法來實現(xiàn)對數(shù)據(jù)的增刪查改,如 push_back(), erase()等。 ( 2) 關(guān)聯(lián)容器 map Map 是鍵 — 值對的集合, map 類型通常可以理解為關(guān)聯(lián)容器:可使用其下標來獲取一個值,正如內(nèi)置數(shù)組類型一樣。而關(guān)聯(lián)的本質(zhì) 在于元素的值與某個特定的鍵相關(guān)聯(lián),而非通過元素在數(shù)組中的位置來獲取 [4]。當向 map容器里添加元素或訪問元素時,如果元素不存在則會自動添加元素,這樣我們在統(tǒng)計同樣牌值牌的時候,可以利用 map 容器對牌的張數(shù)進行統(tǒng)計,進而找出牌的類型。 在設(shè)計一些判斷牌的類型,找出牌的類型算法時,我們可以借助容器一些泛型算法對數(shù)據(jù)進行一些增刪查改,像 map容器可以對數(shù)據(jù)進行分類、統(tǒng)計信息等。 桂林 電子科技大學(xué)畢業(yè)設(shè)計(論文)報告用紙 第 6 頁 共 49 頁 SOCKET 及多線程編程 SOCKET 編程 sockets(套接字)編程有三種,流式套接字( SOCK_STREAM),數(shù)據(jù)報套接字( SOCK_DGRAM),原始套接字( SOCK_RAW) 。 基于 TCP 的 socket 編程是采用的流式套接字 [5]。 【 實現(xiàn)步驟 】 ( 1) 服務(wù)器端編程的步驟: ①加載套接字庫,創(chuàng)建套接字 (WSAStartup()/socket()); ②綁定套接字到一個 IP 地址和一個端口上 (bind()); ③將套接字設(shè)置為監(jiān)聽模式等待連接請求 (listen()); ④請求到來后,接受連接請求,返回一個新的對應(yīng)于此次連接的套接字(accept()); ⑤用返回的套接字和客戶端進行通信 (send()/recv()); ⑥返回,等待另一連接請求; ⑦關(guān)閉套接字,關(guān)閉加載的套接字庫 (closesocket()/WSACleanup())。 ( 2) 客戶端編程的步驟: ①加載套接字庫,創(chuàng)建套接字 (WSAStartup()/socket()); ②向服務(wù)器發(fā)出連接請求 (connect()); ③和服務(wù)器端進行通信 (send()/recv()); ④關(guān)閉套接字,關(guān)閉加載的套接字庫 (closesocket()/WSACleanup())。 ( 3) Socket 編程通用步驟(模板): 第 1 步 加載 /釋放 Winsock 庫 : 加載方法 : WSADATA wsa。 /*初始化 socket 資源 */ if (WSAStartup(MAKEWORD(1,1),amp。wsa) != 0) { return。 //代表失敗 } 釋放方法 : WSACleanup()。 第 2 步 構(gòu)造 SOCKET: 桂林 電子科技大學(xué)畢業(yè)設(shè)計(論文)報告用紙 第 7 頁 共 49 頁 服務(wù)端 :構(gòu)造監(jiān)聽 SOCKET,流式 SOCKET. SOCKET Listen_Sock = socket(AF_INET, SOCK_STREAM, 0) 客戶端 :構(gòu)造通訊 SOCKET,流式 SOCKET. SOCKET Client_Sock = socket(AF_INET, SOCK_STREAM, 0) 第 3 步 配置監(jiān)聽地址和端口 : 服務(wù)端 : SOCKADDR_IN serverAddr ZeroMemory((char *)amp。serverAddr,sizeof(serverAddr))。 = AF_INET。 = htons(1234)。 /*本地監(jiān)聽端口 :1234*/ = htonl(INADDR_ANY)。 /*有 IP*/ 第 4 步 綁定 SOCKET: 服務(wù)端 :綁定監(jiān)聽 SOCKET. bind(Listen_Sock,(struct sockaddr *)amp。serverAddr,sizeof(serverAddr)) 第 5 步 服務(wù)端 /客戶端連接 : 服務(wù)端 :等待客戶端接入 . SOCKET Command_Sock = accept(Listen_Sock, ...) 客戶端 :請求與服務(wù)端連接 . int ret = connect(Client_Sock, ...) 第 6 步 收 /發(fā)數(shù)據(jù) : 服務(wù)端 :等待客戶端接入 .char buf[1024]. 接收數(shù)據(jù) :recv(Command_Sock,buf, ...) 或 發(fā)送數(shù)據(jù) :send(Command_Sock,buf, ...) 客戶端 :請求與服務(wù)端連接 .char buf[1024]. 發(fā)送數(shù)據(jù) :send(Client_Sock,buf, ...) 或 接收數(shù)據(jù) :recv(Client_Sock,buf, ...) 第 7 步 關(guān)閉 SOCKET: 服務(wù)端 :關(guān)閉 SOCKET. closesocket(Listen_Sock) closesocket(Command_Sock) 客戶端 :關(guān)閉 SOCKET. closesocket(Client_Sock) 桂林 電子科技大學(xué)畢業(yè)設(shè)計(論文)報告用紙 第 8 頁 共 49 頁 多線程編程 【多線程編程的步驟】 ( 1) 編寫線程函數(shù) 所有線程必須從一個指定的函 數(shù)開始執(zhí)行,該函數(shù)稱為線程函數(shù),它必須具有下列原型: DWORD WINAPI YourThreadFunc(LPVOID lpvThreadParm)。 該函數(shù)輸入一個 LPVOID 型的參數(shù),可以是一個 DWORD 型的整數(shù), 也可以是一個指向一個緩沖區(qū)的指針, 返回一個 DWORD 型的值。象 WinMain 函數(shù)一樣,這個函數(shù)并不由操作系統(tǒng)調(diào)用, 操作系統(tǒng)調(diào)用包含在 中的非 C運行時的一個內(nèi)部函數(shù),如 StartOfThread,然后由 StartOfThread 函數(shù)建立起一個異常處理框架后,調(diào)用我們的函數(shù) [6]。 以下代碼為兩個線程函數(shù): void FunCount(PVOID arg) { while(1) { printf(funcout is executing.....\n)。 Sleep(10000)。 } } void Function1(PVOID arg) { while(1) { printf(function1 is executing.....\n)。 Sleep(20200)。 } } ( 2) 創(chuàng)建一個線程 一個進程的主線程是由操作系統(tǒng)自動生成,如果你要讓一個主線程創(chuàng)建額外的線程,你可以調(diào)用來 CreateThread 完成。 HANDLECreateThread(LPSECURITY_ATTRIBUTES lpsa, DWORD cbstack, LPTHREAD_START_ROUTINE lpStartAddr, LPVOID lpvThreadParm, DWORDfdw Create, LPDWORDlpID Thread)。 桂林 電子科技大學(xué)畢業(yè)設(shè)計(論文)報告用紙 第 9 頁 共 49 頁 其中 lpsa 參數(shù)為一個指向 SECURITY_ATTRIBUTES 結(jié)構(gòu)的指針。如果想讓對象為缺省安全屬性的話,可以傳一個 NULL,如果想讓任一個子進程都可繼承一個該線程對象句柄,必須指定一個 SECURITY_ATTRIBUTES 結(jié)構(gòu),其中bInheritHandle 成員初始化為 TRUE。參數(shù) cbstack 表示線 程為自己所用堆棧分配的地址空間大小, 0 表示采用系統(tǒng)缺省值 [6]。 參數(shù) lpStartAddr 用來表示新線程開始執(zhí)行時代碼所在函數(shù)的地址,即為線程函數(shù)。 lpvThreadParm 為傳入線程函數(shù)的參數(shù), fdwCreate 參數(shù)指定控制線程創(chuàng)建的附加標志,可以取兩種值。如果該參數(shù)為 0,線程就會立即開始執(zhí)行,如果該參數(shù)為 CREATE_SUSPENDED,則系統(tǒng)產(chǎn)生線程后,初始化 CPU,登記 CONTEXT結(jié)構(gòu)的成員,準備好執(zhí)行該線程函數(shù)中的第一條指令,但并不馬上執(zhí)行,而是掛起該線程。最后一個參數(shù) lpIDThread 是一個 DWORD 類型地址,返回賦給該新線程的 ID 值 [6]。 此外,還可以使用 _beginthread 等函數(shù)來創(chuàng)建線程。 handle=(HANDLE)_beginthread(FunCount,0, NULL)。 handle1=(HANDLE)_beginthread(Function1,0,NULL)。 記得要把 頭文件 include 進來哦! ( 3) 終止線程 如果某線程調(diào)用了 ExitThread 函數(shù),就可以終止自己。 VOIDExitThread(UINTfuExitCode )。 這個函數(shù)為調(diào)用該函數(shù)的線程設(shè)置了退出碼 fuExitCode 后, 就終止該線程。調(diào)用 TerminateThread 函數(shù)亦可終止線程。 BOOLTerminateThread(HANDLE hThread,DWORDdwExitCode)。 該函數(shù)用來結(jié)束由 hThread 參數(shù)指定的線程, 并把 dwExitCode 設(shè)成該線程的退出碼。當某個線程不在響應(yīng)時,我們可以用其他線程調(diào)用該函數(shù)來終止這個不響應(yīng)的線程。 3 開發(fā)環(huán)境的配置 開發(fā)環(huán)境的配置 所謂“工欲善其事,必先利其器”。學(xué)習(xí) Cocos2Dx 的開發(fā)技巧,首先從搭建跨平臺的開發(fā)環(huán)境開始。目前, Cocos2Dx 以上版本支持 Win3 Android、iOS 三個平臺的開發(fā),接下來將分別介紹在這三個環(huán)境下的開發(fā)環(huán)境搭建。一個完整的開發(fā)環(huán)境包括開發(fā)、編譯、鏈接、運行和調(diào)試等幾部分,所以需要相應(yīng)的桂林 電子科技大學(xué)畢業(yè)設(shè)計(論文)報告用紙 第 10 頁
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1