資源簡(jiǎn)介
java版的斗地主,AI版(源碼)
時(shí)間:20121012
版本:V1.0
功能: 實(shí)現(xiàn)電腦AI,電腦能夠拆牌,壓牌和自主出牌都能從最優(yōu)解決方案中選擇。
不足:
情形 壓隊(duì)友牌情形,壓敵人牌情形
1 情形一:自己最后兩手牌時(shí),先出幾乎不可能被壓的牌如 22,QQKKAA,(被壓牌比值為0的牌,如AAKKQQ,22等)(如果有,先出敵人不可能要的牌,如果沒(méi)有敵人不可能要的牌,那就先出較小牌)自己的所有手牌中,只有一手牌的壓牌比值不是1(如33344456,10JQKA,6)此時(shí)的策略為先
* 出被壓牌比值為0的
2 情形二: 下家是敵人只剩 1張牌時(shí),不要出單
7情形三 如果下家是敵人,不讓順單牌
8情形四:敵人只剩一手牌時(shí),不惜一切代價(jià)要壓牌
3 如果是隊(duì)友,如果是順牌,比如單牌,可以順牌。目前是隊(duì)友,則不出牌
4如果敵人出33,電腦567789,2,電腦不應(yīng)該拆出77出牌
5最優(yōu)方案不一定是一種,應(yīng)該是一個(gè)List,壓牌時(shí),應(yīng)該遍歷所有的最優(yōu)方案中,找出牌
6 電腦具備留一手最大牌放在倒數(shù)第二次出牌的功能
7電腦具備記牌功能,通過(guò)記牌功能,能刷新當(dāng)前牌的壓牌比值,和被壓牌比值(如果已經(jīng)出了222,和AAA,那么KK的被壓牌比值將0)
Bug:如果單牌手?jǐn)?shù)相等,應(yīng)選擇出牌手?jǐn)?shù)最少的方案(比如33344456,和3335,4446)
王炸彈不能直接能出就出,應(yīng)該在報(bào)紙,被壓牌比值>0手?jǐn)?shù)只有一手時(shí)出牌
計(jì)算是否壓牌,比如大王小王,A,6, 人家出2,或者10,11,12,13,13,14,人家出對(duì)99,能不能拆1313的問(wèn)題,拆了之后
拆牌規(guī)則重構(gòu):(不需要了)
如果單牌手?jǐn)?shù)>0,單牌手?jǐn)?shù)越小越好
不是單牌手?jǐn)?shù)越小越好,如果單牌手?jǐn)?shù)<0,那么在小于0當(dāng)中的出牌手?jǐn)?shù)最少的最好
壓牌
單牌手?jǐn)?shù)規(guī)則重構(gòu):
1 被壓牌比值()為0的可以附加抵消0.5個(gè)單牌手?jǐn)?shù)(,比如222除了能帶一張單牌,由于這么出牌后,別人只能用炸彈壓牌,所以,出了之后極有可能獲得出牌權(quán))
2 單牌或雙牌如果被壓牌比值=0,本身不視為單牌,并且可抵消0.5張單牌手?jǐn)?shù)
3 要考慮自己的牌和已經(jīng)出的牌
被壓牌比值算法重構(gòu):如果自己有大王,小王,那么自己出大王小王,2的被壓牌比值均為0,這樣,大王,小王,2都可以抵消一張無(wú)用單牌,也就是說(shuō)如果單牌中有被壓牌比值=0的單牌,不但可以不算一手單牌,還可抵消1.5單牌;如果是之前的算法,大王都有可能被帶到333上去。
壓別人牌的時(shí)候,首先判斷能不能壓牌,如果能壓,則從單牌手?jǐn)?shù)從小到大的方式遍歷
壓牌規(guī)則重構(gòu):
2222,5,6, 別人出了QQ,你這時(shí)優(yōu)先考慮出22
首先從最優(yōu)方案找,再找出所有的可以壓牌的方案,比較所有出牌后剩余牌的最優(yōu)方案的
單牌手?jǐn)?shù),選擇出牌之后剩余牌最優(yōu)方案的單牌手?jǐn)?shù)最少。
期待下一個(gè)版本能夠?qū)崿F(xiàn)上述的4個(gè)重構(gòu),和特殊情形的分析

代碼片段和文件信息
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????203940??2018-11-29?10:03??bashaoCard.zip
-----------?---------??----------?-----??----
?????文件??????203940??2018-11-29?10:03??bashaoCard.zip
- 上一篇:Java萬(wàn)年歷記事本
- 下一篇:經(jīng)典JAVA教程日文版
評(píng)論
共有 條評(píng)論