4conq/README.md
szdytom e02a7d2b43
Add rule
Signed-off-by: szdytom <szdytom@qq.com>
2024-01-30 22:12:28 +08:00

1.8 KiB

4Conq

游戏规则

这个游戏在一个 nn 列的棋盘上进行(其中 n 为奇数),棋盘的每个格子上有一个 0n-1 之间的整数,使得每种数恰好出现 n 次。

我们称一个格子上的数是可删的,当且仅当:

  • 这个格子上的数还没有被删除过;
  • 这个格子在边界上,或者与至少一个已经删除过的格子相邻。

双方轮流行动,每个人每步删除一个可删的格子上的数。如果一个人删除了某一种数超过一半($\lceil n/2\rceil$),那么称这个人占领了这种数。如果一个人占领的数的种数多于一半($\lceil n/2\rceil$),则此人赢得游戏。

特别的,当一个人占领了某一种数时,立即从棋盘上移除这种数的全部格子。

实现细节

棋盘的编号从 0 开始,位置 (x,y) 表示棋盘的第 x 行第 y 列。

Strategy 目录下,你需要实现两个函数:

  • initStrategy(int n, const vector<vector<int>> &B):初始化,传入棋盘大小 n 和棋盘上各个格子的值 $B$。
  • getMove(int lstX, int lstY):获取走棋,传入对手上一步走棋的位置,返回一个 std::tuple<int, int> 表示你希望走的位置(特别的,如果你的程序先手,且处于第一回合时,lstXlstY 传入 -1)。

交互测试

编译裁判程序,在 Compete 目录下,使用命令

g++ *.cpp -Wall -O2 -o Compete

运行裁判程序 ./Compete,运行后会监听 3030 端口,等待选手程序连接。使用下面命令编译选手程序,

g++ *.cpp -Wall -O2 -o Stragegy

运行选手程序,会自动连接到裁判程序,当两个选手均连接后,裁判会自动开始游戏,并记录对局到 log.txt