【原創弈棋】頂鑫棋

直接把玩:

trigolden_game

頂鑫棋是我自2026年07月27日研發的一款二人弈棋(抽象策略遊戲),它採用三種不規則的黄金四邊形,可能是世界上唯一採用不規則圖形作為棋子的弈棋遊戲了,我為我能夠創作出這樣一款弈棋而感到高興和自豪。

本遊戲通過邊貼邊拼接,每方每回合都要放置兩個棋子,以形成「頂鑫結構」獲得比對方更高的分數為目標。

這是一款可以和棋但幾乎不可能和棋的棋。測試了這麼多日,我完全看不出是先手有利還是後手有利,因此我仍然採用「下兩局互換先後手比總分」來實現公平。

如何進行實體遊戲

首先要根據尺寸3d打印出棋子。

跟網頁版稍然區別的是,網頁版會幫你判斷一個多邊形的端點是否落在另一個多邊形的邊上,而實體棋子需要徒手計算。

在實體棋子對弈時,如果你認為對方上回合出現違規下法,包括:

  • 棋子的面發生干涉
  • 棋子有跟另一條邊(非落子邊)貼合的情況
  • 棋子有懸空的端點與另一個棋子的端點重合
  • 對方聲明形成了頂鑫結構並已計分,但實際上棋子之間未有接觸
  • 對方上回合結束後未有至少一個棋子能使本方在其邊上落下兩個棋子

則可進行仲裁,這是實體版才會有的仲裁項目,而電子版 (網頁版)因為已經在落子時已作自動判定,因此只需仲裁最後一項。

而實體版在作最後一項判定時,則是請對方落下兩個合規棋子,如果對方能夠落下,這時你就需要計算和說明這兩個棋子是不合規的。

在進行實體版遊戲時,當存在有疑問的頂鑫結構,允許先手動計算。不過這應該會很耗費時間,因此實體版對局一定要限制時間。

徒手計算公式

經過多日跟AI老師進行推演和學習,我總結出了在\mathbb{Z}[\zeta_{10}]環的基礎上,快速計算「一個頂點是否落在另一個多邊形的邊上」,以及「兩個多邊形是否發生干涉」的簡便方法。

定義複平面的環

在一個複平面中,設:

\zeta=\zeta_{10}=e^{i\pi/5}

則有:

\zeta^5=-1 \zeta^{r+5}=-\zeta^{r} \phi=2\cos\frac{\pi}{5} =\zeta+\zeta^{-1} =\zeta-\zeta^4 \frac1\phi =2\cos\frac{2\pi}{5} =\zeta^2+\zeta^3 \Phi_{10}(\zeta) =1-\zeta+\zeta^2-\zeta^3+\zeta^4=0

推出:

\phi\zeta^{n}=\zeta^{n-1}+\zeta^{n+1}

因此所有邊向量都能寫成\mathbb{Z}[\zeta]中的元素。

每條邊的向量值

三種棋子的邊長和角度如下所示:

加上\phi^{2}=\phi+1,可得以下表格:

邊長 向量值
1 \zeta^n
2 2\zeta^n
\phi \zeta^{n-1}+\zeta^{n+1}
2\phi 2\zeta^{n-1}+2\zeta^{n+1}
\phi^2 \zeta^{n-1}+\zeta^{n}+\zeta^{n+1}

其中 n 表示該邊的方向,每增加 1 就逆時針旋轉 36°。

則累計到環上最終點的向量值為:

W=c_0+c_1\zeta+c_2\zeta^{2}+c_3\zeta^{3}+c_4\zeta^{4}

在複平面上,因為有\zeta-\zeta^4=\phi\zeta^2+\zeta^3=\frac{1}{\phi},則實部和虛部的值分別為:

2\operatorname{Re}(W)=(2c_0-c_2+c_3)+(c_1+c_2-c_3-c_4)\phi
\operatorname{Im}(W)=\sin{\frac{\pi}{5}}[(c_1+c_4)+\phi(c_2+c_3)]

判定端點是否落在另一條邊上

我們以鑫棋的邊(被頂到的邊)為實軸,以第一個點為原點,第二個點在其正右方向,則最終只要是虛部為0,且實部落於前兩個點之間的範圍內,則可判定端點落在鑫棋的邊上。

當建立複平面模型的時候,從原點出發,每一個角度都是順時針角,則虛部大於零推出此端點在實軸的上方,否則為下方。在遞推偏移角度時,算法為「5-n+m」,n為當前轉折的內角,m為上一個結果。

以下圖為例:

在「34,33,30,29,26,16,27」所形成的環中,判斷「頂棋27」的端點是否落在「鑫棋34」的邊上,則建立以下複平面模型:

在這個複平面中,每個點所對應的向量值為:

邊長 角度 c_0 c_1 c_2 c_3 c_4
0 2 -2
1 5-8=-3 -1
1 5-6-3=-4 -1
1 5-1-4=0 1
φ² 5-3=2 1 1 1
φ 5-1+2=6 -1 -1

則得出最終頂點的向量值為:

\begin{cases}c_0=0\\c_1=2\\c_2=-1\\c_3=1\\c_4=-2\end{cases}

則因為c_1c_4c_2c_3互為相反數,所以虛部為0,端點與初始兩點共線。實部算得0<1+\phi<2\phi,所以頂棋的端點正好落在鑫棋的邊上。

另舉一個例子,「8,6,9,10,12,14,16,26,28」,這是一個沒頂到的例子。

經計算得:

\begin{cases}c_0=0\\c_1=1\\c_2=0\\c_3=1\\c_4=-2\end{cases}

則虛部算得\phi-1>0,而計算中的內角都是逆時針,因此頂點在實軸之下,頂棋和鑫棋未接觸。

如果把棋子換成這個:

則算得:

\begin{cases}c_0=0\\c_1=0\\c_2=1\\c_3=0\\c_4=-2\end{cases}

則虛部算得\phi-2<0,計算中的內角同樣都是逆時針角,因此頂點在實軸之上,頂棋和鑫棋發生干涉。(如果一定要嚴格的證明,則還需要把終點變成原點,得出開始的兩個點也處於新的複平面實軸的兩邊。)

Leave a Comment