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")

Hex棋的更多相关文章

  1. win10 服务(系统默认服务)注册表

    ---恢复内容开始--- Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services] ...

  2. quartus和modelsim中使用mif和hex文件

    .mif和.hex文件都是Quartus支持的数据文件格式,常被用作内存初始化文件.可是,M odelSim却不支持.mif文件,只支持.hex文件格式,这意味着如果你的设计采用了.mif文件 ,你的 ...

  3. [CareerCup] 17.2 Tic Tac Toe 井字棋游戏

    17.2 Design an algorithm to figure out if someone has won a game oftic-tac-toe. 这道题让我们判断玩家是否能赢井字棋游戏, ...

  4. 开源战棋 SLG 游戏框架设计思考(一)简介和游戏引擎

    战棋 SLG 游戏 SLG(Simulation Game)游戏是模拟游戏的简称.战棋类的SLG有两种:一种是 War Game 中的兵棋推演分支,常见的游戏有战争艺术3(TOAW3 — The Op ...

  5. 类型转换bin()、chr()、ord() 、int()、float()、str()、repr()、bytes()、tuple(s )、 list(s )   、unichr(x ) 、 ord(x )  、 hex(x )  、          type()数据类型查询

    1.bin() 将整数x转换为二进制字符串,如果x不为Python中int类型,x必须包含方法__index__()并且返回值为integer: 参数x:整数或者包含__index__()方法切返回值 ...

  6. 隔壁信概大作业xjb写——同化棋ATAXX

    话说泥萌北大信科啊,助教是有多懒...去年黑白棋今年同化棋,顺带打ai都不用自己写标程... 好吧..我知道泥萌重点在各种sb的辅助操作上..什么悲剧的可以随时暂停载入...有毒吧 [据说泥萌上课没讲 ...

  7. HEX文件格式和其校验算法

    这次我将在原来的基础上(http://www.cnblogs.com/libra13179/p/5787084.html)继续讲解HEX文件的格式 打开app_valid_setting_apply. ...

  8. quick cocos2d-x 入门---井字棋

    学习quick cocos2d-x 第二天 ,使用quick-x 做了一个井字棋游戏 . 我假设读者已经 http://wiki.quick-x.com/doku.php?id=zh_cn阅读了这个链 ...

  9. 使用Apache的Hex类实现Hex(16进制字符串和)和字节数组的互转

    包名称:org.apache.commons.codec.binary 类名称:org.apache.commons.codec.binary.Hex 1.字节数组(byte[])转为十六进制(Hex ...

随机推荐

  1. git打pach包

    在开发中,我们发出的基线版本号常常会有一些bug须要修复,假设採用本地上库,然后再给用户新的版本号,可能会费时费力,而假设给用户我们改动后的代码让用户一行一行合入本地,也显的比較落后,假设用户那边也使 ...

  2. Why游戏作品合集

    之前曾经发过一个套WhyEngine游戏作品合集,里面有十几个小游戏和若干个屏保程序和若干个DEMO程序.而这次发的与上次不一样,因为这是我花了两天时间将所有的程序集成到一个工程后的成果.为了能将所有 ...

  3. [13] 弧面(Arc)图形的生成算法

    顶点数据的生成 bool YfBuildArcVertices ( Yreal radius, Yreal degree, Yreal height, Yuint slices, Yuint stac ...

  4. ubuntu14.04开启root用户 设置root密码 配置国内镜像源 设置分辨率

    一.Ubuntu 默认是不允许 root 通过 ssh 直接登录的,可以修改 /etc/ssh/sshd_config,设置 1 PermitRootLogin yes 然后重启 ssh 服务即可 1 ...

  5. Android消息通知-Notification

    Android中常用的消息提醒,一种是Toast弹出提醒内容,一种是AlterDialog弹出框来提醒用户,还有一种就是消息通知的,用Android经常收到各种通知就是Notifation.Notif ...

  6. Merge Sorted Array leetcode java(回顾MergeTwoArray和MergeTwoLinkedList)

    题目: Given two sorted integer arrays A and B, merge B into A as one sorted array. Note: You may assum ...

  7. dubbo+maven多模块项目单元测试

    基本上就是记录各种报错的解决办法.基本上就是将散落在项目各个模块中的配置文件复制到测试模块中. 目录结构: ——src ——java ——test ——java ——DaoTest.java ——re ...

  8. eclipse全屏模式

  9. Visio 2013 由于形状保护、容器和/或图层属性的设置,无法完全执行此命令

    形状的保护 解决问题:Visio 2013 由于形状保护.容器和/或图层属性的设置,无法完全执行此命令 重要: 本文是由机器翻译的,请参阅免责声明.请在 此处 中查找本文的英文版本以便参考. 禁止对形 ...

  10. Discuz常见大问题-如何自定义单个页面

    比如我们先做一个最简单的网站的最后一页关于我们(插入了一幅图片,同时加入了几行文字) 先做好两个页面的文件(php页面是负责解析htm页面的,目前这两个页面都是空的) mypage_about.php ...