Sanmill icon indicating copy to clipboard operation
Sanmill copied to clipboard

希望增加拔子規則,以及抽子,摃擔

Open ejmoog opened this issue 4 years ago • 10 comments
trafficstars

拔子:走子階段,當受到對方禁閉時,直接拔走對方一顆棋子,然後續繼走棋。

抽子:落子時,若十二子下完,雙方都沒有吃子,則互相抽掉對方一子,然後開始走棋。

摃:走子階段,在橫縱綫上,兩顆己方棋子左右(上下)圍住中間一顆敵子,則可吃掉中間棋子。

擔:走子階段,在幅斜綫上,己方一顆棋子走到對方兩個棋子中間,則移除對方兩顆棋子。

這樣攻擊跟趣味性更強。

ejmoog avatar Oct 09 '21 09:10 ejmoog

您好! 這些規則在海峽兩岸都是流行的規則,將會列入開發計劃。 謝謝您的寶貴建議!

calcitem avatar Oct 09 '21 09:10 calcitem

一旦 https://f-droid.org/zh_Hans/packages/com.calcitem.sanmill/ 上释出支援這些棋規的新軟體,將會第一時間通知您,敬請期待!

calcitem avatar Oct 09 '21 23:10 calcitem

【重要】上面寡人對擔和摃的介紹反了。應該是在正方形四條綫上的是擔(一挑二),八條放射綫上是槓(二夾一)。

之所以這樣設置,是因為第二圈的正方形頂點是最優點,每個人都想搶佔。因此要用擔和槓的規則来制衡。

與此同時,擔和槓應該只是在走棋時才有,因為如果落子時也能擔和槓的話,那落子的顧忌就太多,很難落子。

寡人在 https://www.appinn.com/zhiqi-for-android/ 小衆軟件推薦了你的作品。

ejmoog avatar Oct 10 '21 01:10 ejmoog

多謝您的大力推薦,難怪我感覺奇怪,為什麼昨天 Star 這個專案的人數一下子增長那麼多,從27暴漲到35,而且大部分是中文用戶。關注此專案的人數增加後將有助於推動專案發展,謝謝您的寶貴支持!

對了,F-Droid 的英文鏈接可以替換為上面的簡中鏈接嗎?因為眾所周知的原因,絕大部分大陸地區用戶只能從F-Droid下載這個軟體。謝謝您!

calcitem avatar Oct 10 '21 02:10 calcitem

多謝您的大力推薦,難怪我感覺奇怪,為什麼昨天關注這個專案的人數一下子增長那麼多,從27暴漲到35,而且大部分是中文用戶。關注此專案的人數增加後將有助於推動專案發展,謝謝您的寶貴支持!

對了,F-Droid 的英文鏈接可以替換為上面的簡中鏈接嗎?因為眾所周知的原因,絕大部分大陸地區用戶只能從F-Droid下載這個軟體。謝謝您!

不用客氣,我們要感謝你開發這款民間傳統弈棋,並且還是自由軟體,非常棒!

把F-Droid英文換成簡中,這個要青小蛙才能換,我只能在下面留言。

ejmoog avatar Oct 10 '21 08:10 ejmoog

了解,謝謝您!

我後續在增加台灣直棋規則支援後,也將會增加正體中文的 F-Droid 頁面介紹。

calcitem avatar Oct 10 '21 08:10 calcitem

拔子:走子階段,當受到對方禁閉時,直接拔走對方一顆棋子,然後續繼走棋。

請問允許拔走對方在“直”中的棋子嗎?

抽子:落子時,若十二子下完,雙方都沒有吃子,則互相抽掉對方一子,然後開始走棋。

請問是先手方先抽還是後手方先抽呢?

calcitem avatar Jan 22 '23 02:01 calcitem

参考:https://zh.wikipedia.org/zh-hans/%E5%8D%81%E4%BA%8C%E5%AD%90%E7%9B%B4%E6%A3%8B

优先实现: (1) 布子结束后如满盘,双方各抽子一枚 (在走子阶段先走的一方先抽子,能否抽“直”以外的子,跟随着吃子的规则,即如果吃子能吃“直”,则允许,否则不允许)。 (2) 在走子阶段 [不包含前述(1)]中的相互抽子阶段,只要无路可走,就可以拔掉对方的一颗子,并且己方继续走棋 (而非对方走棋)。

规则三(台湾直棋): 在规则一的基础上,增加两种吃子方式「担」和「扛」。在走子阶段,若 在正方形的一条边的两端停留着对方两颗棋子,己方一棋子走到中间的空位, 可「担」掉左右对方二子。己方一颗棋子行走后,在八条幅线的其中一条上, 形成己方两颗棋子夹一颗对方棋子,可「扛」吃中间的棋子。当一方只剩下不 多于三颗子时,可以「飞」至棋盘任意位置。

2. 「担」在三个四方形的边(特别要强调只限三个四方形的边),两端有两枚对方的棋子,只要在中间   下一子,或移动自己的棋子进入其中,就可以将对方的这两枚棋子吃掉,这叫「担」。如果四方形任何一边的一端有一枚自己的棋子,中间有一枚对方的棋子,那么自己若再移一枚棋子到这边的另一端上去,这样的情况则不可以称做「担」。 3. 「杠」杠刚好与担相反,仅能在八条放射状的直线上之任何一条进行,而不可以在三个四方形的边上。 「杠」的规则为:若自己有一子在外四方形或内四方形的边(或角),而对方在同一角线上恰有一枚棋子于内四方形的边或角,此时自己再下一枚或移一枚棋子在同一直线的中间位置,在形式上,好像是我方的两枚棋子对付对方的一枚棋子,如此就可以把这枚被攻击的棋子吃掉,这叫做「杠」,它的下法有点像炮棋,另外若在这八条直线上已经有自己的二子在一线上相邻,而对方再下一子于另一点上,则不可以「杠」。

