亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

用游戲串起程序員的基本功之四

2019-11-17 05:06:33
字體:
來源:轉載
供稿:網友

  對于麻將牌的玩法來說,重要的就是要有吃、碰、杠、胡等四種功能.那么在游戲中怎樣編碼實現呢?

  吃牌,就是比較對方打出的牌,和自家的牌是否可以連成一串.而碰牌就是比較對方打出的牌和自家的牌是否有2張相同的.假如有三張牌和對方打出的牌相同,就可以杠.胡牌則是至少要有一對相同的牌,除此之外,也可以有三張三張的相同的牌或連成串的牌.

  所以對于吃、碰、杠、胡,我們可以分解為,查找兩張連續的牌,查找兩張相同的牌,查找三張相同的牌,對于胡牌,還要確定有且只能有一對相同的牌,其他的可以是三種相同的牌,或三張連續的牌??梢娫诖瞬檎沂撬惴ǖ囊?。

  我們先來看一下有關查找的知識。

  第一種查找的方法叫“線性查找法”,是從數據中的第一個數值開始查找比較,假如找到就返回該值或該值所在的位置。

  示例如下:

  13 25 16 23 57 66 為一個整型數組。

  假如要在這樣一個數組中找到57,

  步驟1:得到第一個數13,不相等,取得下一個數

  步驟2:得到第二個數25,不相等,取得下一個數

  步驟3:得到第三個數16,不相等,取得下一個數

  步驟4:得到第三個數23,不相等,取得下一個數

  步驟5:得到第三個數57,相等,返回所在位置5

  代碼如下:

int chazhao(int key)//用線性查找法 ,key表示要查找的數值

{

int i=0; //指示在數組中的位置

while(i<14) // 直到結尾

{

if (key==apai[i]) //假如找到,

return i; //返回所在位置

i++; //沒找到,繼續向后搜索

}

return -1; //沒找,返回失敗

}
  可以看到這種方法,不管數據是否有順序,也不管數據的多少,都是按順序挨個的搜索,直到找到或搜索完成,當數據很多時,尤其是要查找的數據排的比較靠后,就會很費時間。所以,對于已經排好順序的數據,假如還用線性查找法來查找的話,一定是很浪費時間的。有什么好的方法呢?

  大家一定都查過英語詞典吧,當你要查一個以S開頭的單詞時,誰都不會從頭一頁一頁的向后翻,而是跳躍式的向后翻,假如我們先翻到了P開頭的一頁,我們一定會繼續向后翻,而不必再查前面的頁碼。再翻一次,到達T開頭的一頁,我們就會又先前翻,找P和T之間的頁.我們可以把這種查找的方法叫“折半查找法”。

  它的原理是:先用欲查找的數值和該組數據的中間位置上的數值比較,當小于中間值時,再向前查詢,大于中間值時向后查詢,繼續取前面(或后面)一半數據的中間值進行比較,假如小于再向前查詢,大于就向后查詢,一直到找到或查詢完畢為止。

  示例如下:

5 7 12 25 34 37 43 46 58 //是要查找的數據段,其中要查找46,

  步驟一:中間值34<46,向后查找

  步驟二:得到后半部分的中間值43<46,再向后查找

  步驟三: 得到剩余部分的中間值46,返回

  可見,這種方法明顯的減少了比較的次數.

  下面是源代碼:

void chaxun(int key)//用折半查詢法,key表示要查詢的數值

{

int left=o; //待查詢數據段的左邊界

int right=12; //待查詢數據段的右邊界

int mid; //待查詢數據段的中間值

while(left<=right) //只要沒查詢完

{

mid=(right+left)/2; //取得待查詢數據段的中間值

if(key<apai[mid]) //中間值大于待查詢的數值

right=mid-1; //再查找前半段

else if (key>apai[mid]) //中間值小于待查詢的數值

left=mid+1; //再查找后半段

else if(key= = apai[mid]) //中間值等于待查詢的數值

return mid; //返回位置

}//end while

return –1;

}//end

  查詢數據是數據結構中的又一重要知識,在實際應用中也很重要,假如有愛好可再深入的研究.我們只能到此為止.

  回過頭來,我們再來看一看,這樣判定吃,碰,杠,胡.在此我們只以萬牌為例.

  下面是數和牌對應關系:

1 2 3 4 5 6 7 8 9 10

11 12 13 14 15 16 17 18 19 20

21 22 23 24 25 26 27 28 29 30

31 32 33 34 35 36 37 38 39 40

一 二 三 四 五 六 七 八 九 (萬) 東

  很明顯同一張牌是在小于40的數據段中,并且個位相同的數.并且它還對應著牌上的數.

  所以判定是否為同一張牌的方法,我們可以這樣寫:


