python写机器人玩僵尸骰子
python写机器人玩僵尸骰子
由Al Sweigart用python发布
注意:我正在为我的僵尸骰子模拟器寻找反馈,以及这一套指令。如果你觉得有什么地方可以改进,请发邮件到al@inventwithpython.com。
编程游戏是一种游戏类型,玩家不直接玩游戏,而是编写机器人程序来自主玩游戏。我已经创建了一个僵尸骰子模拟器,允许程序员在玩ai游戏的同时练习他们的技能。僵尸骰子机器人可以是简单的或难以置信的复杂,是伟大的类练习或个人编程挑战。
如何玩僵尸骰子
僵尸骰子是一个快速,有趣的骰子游戏从史蒂夫杰克逊的游戏。玩家们都是僵尸,试图吃掉尽可能多的人类大脑而不被“射杀”。有13个骰子,上面有大脑、脚印和猎枪的图标。骰子的颜色是绿色(大脑更有可能),红色(猎枪更有可能),黄色(大脑和猎枪平分)。
他们将:杏仁图片
玩家从杯子里随机取出骰子,直到手中有三个骰子,然后滚动骰子。玩家总是掷三次骰子。
他们把大脑(被吃掉的人类)和猎枪(反击的人类)放在一边。
如果玩家在此回合中拨出三把散弹枪,他们的回合将以零分结束。
如果玩家决定再次掷骰子,他们手中会保留任何出现脚印的骰子。
否则,玩家可以选择结束他们的回合,在那里他们将收集每个大脑一分,并返回所有骰子为下一个球员的杯。
或者玩家可以选择继续他们的旋转和再次滚动。回到第1步,注意任何已经出现在步骤中的骰子都将被重用。
僵尸骰子有一个“推你运气”的游戏机制:你重新掷骰子的次数越多,你能得到的大脑就越多,但你最终得到三把猎枪并失去一切的可能性就越大。一旦一个玩家达到13分,剩下的玩家就会得到一个回合(潜在的追赶),游戏就结束了。得分最多的选手获胜。
更多关于僵尸骰子的完整规则可以在这里找到:
PDF英文规则
动画Flash演示如何播放
说明文章的规则
YouTube上有人解释规则的视频
机器人编程挑战
要使用pip安装模拟器,请运行pip install zombiedice(在Windows上)或pip3 install zombiedice(在macOS和Linux上)。要使用一些预先制作好的机器人运行一个演示程序,可以运行python -m zombiedice(在Windows上)或python3 -m zombiedice(在macOS和Linux上),以查看模拟器的web gui示例:
模拟器可以快速运行数百个游戏,记录每个机器人获得多少胜利和平局。
您将通过使用turn()方法编写类来创建bot,当轮到机器人时,厂家专卖网站模拟器会调用该方法。在这个turn()方法中,您将尽可能频繁地调用zombiedice.roll()函数(当然,在您的回合中至少应该调用一次)。类超出了本文的范围,但是您可以简单地更改myzombie.py中的turn()代码:
进口zombiedice
类MyZombie:
def __init__(自我、名称):
self.name =名字
def转(自我,gameState):
# gameState是一个带有关于游戏当前状态信息的字典。
您可以选择在代码中忽略它。
第一个卷
# roll()返回一个字典,其中有键“brains”、“shotgun”和
#“脚步声”,每个类型有多少卷。
# 'rolls'键是一个包含(颜色、图标)元组的列表
准确的滚动结果信息。
滚动()返回值的例子:
#{‘大脑’:1,‘脚步’:1,‘猎枪’:1,
#“卷”:[(“黄色”,“大脑”)(“红”、“脚步”),
#(“绿色”、“猎枪”)]}
你的僵尸程序的代码逻辑在这里:
大脑= 0
而diceRollResults并不是没有:
大脑+ = diceRollResults(“大脑”)
如果大脑小于2:
diceRollResults = zombiedice.roll() # roll再一次
其他:
打破
类AlwaysRollsTwicePerTurn:
def __init__(自我、名称):
self.name =名字
def转(自我,gameState):
zombiedice.roll()
zombiedice.roll()
僵尸=(
zombiedice.examples.RandomCoinFlipZombie(name =“随机”),
zombiedice.examples。RollsUntilInTheLeadZombie(name =“直到领先”),
zombiedice.examples。MinNumShotgunsThenStopsZombie(名字='停在2枪',minShotguns=2),
zombiedice.examples。MinNumShotgunsThenStopsZombie(名字='停在1枪',minShotguns=1),
MyZombie(name =“我的僵尸机器人”),
AlwaysRollsTwicePerTurn(name = '滚两次'),
添加其他僵尸玩家。
)
在CLI或Web GUI模式下运行的下列代码之一取消注释:
# zombiedice.runTournament(僵尸=僵尸,爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来。想抓取什么?这个由你来控制它咯。关于SEO优化,不仅仅是SEO知识点的学习,更是SEO资源和SEO策略的积累。多数SEO人员学完了整套SEO视频无法独立优化网站的最大原因是因为任何SEO培训教程都是在阐述SEO的知识点,并没有给与学员本身系统化的SEO流程化分析。所以多数从业人员并不知道第一步该做什么、第二步又该做什么。导致你即使参加了SEO培训,也无法操作网站排名。当然,也有一部分人领会到了SEO优化流程化思想,但是真正操作一个SEO优化的时候网站排名总是上不去,其实归结到底,还是资源性的问题。其实任何一个行业都是如此,资源决定你的SEO的走向,比如做SEO排名当中经常要用到的外链,几乎任何一个SEO培训机构都给不出,而通过SEO培训提供全新的SEO方法,足够让你在前期的实战SEO当中比任何一个人都要具备先天的网站排名优势。
python写机器人玩僵尸骰子的更多相关文章
- python写红包的原理流程包含random,lambda其中的使用和见简单介绍
Python写红包的原理流程 首先来说说要用到的知识点,第一个要说的是扩展包random,random模块一般用来生成一个随机数 今天要用到ramdom中unifrom的方法用于生成一个指定范围的随机 ...
- 用aardio给python写个图形界面
前阵子在用python写一些小程序,写完后就开始思考怎么给python程序配一个图形界面,毕竟控制台实在太丑陋了. 于是百度了下python的图形界面库,眼花缭乱的一整页,拣了几件有“特色”有“噱头” ...
- Python实现机器人聊天
今天午休的时候,无意之中看了一篇博客,名字叫Python实现机器人,感觉挺有的意思的.于是用其写了一个简单的Python聊天,源码如下所示: # -*- coding: utf- -*- import ...
- 如何Python写一个安卓APP
前言:用Python写安卓APP肯定不是最好的选择,但是肯定是一个很偷懒的选择,而且实在不想学习Java,再者,就编程而言已经会的就Python与Golang(注:Python,Golang水平都一般 ...
- Python写爬虫-爬甘农大学校新闻
Python写网络爬虫(一) 关于Python: 学过C. 学过C++. 最后还是学Java来吃饭. 一直在Java的小世界里混迹. 有句话说: "Life is short, you ne ...
- 用Python写Verilog(非HLS)
https://blog.csdn.net/qq_32010099/article/details/81197171 前段时间玩Python的时候好奇, 既然Python这么强大, 那么能不能用Pyt ...
- Python写各大聊天系统的屏蔽脏话功能原理
Python写各大聊天系统的屏蔽脏话功能原理 突然想到一个视频里面弹幕被和谐的一满屏的*号觉得很有趣,然后就想用python来试试写写看,结果还真玩出了点效果,思路是首先你得有一个脏话存放的仓库好到时 ...
- Python写地铁的到站的原理简易版
Python地铁的到站流程及原理(个人理解) 今天坐地铁看着站牌就莫名的想如果用Python写其工作原理 是不是很简单就小试牛刀了下大佬们勿喷纯属小弟个人理解 首先来看看地铁上显示的站牌如下: 就想这 ...
- 用Python写一个简单的Web框架
一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...
随机推荐
- 写一个小demo过程中遇到的各种问题 学生管理考勤系统(网页模拟)
添加与新增一些小玩意的1.0.3版本:传送门 各位带哥,这不是你们要的c++.java.c#作业哈 课上要求做个小作业,学生管理考勤系统,原本想着是个练手的好机会,结果只证实了我还是个弟中弟. 设想的 ...
- log4js_Node.js中的日志管理模块使用
{ "appenders": [ // 下面一行应该是用于跟express配合输出web请求url日志的 {"type": "console" ...
- PhotoShop阵列功能
阵列有两种,如下.但是PS没有阵列这一工具,一定要用ps的话,可以参照以下两条: 1:方形阵列 先按CTRL+ALT+T 会出现一个自由变换选取 但是这个是多重复制的选取只要一动就能复制了 确定 然后 ...
- springmvc启动时报错:找不到类ContextLoaderListener:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderLis ...
- jquery查找筛选器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Delphi Qjson
使用QJSON解析数据: JSon 字符串: {"Code":1,"Msg":"", "Data":[{"Ne ...
- babel 基本
babel的大概知识点 . babel常用的转译器是babel-preset-env. 常用的配置选项是plugins和presets 常用的使用场景是在webpack中 https://www.cn ...
- Linux命令:history
显示历史(执行过的)命令. history [n] history -c history -d offset history -anrw [filename] history -p arg [arg ...
- Linux主题:获取帮助
Linux有多种方式获取帮助,这些帮助通过不同的命令,获得不同详细程度和文字量的帮助. help help方式有两种用法,一种是help command,另一种是command --help.前一种是 ...
- JAVA 16进制转ASCII -- 2018年5月25日 周五
/** * 16进制转ASCII * * @param hex * @return */ public static String hex2Str(String hex) { StringBuilde ...