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

正文內(nèi)容

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

2025-06-27 17:14本頁(yè)面
  

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