WM Blog

写一个AI来玩桌面游戏 Auzl--partⅠ

Word count: 1.1kReading time: 3 min
2020/07/28 Share

我们AI课的项目需要我们组队实现可以玩桌面游戏Auzl的agent。这个游戏规则比较多,但是都不复杂,在这篇中先简单说明一下这个游戏规则:
首先每个人都有一块个人的面板,对应图中A。面板上方区域(Scoring track)是记分区,用来记录当前玩家获得了多少分。下边区域是地板区(Floor lines)每一个方格内记有该格对应的负分,在每一轮结束的时候结算。中间左边区域叫做预备区(Pattern lines),每轮玩家拿到的砖需要先放入这个区域中。右边墙(Wall)为结算的时候将左边预备区每一行填满的砖移入右边对应颜色对应行中。对于2人游戏来说,首先需要准备5个工厂(Factory)对应图中的C,袋中预先存放所有的砖块,每次从袋中(D)随机取出4块砖,放满所有工厂。
Auzl1

游戏目标

游戏的目标是成为游戏结束时分数最高的玩家,当有一名玩家在一轮结束时凑齐了水平的连续五个即一行则本局游戏结束。
Auzl2
##游玩过程
一局游戏包含很多轮,每一轮分为3个阶段
1.工厂供应
2.往墙上贴砖
3.准备下一轮

工厂供应

第一回合先手玩家将先手标志放在中间区域并且开始。到你的回合之后,你可以有以下几种选择
1.从其中一个工厂拿走所以颜色相同的砖然后把剩下的砖移到中间区域
2.或者在中间区域拿走相同颜色的所有砖,如果你是这回合第一个从中间区域拿砖的人,那么你需要同时拿走先手标志并且需要把它放置到地板区。
然后,将这些你拿到的砖放到其中一行预备区之中(第N行有N个空)
Auzl2
将这些砖从右到左依次放入预备区中,如果预备区已经有砖,那么只能放入同样颜色的。一旦一行预备区的所有空都被填满,则这一行完成,在这一回合结束,将一块移入右边墙上对应颜色的空位,将其他的放回袋子中。
同时需要注意的时候,在后面的回合中,你不能在预备区放上在对应行墙上已经有的颜色的砖(因为每一行一种颜色只有一个位置)。
Auzl2

往墙上贴砖

这一步每一个玩家同时进行,从他们已经完成的行中移走所有砖,填到墙上对应位置。
从上到下来一次移入,每移一个砖,立即计分。
Auzl2

算分

1.如果没有砖与移入的相邻(垂直或者水平)则记为1分
2.如果有任何相邻的则按照如下来算:
首先检查水平相邻的砖的个数,得分即为个数,然后计算垂直方向相邻的个数,得分为个数。最后,得分为单独1分加上水平与垂直相邻的个数和,注意的是,如果移入的位置是垂直和水平的交叉点,那么会有额外一分。
最后还需要减去地板区分数的总和,地板区的砖会从左到右依次放置,你在上面的预备区没有可以放置的选择时,你只能选择将他们放入地板区。
Auzl2

准备下一轮

如果没有人在本轮中完成一整行,那么准备下一轮。那个在上一轮中拿到先手标志的人会第一个选择,在往工厂放砖的时候,如果袋子为空的时候,把之前放在盒子盖上面的砖,也就是铺墙剩下来的残料和之前每轮中地板上的砖放到袋子里面重新摇匀。在模型特殊情况下已经砖块已经不能放满工厂那么还是继续开始下一轮。

游戏结束时

当游戏结束时,还有一些额外的分数需要计算:
1.每集齐一整行,获得额外2分
2.每集齐一竖行,获得额外7分
3.每集齐五个相同颜色的砖,获得10分额外分
最后每个玩家的得分即为之前每回合的得分和加上最后的额外分数。

CATALOG
  1. 1. 游戏目标
    1. 1.1. 工厂供应
    2. 1.2. 往墙上贴砖
    3. 1.3. 算分
    4. 1.4. 准备下一轮
  2. 2. 游戏结束时