人工智能竞赛游戏

slime-mind的Python项目详细描述


粘液心

slime

简介

我们制作这个游戏结构是为了让我们可以编写和测试人工智能程序。作者可以使用示例代码探索自己的人工智能。作为一个作家的代码进步,他们应该提交它,以测试其他人工智能。最终比赛将在所有参赛者之间进行。

目前的游戏仍在平衡中,许多参数可能会改变。将作出改变,试图平衡系统,但不破坏某些战略。如果有人想出了一种方法,无论是通过复杂的人工智能还是开箱即用的策略,都能取得胜利,那么这对他们来说是好事。

最终可能会添加额外的游戏机制,并且可能会发布具有相同基本结构但附加机制的新游戏。

设置

建议的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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
无法使用windows x86上的Java验证在linux x64上签名的数字签名   java Firebase通过键从子级检索数据   Java缓存网络文件   java独立jdbcpool实现内存泄漏   java为什么MVN在成功构建时返回1?   java maven正在抛出BoundsException数组   Java:是否可以有“嵌套”映射方法(Java.util.stream)?   java无法使用GSON解析JSON文件   java Spring Groovy集成   java使用SAX解析器,需要所有xml元素(在特定元素下)作为字符串   java列出内容提供商Android 3.1中的内容   java如何使用带有spring api的JPA查询进行软删除?   java隐藏我的socket构造函数以隐藏IP和端口   Java将(JEP359)记录为Spring控制器请求和响应DTO   java在数组中循环时忽略空值   RESTAPI端点的java发现模式   java HTTPs在jmeter中发布带有头的请求测试,并将测试结果保存在mongodb中,并在grafana中显示