Hex棋
Hex棋,又叫六角棋,譯作海克斯棋。據說這個游戲是約翰·納什發明的。網上并沒有太多介紹,第一次聽說是在“中國大學生計算機博弈大賽”官網上。
棋盤為11×11的六邊形小格子組成,它是一種兩人添子類游戲(跟五子棋一樣)。
它的游戲規則是:兩人輪流下子,直到有一方用棋子溝通了兩條邊(比如先手溝通上下兩邊則勝利,后手溝通左右兩邊則勝利)
這是一個先手必勝的游戲
這是一個沒有和棋的游戲(我認為這就是這個游戲的魅力所在,我們要證明的就是它到底是先手必勝還是先手必敗)
如何證明這個游戲不可能和棋呢?
這個問題等價于“給定一個下滿棋盤的Hex棋,必然能夠找到一條線溝通兩邊”
實際上,對于一個平面圖,要想隔斷兩條邊必然要連接另兩條邊。這句話就是證明。
Hex棋顯然是一個平面圖,因為它的棋盤邊沒有交叉。
如何證明這個游戲先手必勝呢?
假設這個游戲后手必勝,那么先手從第一個子就模擬后手的必勝走法,從而先手必勝。推出矛盾,所以這個游戲先手必勝。
一言以蔽之,這個游戲是一個子越多越好的游戲。如果這個游戲子多反而是一種累贅,那么先手不一定必勝。
這是一個狀態挺多的游戲,一般添子類游戲狀態都很多。
它的狀態數多達10的56次冪之多,比象棋(中象國象差不多)的10的40次冪還要多,但是感覺Hex比象棋簡單多了。
下面統計一下添子類游戲(不包括圍棋,圍棋是添子吃子類游戲,象棋是不添子吃子類游戲)的狀態數
0 0
1 0
2 13.0
3 2509.0
4 5183757.0
5 82109232401.0
6 1.2159122802580694e+16
7 1.6639278209049916e+22
8 2.0909903631443116e+29
9 2.4017537903420486e+37
10 2.5134265191388166e+46
11 2.390899903133055e+56
12 2.063808117058896e+67
13 1.6144415223776914e+79
14 1.1433467158917951e+92
15 7.324613324267597e+105
16 4.24188344332279e+120
17 2.2195633321116892e+136
18 1.0488619415965058e+153
19 4.4745506430191615e+170
python代碼如下
def c(x, y):
ans = 1
for i in range(1, y + 1):
ans = ans * (x + 1 - i) / i
return ans
for n in range(20):
print(n,sum([c(n * n, i) * c(n * n - i, i) for i in range(n * n // 2)]))
這個游戲的棋盤其實可以變成如下這樣:
from PIL import Image, ImageDraw
w = 30
n = 11
img = Image.new("RGBA", (w * n, w * n), "orange")
draw = ImageDraw.ImageDraw(img)
for i in range(n):
draw.line((w / 2, w / 2 + i * w, w / 2 + (n - 1) * w, w / 2 + i * w), 'black', 3)
draw.line((w / 2 + i * w, w / 2, w / 2 + i * w, w / 2 + (n - 1) * w), 'black', 3)
draw.line((w / 2, w / 2 + i * w, w / 2 + i * w, w / 2), "black", 3)
draw.line((w / 2 + (n - 1) * w, w / 2 + i * w, w / 2 + i * w, w / 2 + (n - 1) * w), "black", 3)
img.show()
img.save("haha.jpg")
總結
- 上一篇: lol洛无限火力怎么出装(英雄联盟无限火
- 下一篇: 放置奇兵三巨头是谁