需要考虑的选项:

  • 是否只剩3枚棋子时才允许?
  • 是否在走棋阶段才允许?
  • 是否限制线的范围?

测试用例:

  • [ ] 不只是双人对战,人机对战的各种场景都需要测试
  • [x] 如果黑方最后一子成三,那么是就吃子,不应该视为摆满;
  • [x] 吃掉对方,对方还没继续吃,就报告被堵死输棋了。这是不对的。
  • [x] 先标后拔是否正常工作?
  • [x] 走子阶段谁先走都正常?
  • [ ] 允许吃多子是否正常?正常,没有吃多子。
  • [ ] 适配编辑棋局
  • [x] 三子连珠 请吃子 的提示以及 请继续吃子 需要按条件修改。
  • [x] 如果后手和先手方先后拔子,并且拔完后先手方先下,那么拔完第2子后tip提示是轮到后手方行棋,不对。
  • [x] 如果拔子再行棋,并且白方先走子,也会存在轮到哪方行棋的提示错乱问题。
  • [ ] 如果行棋方吃完走后自己不能走怎么办?吃完子后应该要检测棋局是否困毙状态。前面几项也应应该类似。
  • [x] 成三吃子造成的对方无路可走
  • [ ] 摆棋最后一着刚好成三,能吃任意子吗?
  • [ ] 如果吃对方的子正好是刚摆的,会留下红圈。
  • [ ] 访问规则页面前警告棋盘会被清空
  • [x] 红圈不能转移的问题
  • [ ] ios不能复制信息
  • [ ] stalemateRemovalRegardlessOfMillFormation 需要加进去
  • [ ] 多次回滚时提示用户
  • [ ] 复制信息时将版本号和语言一起复制
  • [ ] 如果是第一回合就不用delay
  • [ ] 提示关闭增强活动能力
  • [ ] 性能优化: is_stalemate_removal 总共用了2.59% 如果没开规则是0.01% is_stalemate_removal 中的 is_all_surrounded 用了2%, 没开规则就没有消耗。

测试用棋谱:

 1.    b6    b2
 2.    f2    f6
 3.    d6    d7
 4.    g7    f4
 5.    e4    g4
 6.    g1    e3
 7.    e5    d5
 8.    c5    a7
 9.    a4    b4
10.    c4    c3
11.    d3    d2

成三吃子造成的对方无路可走:

 1.    b2    f6
 2.    f2    d2
 3.    b6    b4
 4.    g7    d3
 5.    d1    c4
 6.    a4    c3
 7.    e3    c5xe3
 8.    d5    e3xd1
 9.    d1    e4
10.    e5    d7
11.    g1    g4
12.    a1xd7    a7
13.    d5-d6    c5-d5
14.    d6-d7    d5-c5xd7
15.    b6-d6    c5-d5
16.    d6-b6    d5-c5xb6
17.    g7-d7    c5-d5
18.    d7-g7    d5-c5xg7
19.    e5-d5    f6-f4

走棋后对方无路可走:

 1.    b2    f6
 2.    f2    d2
 3.    b6    b4
 4.    g7    d3
 5.    d1    c4
 6.    a4    c3
 7.    e3    c5xe3
 8.    d5    e3xd1
 9.    d1    e4
10.    e5    d7
11.    g1    g4
12.    a1xd7    a7
13.    d5-d6    c5-d5
14.    d6-d7    d5-c5xd7
15.    b6-d6    c5-d5
16.    d6-b6    d5-c5xb6
17.    g7-d7    c5-d5
18.    d7-g7    d5-c5xg7
19.    e5-d5    f6-e5xd5
20.    f2-f4    c5-b6
21.    f4-f2    b6-d6
22.    f2-f4    d6-f6
23.    f4-f2    g4-g7xf2
24.    g1-f2    g7-g4
25.    f2-g1xe3    a7-b6
26.    g1-f2    g4-g1
27.    f2-e3    f6-f4
28.    e3-f2    f4-g4
29.    f2-e3    e5-f6
30.    e3-f2    d3-e3
31.    f2-f4    e3-f2
32.    a4-a7    c4-c5
33.    a7-a4

应该只允许抽和自己相邻的棋子:

12子无斜线,开抽对方自己再走一子。

 1.    d6    f4
 2.    d2    b4
 3.    d5    d7
 4.    g4    a4
 5.    c4    a7
 6.    g7    a1xg7
 7.    g7    g1
 8.    d1    d3
 9.    e4    e5
10.    e4-e3    b4-b2
11.    e3-e4    a4-b4
12.    e4-e3    b4-a4xc4
13.    e3-e4    a4-b4
14.    e4-e3    b4-a4xe3
15.    d5-c5    a4-b4
16.    c5-d5    b4-a4xd5
17.    d6-d5    a4-b4
18.    d5-d6    b4-a4xd6
19.    d2-f2

12子无斜线,摆棋最后一步刚好成三

 1.    d6    d2
 2.    f4    b4
 3.    a7    d1
 4.    a4    f6
 5.    b2    f2
 6.    c4    d5
 7.    e5    e4
 8.    g4    g1
 9.    d3    c3
10.    g7    d7
11.    b6    e3
12.    c5

全成三,12子用例

**@@@@*@/@*@OO@O*/**@OO@*@ b m s 5 0 11 0 0 0 0 1

calcitem avatar Jan 23 '23 01:01 calcitem