作者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)
1F:推 LaPass:○○○ ○○ 死三 死四 我说明一下会认为是死四是 10/18 12:17
2F:→ LaPass:只要在一颗就可以连成五子(以上) 所以不禁长连的话要视为死 10/18 12:18
3F:→ LaPass:四。 10/18 12:18
4F:→ LaPass:谢谢你的建议,我想想看 10/18 12:18