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

正文內容

基于cocos2d-x的斗地主游戲開發(fā)畢業(yè)設計-資料下載頁

2025-11-14 16:09本頁面

【導讀】斗地主是一款風靡全國的紙牌游戲,玩法簡單,娛樂性強,要開發(fā)一款斗地主游戲,如何才能一次開發(fā),多個平臺復用?論從成本或效率考慮,cocos2d-x無疑是一個最佳選擇。分為網絡和單機兩個版本供玩家選擇。主要包括自動發(fā)牌、玩家叫分、出牌。信,單機版則實現(xiàn)電腦AI的人工智能。本動作、精靈、導演、場景、布景層及數據存儲等基本技術。的同時還省了流量。

  

【正文】 的精靈幀及一些屬性 (像索引值等 ),更新完圖片后再繪制新添加的精靈。至此界面上顯示 的牌位置發(fā)生了一定的改動,最后只要判斷牌的張數達到 17張時動態(tài)發(fā)牌結束,進入到下一個環(huán)節(jié)。 ( 3) 提示出牌 為了方便玩家在跟牌時能方便的找到同類型的牌,設計提示玩家出牌的功能是很有必要的。實現(xiàn)提示出牌的功能首先需要判斷上家出牌的張數、類型,然后從玩家的整手牌中找出所有符合此類型并且張數一樣的牌 (同一類型的牌張數有桂林 電子科技大學畢業(yè)設計(論文)報告用紙 第 19 頁 共 49 頁 可能不同 ),并不是所有類型相同的牌都符合出牌規(guī)則,還需要比較牌的大小,只有當滿足以上條件的同時還需要大過上家的牌。要實現(xiàn)這些小的算法需要借助vectorint、 mapint,int和 mapint,vectorint來完成牌的一些分類、計數和存儲。 ( 4) 托管 當玩家有事或者時間到還沒有出牌時等等情況時,都需要有一個自動幫助玩家出牌的功能 —— 托管。實現(xiàn)托管功能需要處理兩種情況:跟牌和主動出牌。跟牌的情況處理比較簡單,只需要根據提示功能找出的牌數據,然后找出大過上家的最小牌數據即可;主動出牌的情況則類似電腦玩家自動出牌,詳情參考下文“電腦自動出牌和跟牌”。 ( 5) 電腦自動出牌和跟牌 在單機版的人工智能模塊需要設計一個重要的功能 —— 電腦自動出牌和跟牌。跟牌功能的設計較為簡單,類似于上文所說的 托管的跟牌情況,根據上家出的牌來出牌;自動出牌則需要根據大部分玩家出牌的一些喜歡及一些經驗設計好出牌的優(yōu)先級,本文所設計的斗地主游戲只是簡單的根據牌的類型人為了設計了出牌順序 (優(yōu)先級 ),主要是為了不破壞整副牌的完整性 (不會因為出的牌而破壞牌的類型多樣性 )。出牌順序初步設計為:飛機帶翅、雙順、單順、三帶一 (二 )、四帶二 (2 張或 2對 )、三順、三不帶、炸彈、對子、單張。 桂林 電子科技大學畢業(yè)設計(論文)報告用紙 第 20 頁 共 49 頁 軟件的框架 本文設計的斗地主游戲分為網絡和單機兩個版本,其中網絡版有獨立的服務器與之相連,單機版則集成在 客戶端的單機菜單項中,也就是說通過網絡版的客戶端來啟動單機版的進程。(詳見下面 41 軟件框架流程圖) 41 軟件框架流程圖 斗地主游戲客戶端 登錄 注冊 單機 單機版游戲界面 判斷用戶賬戶和密碼是否正確 斗地主游戲服務器 接收數據 游戲結束再玩一局? 結束游戲 游戲結束再玩一局 結束游戲 網絡版游戲界面 用戶注冊界面 是 是 是 否 否 否 發(fā)送數據到服務器 桂林 電子科技大學畢業(yè)設計(論文)報告用紙 第 21 頁 共 49 頁 5 軟件設計與實現(xiàn) (詳細設計 ) 數據結構及算法的設計 要開發(fā)一款紙牌類游戲,里面必然會牽涉到大量的算法及數據處理,一個好的算法實現(xiàn)需要借助一個好的數據結構。軟件中涉及到數據結構和核心算法的兩個類主要是卡牌類 Cards 和玩家類 Player。 ( 1) Cards 類設計 表 51 Cards 類核心函數 函數原型 函數功能 vectorint GetRandomCard() 隨機產生一副牌 vectorint SplitCard(int ,vectorint) 獲取一手牌 (某位玩家 ) vectorint getHoleCard(vectorint) 獲取底牌 CCRect getRect(int) 根據牌標識獲取牌位置 int getValueByIndex(int) 根據索引獲取牌的大小 值 bool IsSanDai(mapint,int) 判斷三帶一 (二 ) bool IsSiDai(mapint,int) 判斷四帶二 (2 張或 2 對 ) bool IsShunZi(mapint,int,int) 判斷順子 bool IsDanShun(mapint,int) 判斷單順 bool IsShuangShun(mapint,int) 判斷雙順 bool IsSanShun(mapint,int) 判斷三順 bool IsPlane(mapint,int,int) 判斷飛機帶翅 int getCardType(vectorint) 獲取牌的類型 int getCardKeyValue(vectorint) 獲取 (多張 )牌的關鍵值 int getBigCardCount(vectorint) 得到大牌的張數 (2或王的數目 ) bool CompareCardValue(vectorint,vectorint) 比較兩手牌的大小 vectorint getNeedCard(vectorint,int ,int n) 根據類型獲取提 示牌 vectorintgetCardByHitCard(vectorint,vectorint) 從提示牌中取大過上家 的第一手牌 bool IsBigLastCard(vectorint,vectorint) 判斷是否有牌大過上家 Cards 類主要是提供判牌的一系列靜態(tài)方法供其他類使用。之所以全部設計為靜態(tài)方法是為了簡化類結構,可以服務于整個程序。為了更好的實現(xiàn)我們需要的算法,利用 C++STL 模板可以很好組織數據。在設計軟件時實例化模板為vectorint做為動態(tài)數組來 使用,其目的只是為了存儲數據及一些增刪查改,在 Cards 類主要作為函數參數來傳遞;在獲取牌的類型時,像判斷對子、三帶、飛機等等的類型時需要統(tǒng)計同一牌值的張數,軟件使用 mapint,int來組織數桂林 電子科技大學畢業(yè)設計(論文)報告用紙 第 22 頁 共 49 頁 據,第一個參數來表示牌值,第二個參數表示張數,除此之外 map 容器還有一個特性:按升序自動排列數據;在設計提示出牌算法時,組織數據也是非常關鍵的,再此我們選擇 mapint,vectorint結構,因為出牌必須要知道牌的索引,第二個參數不再表示牌的張數,而是同一牌值的所有索引值,這樣不僅能正確處理牌的類型,還 能很好的保存數據。 Cards 類主要是圍繞發(fā)牌、判牌、比牌、取牌等展開設計。其中,提供給發(fā)牌的方法主要有:隨機產生一副牌、獲取一手牌 (給某個玩家 )、獲取底牌;提供給判牌的方法主要有:判斷牌型子方法(單順、雙順、三帶、四帶、飛機帶翅等)、獲取牌的類型、通過索引獲取牌值;提供給比牌的方法主要有:獲取牌的關鍵值、比較兩手牌的大小;提供給取牌的方法有:根據類型獲取提示牌、從提示牌中取第一手大過上家的牌、判斷提示牌中是否有大過上家的牌。 ( 2) Player 類設計 表 52 Player 類核心函數 函數原型 函數功能 static void CharToInt(char*,vectorintamp。) 將字符信息轉換為牌數據 static void IntToChar(vectorint,char*) 將牌數據轉換為字符數據 int getAIPlayerMaxScore() 獲取電腦玩家最大叫分數 vectorint getNeedOutCard() 得到電腦玩家應出的牌 Player 類是一個玩家類,在設計主要是提供玩家一些牌的顯示操作和一些牌數據的處理, CharToInt()函數跟 IntChar()函數主要應用于網絡版在收發(fā)數據時進行的數據類型轉換。 getAIPlayerMaxScore()函數沒有過多的技巧,主要還是調用 Cards 類提供的一些靜態(tài)方法。 getNeedOutCard()可以說是單機版電腦玩家的靈魂算法,里面一個非常關鍵的結構 vectorvectorint,該結構主要是構造電腦玩家出牌的優(yōu)先級,其類型參數第一個元素表示牌的類型,此后便是所有可能出現(xiàn)此類型的牌的張數。構造玩家出牌的優(yōu)先級后,之后遍歷優(yōu)先級數據結構找出最先存在的牌型,就很容器得到返回值了。 (亦可以用 mapint,vectorint來代替 vectorvectorint)。 數據庫的設計 本文設計的都地主游戲需要存儲的信息并不多,只需要保存好玩家的個人信息,用于用戶的登錄驗證和打牌時玩家游戲信息的顯示。由于本文設計的游戲對數據庫的要求并不是很高,故使用 Cocos2Dx 中支持的存儲類 CCUserDefault作為一個輕量級數據庫來使用。它支持存儲的數據類型包括 bool(布爾型 )、int(整型 )、 float(浮點型 )、 double(雙精度浮點型 )、 string(字符串型 )。CCUserDefault 類 常用函數如 表 53 所示。 桂林 電子科技大學畢業(yè)設計(論文)報告用紙 第 23 頁 共 49 頁 表 53 CCUserDefault 類的常用函數 函數名 返回類型 描述 getBoolForKey 布爾型 根據傳入的鍵值參數返回相應的布爾值,第二個參數為可選的默認值,一旦該鍵值的值不存在,將返回默認值 getIntergerForKey 整型 同上 getFloatForKey 浮點型 同上 getStringForKey 字符串型 同上 setBoolForKey 空 第一個參數為鍵,第二參數為對應的值,布爾型存檔 setIntergerForKey 空 同上 setFloatForKey 空 同上 setStringForKey 空 同上 flush 空 存儲為 XML文檔 使用此類來存儲及提取數據都是很容易實現(xiàn)的,存儲時調用 setTypeForKey系列函數以鍵值對的形式存儲數據,獲取時調用 getTypeForKey 系列函數傳遞鍵參數返回其值,最后調用 flush 以 XML 文檔保存即可。(詳見表 54) 表 54 玩家信息 字段名 數據類型 大小 備注 Account VARCHAR 20 賬號 Pwd VARCHAR 20 密碼 Nickname VARCHAR 10 昵稱 Score INTEGER 4 游戲積分 Level VARCHAR 10 游戲等級 模塊的設計與實現(xiàn) 用戶登錄注冊及驗證模塊 登錄注冊界面通過 CCLayer 類來實現(xiàn),與登錄注冊界面相關的類如下: class HostScene : public cocos2d::CCLayer{} 只需在 init()函數中添加相關控件即可簡單地設計出登錄注冊界面,關鍵代碼如下: bool HostScene::init() { 桂林 電子科技大學畢業(yè)設計(論文)報告用紙 第 24 頁 共 49 頁 AddEditBox(this,1)。 //添加賬號和密碼編輯框 AddMenuItemOrder1(this)。 //添加 1級 (Z次序 )菜單項和標簽 AddSprites(this)。 //添加精靈圖片 } 注冊及驗證功能則需要 CCUserDefault 來進行數據的存取。 注冊部分采用鍵 — 值 (鍵 )— 值的方式來存儲數據,關鍵代碼如下: CCUserDefault::sharedUserDefault()setStringForKey(phoneStr, pwdStr)。 CCUserDefault::sharedUserDefault()setStringForKey(pwdStr, nickNameStr)。 驗證部分只需要取出數據,然后判斷賬號是否存在,若過存在且密碼正確則跳轉到游戲界面,不存在則無法跳轉,關鍵代碼如下: CCEditBox* phoneEdit = (CCEditBox*)getChildByTag(ZHAN_HAO)。 CCEditBox* pwdEdit = (CCEditBox*)getChildByTag(MI_MA)。 const char* phoneStr = phoneEditgetText()。 const char* pwdStr = pwdEditgetText()。 string ret = CCUserDefault::sharedUserDefault()getStringForKey(phoneStr)。 if(!()amp。amp。strcmp((),pwdStr)==0){} 網絡通信模塊 服務器:服務器是一個控制臺程序,只需要在后臺顯示數據的收發(fā)信息。首先設計一個與客戶端通信的核心類 CNatServer,它主要用來處理網絡通信的各個環(huán)節(jié),對此類的設計如下: 表 55 CNatServer 核心功能 函數原型 函數功能 void IntToChar(vectorint,char*) 將牌數據轉換為字符信息 bool InitSocket() 初始化服務器套接字 void ListenScok(int MaxUserCount) 監(jiān)聽套接字 void getRandomCard() 隨機產
點擊復制文檔內容
公司管理相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1