跳转到主要内容

一个可以运行机器人AI玩家的Zombie Dice掷骰子游戏的模拟器。

项目描述

一个可以运行机器人AI玩家的Zombie Dice掷骰子游戏的模拟器。

Zombie Dice是来自Steve Jackson Games的一款快速、有趣的掷骰子游戏。玩家是僵尸,试图吃掉尽可能多的人类大脑,而不会被人用“霰弹枪”射中。在其回合中,玩家将随机从装有13个骰子的杯子里选择三个骰子并掷出。骰子面有大脑、脚印和霰弹枪。每掷到一个大脑得一分,但如果掷出的总霰弹枪数为三个,则被霰弹枪射中,本轮得分为零。然后你可以选择重掷或将回合传递给下一个玩家。如果骰子掷出“脚印”,则如果玩家选择重掷,它将被再次使用。(玩家每次掷骰子时总是使用三个骰子。)Zombie Dice具有“尝试运气”的游戏机制:你选择重掷的次数越多,你得到的大脑就越多,但你收集到三个霰弹枪的可能性也越大。游戏一直持续到某个玩家得到13个大脑,然后其他玩家再得到一个额外的回合。骰子颜色为绿色(大脑更可能掷出)、红色(霰弹枪更可能掷出)和黄色(大脑和霰弹枪概率相等)。

有关Zombie Dice的更完整规则,请在此处查看

这个模拟器适用于初学者/中级编程课程或比赛。制作机器人的API很简单,它还提供了一个网页用户界面,用于显示正在运行的锦标赛的精彩展示。

screenshot.jpg

快速入门

要安装,请运行通常的 pip install zombiedice(在Windows上)或 pip3 install zombiedice(在macOS/Linux上)。

您可以通过运行 python -m zombiedice(在Windows上)或 pip3 install zombiedice(在macOS/Linux上)来查看包含一些预制机器人的演示。

或者,您可以运行 import zombiedice; zombiedice.demo()

首先,您需要创建自己的僵尸。这是通过创建一个实现 turn() 方法(当轮到您的僵尸时被调用)的类来完成的。如果想要再次掷骰子,则 turn() 方法将调用 zombiedice.roll() 函数,或者返回以表示其回合结束。该 turn() 方法接受一个表示游戏状态的参数(稍后在页面上进行说明)。该类还应有一个 'name' 属性,其中包含玩家名称的字符串。(这样就可以在游戏中为多个玩家使用相同的类。)

zombiedice.roll() 函数返回一个字典列表。这些字典代表掷骰子的结果;它有 'color''icon' 键,它们可能的值为 'green''yellow''red''shotgun''brains' 以及 'footsteps'。列表将包含三个这样的字典,代表三次掷骰子的结果。如果玩家掷出了三个以上的霰弹枪,则该列表将为空。

以下是一个示例僵尸,它会一直掷骰子,直到掷出两个霰弹枪为止,然后停止。更多示例僵尸可以在 examples.py 文件中找到,位于 zombiedice 包内。

class StopsAt2ShotgunsZombie(object):
    """This bot keeps rolling until it reaches 2 shotguns."""
    def __init__(self, name):
        self.name = name

    def turn(self, gameState):
        shotgunsRolled = 0
        while shotgunsRolled < 2:
            results = roll()

            if results == []:
                # Zombie has reached 3 or more shotguns.
                return

            for i in results:
                # Count shotguns in results.
                if i[ICON] == SHOTGUN:
                    shotguns += 1

接下来,您需要运行一个锦标赛。创建一个调用 zombiedice.runWebGui()(用于美观的网页用户界面)或 zombiedice.runTournament()(用于纯命令行界面)的文件。一个典型的文件将类似于 demo.py 文件,位于 repo

import zombiedice

zombies = (
    zombiedice.examples.RandomCoinFlipZombie(name='Random'),
    zombiedice.examples.MonteCarloZombie(name='Monte Carlo', riskiness=40, numExperiments=20),
    zombiedice.examples.MinNumShotgunsThenStopsZombie(name='Min 2 Shotguns', minShotguns=2)
    # Add any other zombie players here.
)

# Uncomment one of the following lines to run in CLI or Web GUI mode:
#zombiedice.runTournament(zombies=zombies, numGames=1000)
zombiedice.runWebGui(zombies=zombies, numGames=1000)

示例僵尸

模块中包含了一些示例僵尸。

  • zombiedice.examples.RandomCoinFlipZombie(name) - 随机决定是否继续掷骰子或退出,概率各为50%。

  • zombiedice.examples.MinNumShotgunsThenStopsZombie(name, minShotguns) - 持续掷骰子,直到掷出指定数量的霰弹枪。

  • zombiedice.examples.MinNumShotgunsThenStopsOneMoreZombie(name, minShotguns) - 与 MinNumShotgunsThenStopsZombie 类似,但将再掷一次骰子。

  • zombiedice.examples.HumanPlayerZombie(name) - 调用 input() 允许人类玩家与机器人对战。

  • zombiedice.examples.RollsUntilInTheLeadZombie(name) - 持续掷骰子,直到成为第一名。

  • zombiedice.examples.MonteCarloZombie(name, riskiness, numExperiments) - 进行蒙特卡洛模拟(numExperiments)以确定再次掷骰子会发生什么。只要模拟结果显示掷出三个霰弹枪的概率低于 riskiness,它就会再次掷骰子。

TODO

关于此模块如何工作的更多详细信息即将推出。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

zombiedice-0.1.6.tar.gz (106.9 kB 查看哈希值)

上传时间

由以下提供支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面