黑白棋
游戏规则
玩家数目:两人(分为黑白双方)
游戏将在 8 行 8 列的棋盘上进行,其中行列编号均为 0~7,约定使用 (x, y) 表示第 x 行第 y 列。
游戏开始前,(3, 3) 和 (4, 4) 各有一个白色棋子, (3, 4) 和 (4, 3) 各有一个黑色棋子。
游戏开始后,黑方先走子,白方后走子,然后双方轮流走子。
玩家在自己的回合内需要选择一个空位置,放置自己颜色的棋子,并至少翻转一个对方的棋子. 棋盘上没有空位置或者不能翻转对方的棋子时,游戏结束,此时棋盘上黑色棋子多则黑方胜利,白色棋子多则白方胜利,一样多则平局.
翻转对方棋子的含义为: 在位置 A 放置一个新棋子,且位置 B 已经有一个己方棋子,如果位置 A, B 在同一行/列/对角线,且 A, B 之间没有空位置,且 A, B 之间至少有一个对方棋子,那么可以将 A, B 之间的对方棋子全部「翻转」为己方棋子.。
如果位置 A 周围不同方向的棋子都可以翻转, 那么它们都会被同时翻转。
AI 编写说明
Python 版
黑白棋提供了 Python 版本的 AI SDK,用户需要在 main.py
中实现一个 player_ai(board, player, logic)
函数, 根据当前棋盘状态返回下一步走子操作 (x, y)。
board
为 int
类型的列表, 长度为 64,从上到下,从左到右依次表示棋盘每个格子,0 代表黑棋子, 1 代表白棋子,2 代表空格子,player
表示当前玩家,
logic
用于调用游戏逻辑的 API, 支持的操作有:
logic.get_id(x, y)
:获取 (x, y) 点在长度为 64 的 Board List 里的下标logic.ask_next_pos(board, player)
: 参数为长度为 64 描述棋盘的 Board List 和描述当前落子方的 Player,返回值为长度为 64 的 list,list 中数字 1 代表可以落子, 数字 0 代表不可落子
C++ 版
黑白棋提供了 C++ 版本的 AI SDK,用户需要在 main.cpp
中实现一个 getNext(int* board_init, int& nxt_x, int& nxt_y, const int& player_now)
函数,根据当前棋盘状态返回下一步走子操作 (nxt_x, nxt_y)
。
board_init
为一个 int
数组,长度为 64,从上到下,从左到右依次表示棋盘每个格子,0 代表黑棋子, 1 代表白棋子,2 代表空格子。
player_now
表示当前玩家,0 为白方,1 为黑方。
作出的决策应保存在 nxt_x
和 nxt_y
中,分别存放 x 和 y 坐标。
你还可以调用这些函数:
int getIndex(int i, int j)
:获取 (i, j) 点在长度为 64 的 board 数组中的下标bool checkIn(int i, int j)
:判断 (i, j) 是否在允许的范围内void printBoard(int* board)
:打印当前棋盘,用于调试
如何调试
AI需要通过stderr
标准错误流来输出自己的调试信息,具体操作方式如下:
Python
C++
播放器使用说明
黑白棋提供了 html5 版本的播放器,可以支持观看回放和在线游戏。
在网站上点击对局的录像文件, 会使用播放器进行回放,可以自动播放或者手动逐步观看。
人类玩家可以通过房间系统加入黑白棋游戏,用户可以播放器进行游玩,每一回合播放器会标记可下的位置,用户通过鼠标点击落子。