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

正文內(nèi)容

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

2025-06-27 17:14本頁面
  

【正文】 會叫分,電腦玩家叫分的依據(jù)是根據(jù)Player類的getAIPlayerMaxScore()方法來獲取最大叫分。方法的實現(xiàn)如下:int Player::getAIPlayerMaxScore(){ vectorint hombCard。 hombCard = Cards::getNeedCard(NowCardData,4,())。 if(Cards::getBigCardCount(NowCardData)=2amp。amp。()!=0) return 3。 if(()!=0||Cards::getBigCardCount(NowCardData)=3) return 2。 if(Cards::getBigCardCount(NowCardData)=2) return 1。 return 0。}算法設(shè)計:首先是找出玩家的牌中是否存在炸彈,然后找出玩家牌中大牌(王)的張數(shù)。如果玩家大牌數(shù)超過2張且有炸彈是叫3分,大牌數(shù)超3張或有炸彈時叫2分,大牌數(shù)超過2張但沒有炸彈時叫1分,其他情況則默認(rèn)不叫分。(2)跟牌當(dāng)其他玩家出完牌,電腦玩家跟牌時需根據(jù)其他玩家的角色進(jìn)行出牌。如果電腦玩家是地主,則電腦玩家會在不嚴(yán)重影響牌的完整性的情況下盡可能壓其他玩家的牌。如果電腦玩家是農(nóng)民,面對地主時如果是地主下家則會竭盡全力去壓地主的牌,若是上家則在不影響牌的完整性的情況下盡力壓牌;面對農(nóng)民時如果牌值不大且不是特殊牌(飛機(jī)、雙順、四帶二、炸彈等)時會壓農(nóng)民的牌,否則會選擇過牌。(3)主動出牌主動出牌時需要電腦作出綜合性的出牌策略,為了讓電腦變得更加強(qiáng)大,我們會讓電腦知道其他的玩家的牌,會對牌的類型和牌的完整性作出一些分析,出牌時會要么避開其他玩家牌的強(qiáng)勢類型牌或者出那些能破壞其他玩家牌完整性的牌。要實現(xiàn)此環(huán)節(jié)的人工智能需要Cards類的配合(通過調(diào)用Cards類的靜態(tài)方法來輔助實現(xiàn)一些算法),在此解析幾個頻繁調(diào)用的重要方法:【獲取牌的類型】函數(shù)原型:int getCardType(vectorint);算法設(shè)計:首先構(gòu)造一個mapint,int結(jié)構(gòu)用來對牌的張數(shù)進(jìn)行統(tǒng)計,目的是為了更好的判斷出牌的類型。然后計算出需要判斷牌類型的張數(shù),知道張數(shù)后便可找出可能擁有這個張數(shù)的所有牌類型,然后挨個去判斷牌是否是那種類型即可。判斷特殊徐牌的類型需要設(shè)計許多子方法,但是mapint,int第一個元素存儲的是牌值,第一個元素存儲的是張數(shù),因此通過牌值跟張數(shù)組合便很容易判斷出牌的類型了?!精@取牌的關(guān)鍵值】函數(shù)原型:int getCardKeyValue(vectorint);算法設(shè)計:構(gòu)造一個mapint,int結(jié)構(gòu)來統(tǒng)計牌的張數(shù),在張數(shù)最多的所有牌中找出牌值最大的便是此種牌類型的關(guān)鍵值。【比較兩手牌的大小】函數(shù)原型:bool CompareCardValue(vectorint,vectorint);算法設(shè)計:getCardKeyValue()方法作用的對象只是同類型的牌,當(dāng)有一手牌是炸彈另一手不是時需要做特殊處理,如果是同類型的牌則直接調(diào)用getCardKeyValue()方法比較大小即可?!靖鶕?jù)牌的類型和張數(shù)獲取同類型的牌】函數(shù)原型:vectorint getNeedCard(vectorint,int,int)。算法設(shè)計:找牌跟判牌可以看做兩個相反的過程,判牌是通過原始牌數(shù)據(jù)依照牌的類型及張數(shù)一一去核心是否是此類型的牌,并不需要保存過多的數(shù)據(jù);而找牌則是根據(jù)提供的牌類型及牌的張數(shù),結(jié)合牌的類型的一些特征找出此種類型的所有可能的牌數(shù)據(jù)。實現(xiàn)此算法首先構(gòu)造mapint,vectorint結(jié)構(gòu)用來保存牌值所對應(yīng)的所有索引值,因為返回值需要的是具體的索引值,由于vectorint傳遞的牌數(shù)據(jù)是排好序的,所以將vectorint結(jié)構(gòu)轉(zhuǎn)換為mapint,vectorint結(jié)構(gòu)比較容易實現(xiàn);然后根據(jù)提供的牌類型及牌的張數(shù)組合出所有可能與提供牌的類型一樣的牌數(shù)據(jù),用vectorint線性保存返回其值即可。 重玩模塊當(dāng)有一位玩家出完手中的所有牌時,游戲結(jié)束,為了方便玩家繼續(xù)游戲,設(shè)計重玩模塊。重玩設(shè)計起來比較簡單,在游戲結(jié)束后在游戲界面的中心位置添加準(zhǔn)備菜單項,當(dāng)玩家單擊菜單項后先繪制準(zhǔn)備圖片提示重玩準(zhǔn)備中,然后讓準(zhǔn)備精靈執(zhí)行一個延時動作跟回調(diào)動作,在其回調(diào)函數(shù)ShowBack()中重選構(gòu)造一個PlaygameScene對象,然后讓導(dǎo)演類CCDirector重選運(yùn)行此場景,這樣玩家可重新此游戲。6 軟件測試 測試環(huán)境對測試環(huán)境的要求見表61。表61 測試環(huán)境及工具硬件要求配置良好的臺式機(jī)或筆記本一臺、Android手機(jī)一部()軟件要求安裝VS2010+測試平臺Win32(Windows XP和Windows 7)、Android 測試準(zhǔn)則軟件測試設(shè)定的一些標(biāo)準(zhǔn)及要求見表62。表62 測試模塊及核心功能模塊測試核心功能測試預(yù)期效果用戶登錄注冊及驗證登錄驗證功能能夠識別出賬號和密碼是否正確(賬號不存在或密碼錯誤)自動發(fā)牌自動發(fā)牌實現(xiàn)抖動、插入式的隨機(jī)發(fā)牌方式玩家叫分叫分功能叫分邏輯清晰,能正確禁用部分菜單項出牌選牌托管功能能夠自動跟牌、主動出牌提示功能在跟牌時能提示玩家那些牌符合出牌規(guī)則重選取消所有處于彈起狀態(tài)的牌人工智能電腦智力能夠正常跟牌,有選擇性地主動出牌 功能測試 登錄驗證功能的測試在斗地主網(wǎng)絡(luò)版中,對于每個玩家都需要登錄驗證方可進(jìn)入游戲。登錄前若沒有賬號需先注冊。 用戶注冊界面注冊成功后,開始驗證賬號密碼,若賬號密碼正確則進(jìn)入游戲界面,否則繼續(xù)停留在登錄主界面。 登錄前與登錄后的界面 自動發(fā)牌功能的測試在接受到服務(wù)器發(fā)送的發(fā)牌指令后,客戶端會自動發(fā)牌至游戲界面,發(fā)牌過程具有動態(tài)性(動態(tài)添加牌)、抖動性(牌的起始位置會隨牌的數(shù)量發(fā)生改變)、隨機(jī)插入行(不按大小發(fā)牌,發(fā)牌后插入到相應(yīng)位置)。 發(fā)牌過程1 發(fā)牌過程2 叫分功能的測試玩家如果沒有主動叫地主的權(quán)利時,玩家需根據(jù)上家所叫分?jǐn)?shù)禁用掉部分叫分菜單項,客戶端會顯示各個玩家的叫分信息。 本家開始叫分 下家輪換叫分 托管功能的測試當(dāng)玩家啟動托管功能后,如果是跟牌會出大過上家牌的最小牌,;如果是主動出牌會選擇性地出某種類型的牌。 托管前與托管后(跟牌) 托管前與托管后(主動出牌) 提示功能的測試提示功能只有在跟牌時才可用,主動出牌時此功能被禁用。玩家可以通過多次單擊提示菜單項來獲取不同的提示牌,可循環(huán)提示,、。 第一單擊提示菜單項 第二單擊提示菜單項 第三單擊提示菜單項 重選功能的測試當(dāng)玩家對自己選擇的牌不滿意時,可通過單擊重選菜單項來取消所有選擇的牌,以便玩家重新選擇。圖 玩家單擊重選菜單項前 玩家單擊重選菜單項后 電腦智力的測試在玩家使用斗地主單機(jī)版游戲時,電腦玩家會自動叫分;其他玩家出牌后,電腦玩家會自動跟牌;電腦玩家獲得主動出牌權(quán)限后,會按照一定的優(yōu)先級選擇性地出牌。 電腦玩家自動跟牌 電腦玩家主動出牌7 總結(jié)經(jīng)過漫長的設(shè)計與開發(fā),最終完成了斗地主游戲的網(wǎng)絡(luò)版和單機(jī)版的。網(wǎng)絡(luò)版實現(xiàn)了用戶登錄注冊及驗證、自動發(fā)牌、玩家叫分、選牌出牌、重玩等基本模塊,這些功能都需要借助服務(wù)器與客戶端的通信(控制游戲邏輯)來輔助實現(xiàn)。單機(jī)版在保留自動發(fā)牌、玩家叫分、選牌出牌、重玩等基本模塊外,還增加了人工智能模塊。本游戲的特色功能主要有動態(tài)發(fā)牌、智能托管及循環(huán)提示等。動態(tài)發(fā)牌主要通過時刻改變牌的起始位置,每增加一張牌都以隨機(jī)插入的形式繪制,這樣不僅會呈現(xiàn)給用戶動態(tài)的抖動發(fā)牌效果,同時也會增加發(fā)牌數(shù)據(jù)的真實性;智能托管主要分為跟牌和主動出牌兩種情況,當(dāng)玩家跟牌時會自動選擇大過上家牌的最小牌或者Pass掉(沒有大過上家的牌),主動出牌時會根據(jù)牌數(shù)據(jù)的所有類型及設(shè)定的優(yōu)先級選擇一種類型出牌,這樣玩家在超時或其他情況時會選擇性地出牌,而不是單純地出最小的單牌;循環(huán)提示主要是通過原始牌數(shù)據(jù)提取出可以大過上家的所有牌,然后在每次玩家單擊提示菜單項時按從小到大提示給玩家,當(dāng)提示到最大牌時重選獲取提示牌,如此便可循環(huán)提示,讓玩家更方便地選擇出牌。雖然本軟件實現(xiàn)了很多功能,也有自己的特色,但是還是存在諸多的問題。在測試過程中,有的時候會發(fā)生內(nèi)存泄露,可見本軟件的內(nèi)存還有待優(yōu)化;多次測試會偶爾出現(xiàn)玩家角色和計時器圖片出錯,可見本游戲的邏輯控制還有待加強(qiáng)。此外,本軟件還可以實現(xiàn)玩家聊天互動、表情、聲音等一些輔助功能。本游戲是本著“歡樂斗地主”的心態(tài)設(shè)計的,相信玩家會在游戲中會享受到很多的樂趣。謝 辭經(jīng)過一個學(xué)期的努力,畢業(yè)設(shè)計終于完成,期間得到了很多的指點與幫助。在這里,首先要感謝我的導(dǎo)師寧老師,寧老師為我們的畢業(yè)設(shè)計工作提了很多實用的建議,對我們在畢業(yè)設(shè)計過程遇到了問題提供了耐心、細(xì)致的解答,及時督促我們按照計劃書完成了畢業(yè)設(shè)計的各項工作。認(rèn)真詢問我的開發(fā)進(jìn)度以及開發(fā)過程遇到的苦難,對我提出的問題,提出了很多寶貴的意見。這款斗地主游戲是我大學(xué)生活的謝幕作品。我為這個作品花費(fèi)了大量的時間與精力,有很多的淚水與心酸,我希望這個作品美好的。在這美好的背后得到了很多老師、同學(xué)、朋友的鼓勵與支持,感謝學(xué)院機(jī)房的各位老師,是你們給我的技術(shù)之路指引了方向;感謝我所有的大學(xué)同窗,一路走來有你們的陪伴;感謝實習(xí)期間結(jié)識的同事覃艷和我的好友湯景東同學(xué),在畢設(shè)期間為我設(shè)計并處理很多圖片,讓我的界面更加美觀。衷心祝愿你們在今后的生活和工作中,工作順利、健康幸福快樂!參考文獻(xiàn)[1][M].北京:機(jī)械工業(yè)出版社,2013.[2][M].北京:電子工業(yè)出版社,2013.[3][M].北京:人民郵電出版社,2013.[4]Stanley ,JoseeLaijoie,C++Primer,FourthEdition[M].AddisonWesly Professional,Fedruary 14,2005.[5]孫鑫,++深入詳解[M].北京:電子工業(yè)出版社,2007.[6](第二版)[M].武漢:.[7]:跨iOS、Android和沃Phone平臺[M].北京:人民郵電出版社,2012.[8]—Cocos2dx引擎游戲開發(fā)[M].北京:清華大學(xué)出版社,2013.[9][M].北京:人民郵電出版社,2008.[10]唐策善,—C語言描述[M].北京:高等教育出版社,1995.[11]++ STL基礎(chǔ)及應(yīng)用[M].北京:清華大學(xué)出版社,2010.[12] C++[M].北京:高等教育出版社,2002. [13]++:清華大學(xué)出版社,2005.[14]Jeffrey Richter. Windows Via C/C++[M].Fifth Edition,2008.[15]Stanley B. ++ Gems from The C++ Report[M]. Programming Pearls ,December 1997.附 錄動態(tài)繪(發(fā))牌算法的實現(xiàn):void PlaygameScene::ActionDrawCard(float dt){ CCSize size = CCDirector::sharedDirector()getWinSize()。 //獲取屏幕尺寸 vectorint TempData(mpPlayer(),mpPlayer())。 //創(chuàng)建發(fā)牌數(shù)據(jù)副本,用于數(shù)據(jù)對比修改 mpPlayer(mpPlayerOwnCardData[mpPlayerNowCardNum])。 sort(mpPlayer(),mpPlayer(),SortByPriority)。 //插入數(shù)據(jù)并排序 vectorint::iterator NowIt = mpPlayer()。 vectorint::iterator TempIt = ()。 if(mpPlayerNowCardNum%2==0) { mpPlayer = 。 //左增長時改變起始起始位置 } CCPoint NowPoint = mpPlayerOriginalPoint。 //當(dāng)前牌所在位置 while(TempIt!=()) { //替換(更新)牌圖片 CardSprite* pNowSprite = (CardSprite*)getChildByTag(*TempIt)。 CCSpriteFrame* frame = CCSpriteFrame::create(打牌界面/,Cards::getRect(*NowIt))。 //更改精靈屬性 pNowSpritesetDisplayFrame(frame)。 pNowSpriteValue = *NowIt。 pNowSpritesetPosition(NowPoint)。 pNowSpritesetTag(*NowIt)。 = + 。 NowIt++。 TempIt++。 } //繪制最后一張牌 CardSprite* pSprite = CardSprite::create(打牌界面/,Cards::getRect(*NowIt),*NowIt)。 pSpritesetPosition(NowPoint)。 thisaddChild(pSprite,2,*NowIt)。 mpPlayerNowCardNum++。 //對發(fā)出牌的張數(shù)計數(shù) //發(fā)完最后一張牌后進(jìn)入叫分環(huán)節(jié)
點擊復(fù)制文檔內(nèi)容
職業(yè)教育相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1