tempa=apai[i]%10;
tempb=apai[i+1]%10;
if(tempa==tempb)
 shi tong yi zhang pai
(注重這種牌和數得對應關系,在排序時,一定要以個位為準,而不是以實際的數值大小)
  判定是否可碰,則可以這樣:

tempa=apai[i]%10;
tempb=apai[i+1]%10;
tempc=apai[i+2]%10;
if(tempa==tempb && tempb==tempc)

  判定是否可杠,可以這樣:

tempa=apai[i]%10;
tempb=apai[i+1]%10;
tempc=apai[i+2]%10;
tempd=apai[i+3]%10;
if(tempa==tempb && tempb==tempc && tempc==tempd)
  是否為順,則可以這樣判定:

tempa=apai[i]%10;
tempb=apai[i+1]%10;
tempc=apai[i+2]%10;
if(tempa==tempb+1 && tempb==tempc+1)
  很簡單吧,相信你應該也會判定對方出的牌,自己是否可以碰,杠,吃了吧.在此我們就不多羅嗦了.

  胡牌稍麻煩些,要判定各種副牌的方式,這里我們一起看看一條龍的胡法.

  下面是源程序:

void yitiaolong ()
{ int wan,bing,tiao;//wan,bing,tiao 分別代表三種牌
 int temp;
 for(int I=0;I<13;I++)
 {
  temp=apai[I];
  if(0<temp<40)
   wan++;
  if(40<temp<80)
   bing++;
  if(80<temp<120)
   tiao++;
  if(wan=8)//萬牌一條龍
  for(int I=1;I<9;I++) //比較這8張牌
    if(apai[I]%10=api[I+1]%10)
     //是否後一張等于前一張,相等,說明已經有將牌了
    for(int a=1;a<40;a++)
     if (chaxun(a)!==-1) //找到所缺的牌
      if (I=duifangchupai)比較是否和對家大的牌相等
        ……..//胡了
       else
       //表示8張牌沒有相同的,也就是又8個串
       //查找所缺的牌,
       //與對方出的牌比較,
       //相等 胡牌
        ……….
       if(wan=9)
        ……….
 }
 if(bing>=8)
  …..//餅牌一條龍
 if(tiao>=8)
  …… //條牌的一條龍
 }
}
  由于篇幅所限而且文章的重點不在于此,這僅給出一個框架,聰明的讀者,可以發揮自己的才智,將他補充完整.

  下面我們簡單談一下人工智能,究竟我們在游戲中還需要一個對手.

  作為程序員,我們不可能做出一個具有高超聰明的對手,而且我們也不可能將游戲中種種可能的打牌方法都寫入程序.那么就需要一種可操作的方法,使你的對手不至于太傻.

  對于給策略性的游戲添加人工智能主要有這么幾步:

  (1) 要找出所有獲勝的可能性

  (2) 建立獲勝表,

  (3) 每一步的玩法給出一個恰當的評價分值,其中包括給對手制造的麻煩所得的分,和給自己帶來的獲勝機會所帶來的分

  (4) 根據所給的分值,確定其中所有可能的玩法中,分值最高的一種玩法,也就是最好的一步走法.

  具體到麻將游戲下面是具體的分析:

  假設a1,a2,... an 是手上當前牌序列,其中包括吃 碰 杠后的牌,

  步驟1: 計算 玩家 離胡牌還有幾步. 假如 玩家 已經聽牌, 它離胡牌的步數是 1, 假如是一上一聽, 步數是 2, 以此類推;

  步驟2: 假如步數是 m , 計算所有能使 玩家 到達胡牌的序列也就是所有胡牌的可能玩法 {b11,b12,....b1m}, {b21,b22,...b2m}, ....,{BT1,bt2,....,btm}

  步驟3: 對于每個一個 {bt1,bt2,...,btm}, 計算胡牌的點數, 以及到達胡牌時要打出去的牌: {ci1,ci2,....,cim}

  步驟4: 對于每一個 {bt1,bt2,...,btm} 計算胡牌的點數;

  步驟5: 選取收益最大的方案 {bji,bj2,....bjm}

  步驟6: 從{cj1,cj2,....cjm} 中按照跟熟原則打一張

  動動腦筋相信你會做出更智能化的得對手。 更多文章 更多內容請看網絡游戲攻略  游戲開發專題,或

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产午夜精品麻豆| 欧洲永久精品大片ww免费漫画| 中文字幕精品国产| 国产精品亚发布| 91系列在线观看| 久久久亚洲天堂| 97色伦亚洲国产| 国产成人精品999| 欧美尺度大的性做爰视频| 午夜免费久久久久| 欧美在线视频a| 欧美亚洲一区在线| 美日韩精品免费视频| 日韩视频亚洲视频| 91国产精品视频在线| 精品国产一区二区三区久久狼黑人| 黑人巨大精品欧美一区二区免费| 精品二区三区线观看| 日本免费在线精品| 久久免费高清视频| 欧美另类暴力丝袜| 国产精品久久久久久久一区探花| 亚洲精品欧美日韩专区| 2021国产精品视频| 欧美激情久久久久| 国产精品亚洲精品| 国产精品久久久久国产a级| 欧美成人一区在线| 国产成人激情视频| 色噜噜国产精品视频一区二区| 欧美中文在线视频| 日韩欧美国产骚| 亚洲色图av在线| 国产精品成人免费电影| 日本久久久久久| 欧美片一区二区三区| 亚洲美女性视频| 蜜月aⅴ免费一区二区三区| 97超级碰在线看视频免费在线看| 亚洲人成电影网站色www| 色青青草原桃花久久综合| 亚洲永久在线观看| www.欧美视频| 成人免费视频网| 91久久精品在线| 丝袜情趣国产精品| 久久99国产精品自在自在app| 国产精品久久久精品| 97久久精品视频| 少妇av一区二区三区| 一二美女精品欧洲| 亚洲国产精品中文| 欧美日韩精品中文字幕| 久久久免费av| 精品国产拍在线观看| 日韩在线播放一区| 欧美最猛性xxxxx(亚洲精品)| 最新69国产成人精品视频免费| 98午夜经典影视| 亚洲sss综合天堂久久| 国产亚洲精品激情久久| 亚洲美女av在线| www.亚洲人.com| 一区二区欧美亚洲| 午夜精品美女自拍福到在线| 国产精品美女主播在线观看纯欲| 亚洲精品乱码久久久久久金桔影视| 国产大片精品免费永久看nba| 国产999精品| 久久精品99久久久香蕉| 97在线视频观看| 欧美视频精品一区| 欧美人与性动交a欧美精品| 国产69精品久久久久久| 色综合久久88色综合天天看泰| 亚洲精品电影久久久| 亚洲自拍小视频免费观看| 国产日韩在线免费| 亚洲精品国产suv| 91在线精品播放| 久久99精品久久久久久琪琪| 国产精品日韩在线| 精品国产老师黑色丝袜高跟鞋| 日韩中文字幕在线| 91禁国产网站| 色婷婷久久一区二区| 亚洲精品美女久久久久| 欧美激情在线有限公司| 深夜福利日韩在线看| 欧美影院在线播放| 亚洲男人的天堂在线| 欧美激情免费在线| 欧美日本亚洲视频| 亚洲国产精品久久久久秋霞蜜臀| 久久999免费视频| 中文字幕亚洲在线| 亚洲午夜性刺激影院| 国产精品久久久久久网站| 欧美一区二区三区精品电影| 亚洲欧美变态国产另类| 日韩在线视频网站| 亚洲国产精品高清久久久| 性夜试看影院91社区| 九九热99久久久国产盗摄| 国产精品免费久久久| 欧美性videos高清精品| 欧美极度另类性三渗透| 国产aⅴ夜夜欢一区二区三区| 欧美激情极品视频| 91久久久精品| 国产精品无码专区在线观看| 欧美高清不卡在线| 国产专区欧美专区| 亚洲第一国产精品| 欧美成人性生活| 国产亚洲精品日韩| 日韩av免费观影| 国产精品久久久久久久久影视| 日韩在线激情视频| 亚洲一区二区久久久久久| 琪琪第一精品导航| 国产精品网址在线| 国产欧美一区二区白浆黑人| 91在线播放国产| 日韩美女视频中文字幕| 亚洲永久免费观看| 精品自拍视频在线观看| 日韩中文字幕在线看| 亚洲第一区中文字幕| 久久亚洲欧美日韩精品专区| 丁香五六月婷婷久久激情| 国产精品久久一区| 久久久噜噜噜久久中文字免| 在线观看国产精品日韩av| 成人黄色av免费在线观看| 日韩视频一区在线| 97av在线影院| 欧美激情一区二区三区高清视频| 日韩av中文字幕在线免费观看| 97精品国产91久久久久久| 国产精品欧美日韩一区二区| 自拍偷拍亚洲区| 久久久久久久爱| 在线观看日韩欧美| 精品视频一区在线视频| 欧美日韩亚洲天堂| 91国内在线视频| 久久久精品影院| 九九热99久久久国产盗摄| 亚洲成人av在线播放| 日韩欧美国产网站| 亚洲人成电影网站色…| 亚洲性线免费观看视频成熟| 亚洲天堂免费观看| 欧美一级视频在线观看| 精品国产美女在线| 精品呦交小u女在线| 欧美尤物巨大精品爽| 久久黄色av网站| 91午夜理伦私人影院| 欧美激情一二三| 久久99久久99精品中文字幕| 欧美精品18videos性欧美| 欧美激情aaaa|