我一直在修改,试图为流行的纸牌游戏Dominion(http://www.boardgamegeek.com/boardgame/36218/dominion)制作一个AI玩家.
如果你不熟悉游戏,它基本上是一个非常流线的魔术表哥:聚会,那里有一个大型的图书馆,他们有不同的规则.在游戏过程中,玩家购买这些卡并将其并入到他们的甲板上.
我从机器学习的角度对这个游戏感兴趣 – 我想让机器人相互对抗,让他们玩数百万的游戏,并尝试数据化洞察力,使他们玩得更好.
我不确定如何从核心AI决策逻辑中分离游戏规则(每张卡上印刷的逐字说明).
我已经开始的明显路径是为每张卡创建一个类,并将规则和AI的东西放在同一个地方.这是一个很大的 – 但它似乎是最小阻力的道路.但是,也许最适合每张卡支持某种接口,然后对其进行AI组件编码?
是否有“正确”OOP设计?还是几种合理的可能性?
解决方法
我会倾向于将卡的行为封装为自己的类,容易地对具有多个行为(即选择)的卡进行.它还可以让您编写可参数化的行为,并将其与卡混合使用.
所以卡会包含卡的成本,可以播放的名称,名称等等.它还将包含卡片可以做的行为列表.
这些行为被AI演员视为卡片的一部分.只有另一个财产,卡可以与成本一起被称重.
实际上使用卡的行为的AI演员需要能够解释这些行为,所以行为类可能需要包含一些提示,让人们理解它,但是并不包含实际的AI逻辑本身.如果AI需要针对特定卡片的特定行为,将这种事情写入AI actor,而不是卡片行为.
如果AI演员需要知道,例如,这种行为有一个预期的胜利点.2点/圈的回报,这可能是行为的一部分,作为一个提示AI选择什么牌买/玩.
但是,我真的不知道你如何接近你的AI演员设计,所以也许这没有意义.但是,我认为,将卡作为财产的行为视为卡片本身的基本部分,这可能有所帮助.
它为您提供封装AI演员的默认动作(演员可以不需要卡片的东西)作为行为的优势,因此您可以在没有任何特殊情况代码的情况下对这些动作进行权衡.