作者ddavid (謊言接線生)
看板GameDesign
標題Re: [程式] 怎麼判斷五子棋的棋型?
時間Fri Oct 18 04:40:36 2013
※ 引述《LaPass (LaPass)》之銘言:
: 所以..... 請問要怎麼讓程式判斷一些詭異的棋型?
試試加上幾個規則:
1. 從一串我方棋開始的那棋算起,第六顆的位置有我方棋子,則這串我方棋在這個
方向是死的。
2. 從一串我方棋某方向找最近的一對方棋(當然要夠近才有意義,不用看很遠),
再從那對方棋往反方向數到第七個位置如果也是對方棋,則這串不會是活的。
: 像是:
: 落子 長連不算 允許長連
: ↓
: ○○○ ○○ 死三 死四
^^^^^^ (這應是活三吧)
123456 Rule 1
→先看這方向,123是一串棋,在這方向從1開始會發現6有棋,所以死了一個方向。
654321 Rule 1
←再看這方向,從1開始發現6沒我方棋,所以這方向可以是活的。
然後查你的表發現123是個活三型,可是被判定死了一邊,所以認為是死三。
: ○○ ○ ○○ 死三 活三
^^^^^^^^
123456 死一邊 Rule 1
654321 活一邊 Rule 1
死三
接著查表發現這邊也有型:
: ○○ ○ ○○ 死三 活三
^^^^^^^^
123456 活一邊 Rule 1
654321 死一邊 Rule 1
死三
: ○ ○○ ○ ○○ ○ 沒棋 活三
^^^^^^^^ 若下在這三顆之一
123456 死一邊 Rule 1
54321 活一邊 Rule 1
死三(還有往左的空間)
: ○ ○○ ○ ○○ ○ 沒棋 活三
^^^^^^^^ 若下在這三顆之一
123456 死一邊 Rule 1
654321 死一邊 Rule 1
沒棋
: ○ ○○○ ○ 死三 活三
^^^^^^
123456 死一邊 Rule 1
654321 死一邊 Rule 1
死三
: ○ ○ ○○ ○ ○ 沒棋 活三
^^^^^^^^ 若下在這三顆之一
123456 死一邊 Rule 1
654321 死一邊 Rule 1
沒棋
^^^^^^^^ 若下在這三顆之一
123456 死一邊 Rule 1
654321 死一邊 Rule 1
沒棋
: ● ○○○ ● 死三 死三
^^^^^^
1
←看到一串棋形查表認為是活三,先看這方向發現敵方的1
1234567 非活 Rule 2
→往反向看到敵方的7把這串夾在裡面,所以不會是活,把活三改為死三
: ● ○○○ 活三 活三
^^^^^^ 原活三
1234567 無影響 Rule 2
活三
: ● ○○○ ○ 死三 活三
^^^^^^ 原活三
1234567 無影響 Rule 2
654321 活一邊 Rule 1
123456 死一邊 Rule 1
死三
: ●○ ○ ○○● 沒棋 死三
^^^^^^^^ 原死三,沒死的方向是←
7654321 無影響 Rule 2
654321 死一邊 Rule 1
沒死的方向也死了,改為沒棋
: 請問有沒有什麼建議的判斷方式呢?
: 希望能提示一些判斷的方法或是方向
不知道看不看得明白。至於就運算時間來講,一樣可以寫成查表,而且這個查表
不用對整個棋盤都查,而是當你已經發現一個型(活三、崁三、死三、活四、崁四、
死四等等)後,才需去查旁邊特定對應位置的情況,如:
●○ ○○ ○●
^^^^^^^^^^^^ 從這看到一個死三型,活在右邊
^^^^^^^^ ^^ Rule 1抓第六個位置發現右邊是死的,改為沒棋
●○ ○○ ●
^^^^^^^^^^^^ 從這看到一個死三型,活在右邊
^^^^^^^^ ^^ Rule 1抓第六個位置發現還是活的,維持死三
● ○○○ ○
^^^^^^^^^^ 從這看到一個活三型
^^ ^^^^^^ ^^ Rule 2抓位置發現沒影響
^^ ^^^^^^ Rule 1抓左數第六位發現活這邊
^^^^^^ ^^ Rule 1抓右數第六位發現死這邊,改為死三
再更簡單一點地說(很抱歉因為我是一面想一面說,所以我打到這邊才想到更精
簡的思路說明方式,就當做順便讓你看看我怎麼一路想過來這樣XD):
當用你原本的方法看到一個型時,你自然也可以知道這個型可能變成這樣的五連
。因此你就看這些可能的五連左右各一格有沒有會讓它變成六連的我方棋,或者這個
可能的五連是不是剛好左右各被一個對方棋夾住因而型一定是死型而非活型這樣。
因為有型才查,而且只需要看其可能完成的五連之左右各一格(要注意越活的型
就有越多種五連可能,如純活三有三種可能,活崁三跟活四有兩種,死三跟死四有一
種),計算上應不會有太多額外負擔。
唉......我應該整個想完再打的,可以精簡很多而且可以把Rule 1跟2整合起來
的,這實在十分抱歉,因為本想說一面想一面打,打完就要去睡的XD
--
「可是妳......不是天使嗎?」
「天使?」她緩緩的轉過頭來,用悲傷的表情。「天使,只不過是神創造出來的
不死玩偶。」
「而神,也只不過是詛咒下的偽善使者。」
--星.幻.夢的傳說
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.36.170.235
※ 編輯: ddavid 來自: 114.36.170.235 (10/18 04:43)
推 LaPass:○○○ ○○ 死三 死四 我說明一下會認為是死四是 10/18 12:17
→ LaPass:只要在一顆就可以連成五子(以上) 所以不禁長連的話要視為死 10/18 12:18
→ LaPass:四。 10/18 12:18
→ LaPass:謝謝你的建議,我想想看 10/18 12:18