人工智能竞赛游戏
slime-mind的Python项目详细描述
粘液心
简介
我们制作这个游戏结构是为了让我们可以编写和测试人工智能程序。作者可以使用示例代码探索自己的人工智能。作为一个作家的代码进步,他们应该提交它,以测试其他人工智能。最终比赛将在所有参赛者之间进行。
目前的游戏仍在平衡中,许多参数可能会改变。将作出改变,试图平衡系统,但不破坏某些战略。如果有人想出了一种方法,无论是通过复杂的人工智能还是开箱即用的策略,都能取得胜利,那么这对他们来说是好事。
最终可能会添加额外的游戏机制,并且可能会发布具有相同基本结构但附加机制的新游戏。
设置
建议的IDE
你可以自由使用任何你想创建你的人工智能编辑器。如果您不知道从哪里开始,我们建议您使用Visual Studio代码
安装python
必须安装Python3.6或更高版本。有关步骤,请参见本指南。
安装库
您必须安装arcade以使游戏可视化。
运行匹配项
跑步者
有多种方法可以使ais相互冲突。所有这些都可以在main.py
中找到。有关说明,请尝试
python main.py --help
配置
在config.ini
中有一些配置选项,例如关闭可视化功能。
注意:无论render
配置如何,multi-match runner都不会显示匹配项。
游戏机制
设置
黏液思维是在一张地图上播放的,地图被分成若干列和行的正方形。可以在config.py文件中更改列和行的确切数目。然而,用于比赛的标准号码是: 30列15行(可能会被调整)。在游戏开始时,植物、岩石和黏液被随机地放在地图上,并在x和y上镜像,这样玩家就有了一个公平的游戏环境。
圈数
玩家ais控制每一轮他们团队中的每一个黏液。一旦游戏开始,每个物体每转一圈。
- 石头先走,什么也不做。
- 接下来,植物将在本文档"游戏片段"部分描述的定义人工智能上运行。
- 然后,在每个小组之间交替使用黏液,直到所有黏液都消失为止。 然后地图将更新并完成转弯。
游戏片段
这个游戏有三种类型。它们都具有以下属性:
x - This is the column index of the game piece (starting from 0)
y - This is the row index of the game piece (starting from 0)
岩石
石头只会挡道。它们放在游戏开始时,不能移动或销毁。
植物
植物是黏液的食物来源。所有工厂都具有以下属性:
max_level - This is the highest level a plant can reach.
level - Used to calculate the maximum health of the plant.
max_hp - This is the most health a plant can have.
current_hp - This is the current health of a plant.
在游戏开始时,植物被放置在一级,有一定的生命值。植物的每一个回合都有%的几率升级,这将增加最大生命值,恢复一些失去的生命值。一旦植物达到最高水平,它将获得传播种子的能力。每一轮最高水平的植物有百分之一的机会传播一个种子到它周围的8个方格之一。如果一株植物在一级播种成功,另一株植物将被放置在目标方块中。最高级别的植物将在可视化工具中改变颜色。
粘液
粘液是由提交的人工智能代码控制的游戏,将用于确定哪个人工智能赢得一个游戏。每个粘液has下列属性:
xp - Used to calculate the level of a slime.
max_level - This is the highest level a slime can reach.
level - Used to calculate the attack and maximum health of the slime.
maximum_hp - This is the most health a slime can have.
current_hp - This is the current health of a slime.
attack - This is the amount of health a slime or plant will lose when this slime bites it.
黏液在游戏开始时放在1级。黏液攻击和最大生命值随着等级的提高而增加。下表显示了黏液成为每一层的最小经验值和该层的其他属性。完整的公式可以在代码中找到。
xp level attack max_hp
1 1 3 11
2 2 4 13
6 3 7 18
15 4 10 23
33 5 13 31
62 6 16 40
106 7 20 50
169 8 24 61
254 9 29 75
368 10 33 89
513 11 38 105
695 12 43 122
每转一圈,每一个黏液都有一个回合来执行一个由提交的人工智能决定的动作。无效命令和超过设置超时的ai将被忽略,跳过slime的循环。在下一轮粘泥开始之前,立即应用有效的命令。请注意,给定ai的游戏状态是不可变的,因此更改不会反映在游戏引擎中。
命令
粘液只能接受10个可接受的命令。它们是:
LEFT
RIGHT
UP
DOWN
BITELEFT
BITERIGHT
BITEUP
BITEDOWN
SPLIT
MERGE
移动命令
slime可用的四个移动命令是:
LEFT
RIGHT
UP
DOWN
move命令尝试将煤泥移动到相应的方向(左
将煤泥移动到具有相同y值但x值小于1的正方形…)。如果目标方格被另一个游戏块占据或超过地图边缘,则移动将被忽略。
BITE命令
可用于slime的四个bite命令是:
BITELEFT
BITERIGHT
BITEUP
BITEDOWN
bite命令试图以特定方向攻击附近的游戏块。如果在这个位置没有一个有效的目标,那么黏液对它的回合就没有任何作用。如果目标位置有黏液或植物物体,则黏液或植物的当前健康状况会因咬黏液而降低。咬粘液的当前hp
增加1,其xp
增加1。
拆分命令
slime唯一可用的split命令是:
SPLIT
要分解黏液必须至少达到4级。分割在任何相邻的空正方形中创建新的1级粘液。这将分裂粘液的xp
除以4(四舍五入)。
合并命令
slimes唯一可用的合并命令是:
python main.py --help
0
这将粘液设置为准备合并。如果一个相邻的友好煤泥准备合并,它将被摧毁,而初始煤泥将获得其xp
。每转一圈,所有粘液都设置为不再准备合并,因此您必须在一圈内协调合并。
胜利条件
游戏将持续到1000岁或直到一个队有0黏液。每个小组的分数都是根据剩余的黏液计算的。此分数计算仅基于煤泥水平而不是其总经验值。下表显示了一个简化的水平分数比。完整的公式可以在代码中找到。
python main.py --help
1
比赛结束时总分最高的球队获胜。
编写自定义ai
您的ai必须继承playerbase
类并重写command\u slime
方法。有关示例,请参见playercode
文件夹。
包装
运行以下命令打包此库:
python main.py --help
2