最近看到一个很有“未来感”的新闻:
一辆特斯拉在拉斯维加斯出了车祸,撞“死”了一个……emmmm……机器人。不知道是意外还是炒作,又或者是这位机器人故意碰瓷,反正人们也无法从受害者口中了解“被特斯拉撞是怎样一种体验”了。

图为受害者,情绪看起来很稳定

随着“人工智能”的应用场景越来越多,此类新闻以后可能也会越来越频繁。但愿这些机器人们能严格遵守阿西莫夫三定律

  1. 机器人不得伤害人类个体,或者目睹人类个体将遭受危险而袖手不管
  2. 机器人必须服从人给予它的命令,当该命令与第一定律冲突时例外
  3. 机器人在不违反第一、第二定律的情况下要尽可能保护自己的生存

在早些年,人工智能这个概念还没有这么火的时候,提到 AI 经常是指游戏中电脑角色的运行策略。比如枪战游戏、即时战略游戏、MOBA 类游戏中的电脑方,对于寻路、攻击、躲避等行为的判断和执行。早期的一些 AI 有点傻,真的可以称得上“人工智障”。比如玩过星际争霸的玩家一定知道“勾农民”的战术:你只要攻击一下电脑方的基地,它的所有农民就会放下手中工作来追着你。

然而正因为如此,产生了一种程序员之间特有的较量:编程游戏。所有人针对某一个游戏规则编写策略,看谁的策略表现得更好,能打败其他人,最终取得胜利。像星际争霸、CS之类的经典游戏都有过类似的比赛。优秀的代码甚至可以挑战人类,比如这两年为人所熟知的 AlphaGo,就是此类的极致。而对于编程新手来说,编程游戏也是练习代码的极好方式。

在众多可编程的游戏中,有个比较知名的项目:Robocode。它是 IBM 在 2001 年发布的坦克机器人战斗仿真引擎,并在数年后开源。简单来说,它就是一个“坦克大战”的游戏,你可以控制一辆坦克,和别人对战。然而与一般游戏所不同的是:你不是通过键盘鼠标控制坦克,而是需要自己写一段代码,制定坦克的策略,在游戏开始后自动对战。



坦克由三部分组成:

  1. 车身
  2. 炮台(决定开炮方向)
  3. 雷达(用以发现敌人)

在代码中,你可以通过接口获取以下数据:

  1. 坦克当前坐标
  2. 车身、炮台、雷达的朝向角度
  3. 战场长宽尺寸
  4. 事件响应,包括:探测到敌人、被子弹打中、碰撞到敌人、碰撞到墙壁等

以及控制坦克的:

  1. 前进、后退
  2. 车身旋转
  3. 炮台旋转
  4. 雷达旋转
  5. 开炮

一些基本规则:

  1. 每辆坦克具有一定的能量,初始值相同,当能量降到0时则被消灭
  2. 被敌人击中会扣能量,但击中敌人会增加能量
  3. 发射炮弹需要消耗能量,可以指定消耗能量的多少,对敌人造成的伤害也相应变化
  4. 碰撞到敌人和墙壁时都会扣能量

所以我们要做的就是:尽可能避开子弹尽可能避免撞墙和撞上别人尽可能击中敌人(打不中不如不打)、活到最后。这和当下热门的吃鸡游戏(绝地求生)的套路就是一致的嘛。

可是,Robocode 使用的语言是 Java,这是 IBM 当年所大力推广的。如果你想尝试,但不懂 JAVA 就尴尬了。好在有人做了个 Python 移植版本:Python-Robocode

项目地址:
https://github.com/turkishviking/Python-Robocode/wiki/Bot-Example

不过呢,这个项目有点年久失修了,用的还是 python2 PyQt4,在很多比较新的系统上运行会有一些小 bug,比如菜单栏点不出来、不能调参数之类。不要抱太高要求,还是可以玩玩的,我也就玩了一百多局而已。

具体方式:

  1. 下载项目代码
  2. 确保你电脑的环境已安装 python2、PyQt4,你可以创建一个虚拟环境来做这事(参考:Crossin:为什么你的python版本一团糟?因为少了这个操作)
  3. 命令行运行 python main.py 启动项目
  4. 点击菜单栏上面的 Battle - New 添加坦克,你自己写的坦克也是从这里添加
  5. 之后如果不改变游戏设置,直接点击 Start Last Battle 即可
  6. 坦克策略文件在 Robots 文件夹下,你可以仿照已有例子增加一个

这里我再给一个更简单的策略示例:

from robot import Robot
import random
# 坦克类
class World(Robot):# 初始化def init(self):self.lockRadar("gun")# 游戏循环def run(self):self.gunTurn(90)self.turn(random.randint(-45, 45))self.move(random.randint(-100, 100))# 发现敌人事件def onTargetSpotted(self, botId, botName, botPos):self.fire(1)self.gunTurn(10)

这里我定义了一个名叫 World 的坦克类,继承框架提供的 Robot 类。在初始化里,把雷达和炮台角度绑定,这样只要发现敌人就可以开炮了。run是主体策略部分,会一直循环执行,这里我让它同时做三件事:炮台旋转90度、车身旋转随机角度、车身前进/后退随机距离。而当发现敌人后,就开炮,并将炮台移动10度(避免死锁)。

就这几行代码,保存到 hello.py里,从菜单栏添加到游戏中,已经可以让你的坦克上场 PK(当炮灰)了。接下来,你可以在此基础上继续扩展它,实现你自己的策略。

我还写了一个稍微复杂一点点的版本,对付这几个示例策略还是可以一战的。


代码在此:
https://gitee.com/crossin/snippet/tree/master/tank
或者在公号(Crossin的编程教室)里回复关键字“坦克”获取。

你可以下载到你的目录中,这样就可以和我隔空对战了。欢迎大家把自己的策略发上来。

除了这个 Python 版本的 Robocode 之外,腾讯也做过一个很类似的 HTML5 版本,叫 CodeTank(鹅厂当年还不太习惯收购)。虽说 idea 不新鲜,但有个很大优势是可以在线使用,不用下载搭建环境了,而且你可以看到其他开发者提交的代码。对于了解一些 JS 的学习者来说,这非常方便。关于 JS 我们暂时不展开说了。但即使你不太会 JS,也可以复制一些别人的代码,尝试改点参数,这个并不复杂。


在 CodeTank 里,你也可以挑战我,从 坦克库 - 坦克对战 里搜 crossin 就能找到了。


希望大家寓教于乐,玩得开心~

════

其他文章及回答:

如何自学Python | 新手引导 | 精选Python问答 | Python单词表 | 人工智能 | 爬虫 | 我用Python | requests | 计算机视觉 | 字符播放器 | 一图学Python

欢迎搜索及关注公众号:Crossin的编程教室

代码吃鸡:Python-Robocode相关推荐

  1. 吃鸡 python开发_python实现《吃鸡大法》加文字识别 玩转百万英雄!

    <百万英雄>比较火.最近我也在玩,把高中的知识都还给教员了.10秒的答题时辰让人根柢来不及去百度搜索.于是我建造了这个剧本,对问题问题停止文字识别,主动翻开网页停止搜索.首先来看一下测试成 ...

  2. 吃鸡 python开发_python青少年编程第三季——14、吃鸡联盟之亚瑟开枪(上)

    各位小伙伴大家好: 本期开始我们一起来做一个小项目,总结一下我们学习过的有关面向对象编程的知识.目标是实现一个另类版的简易吃鸡游戏,让亚瑟开枪射击小兵. 在为程序写代码之前,我们需要先分析这个程序大概 ...

  3. 教你用Python解锁“吃鸡”的正确姿势!(附240行代码)

    来源:经济人学数据分析 本文约2554字,建议阅读6分钟. 本文用Python分析吃鸡比赛的真实数据,解答至关重要的9个问题,助你提高吃鸡概率. 大吉大利,今晚吃鸡~ 今天跟朋友玩了几把吃鸡,经历了各 ...

  4. 吃鸡最强攻略!内附170行Python代码!

    喜欢的妹子玩吃鸡经历了落地3分钟就被毙.跑不过毒倒在半路上失血致死.站在草丛中被不明方向的子弹狙击而亡怎么办? 还能怎么办--当然要用毕生所学解救她! 第1则到底跳哪里最安全 跳哪里一直都是个比较纠结 ...

  5. 年赚百万游戏主播,玩转Python后:几行代码轻松“吃鸡” 附源码

    大吉大利,准备吃鸡! 你是否玩儿了好几个月的吃鸡,依旧是落地成盒? 是否常常不得知自己如何被打.莫名其妙的挂了? 还没有吃过鸡/(ㄒoㄒ)/~~总是不明不白的就被别的玩家杀了 !!!∑(゚Д゚ノ)ノ能 ...

  6. 年赚百万游戏主播!玩转Python后:几行代码轻松“吃鸡” 附源码

    大吉大利,准备吃鸡! 你是否玩儿了好几个月的吃鸡,依旧是落地成盒? 是否常常不得知自己如何被打.莫名其妙的挂了? 还没有吃过鸡/(ㄒoㄒ)/~~总是不明不白的就被别的玩家杀了 !!!∑(゚Д゚ノ)ノ能 ...

  7. 基于Python的绝地求生数据分析吃鸡攻略可视化(包含报告、答辩PPT以及代码打包)

    1 选题背景及需求简介 为了让 PUBG 玩家体会到通关的快乐,需要尽可能准确地推测出吃鸡概 率与多种因素的关系.基于 python 的绝地求生吃鸡攻略可视化就是由此设计 开发的,通过输入不同条件,可 ...

  8. 惊!女朋友用Python写出几行代码就监控了我的电脑,吃鸡被发现了

    今天带给大家一个非常有意思的 python 程序,基于 itchat 实现微信控制电脑.你可以通过在微信发送命令,来拍摄当前电脑的使用者,然后图片会发送到你的微信上.甚至你可以发送命令来远程关闭电脑. ...

  9. 用Python解锁“吃鸡”正确姿势

    大吉大利,今晚吃鸡~ 今天跟朋友玩了几把吃鸡,经历了各种死法,还被嘲笑说论女生吃鸡的100种死法,比如被拳头抡死.跳伞落到房顶边缘摔死 .把吃鸡玩成飞车被车技秀死.被队友用燃烧瓶烧死的.这种游戏对我来 ...

  10. 用Python分析了1w场吃鸡数据,原来吃鸡要这么玩!

    微信改版,加星标不迷路! 用Python分析如何才能高效吃鸡? 作者:阿广 概述 前言 获取数据 观察数据 数据处理 吃鸡到底和哪个数据相关性最强? 分析热度图 期望研究的问题 结论 阿广说 推荐阅读 ...

最新文章

  1. python 使用pymssql连接sql server数据库
  2. 文件fluent_胡言4种Fluent二次开发姿势
  3. 训练 AI 学会通过复制来构建 AI 系统
  4. 【转】语音、音频的思考
  5. Nginx-Nginx配置文件详细说明
  6. G6 图可视化引擎——入门教程——绘制 Tutorial 案例
  7. c#解决在数据表格中无法显示秒数问题
  8. python与golang_Golang与python线程详解及简单实例
  9. 无线网络虚拟服务器,无线虚拟局域网
  10. 基于JBox2d物理引擎和canvas的游戏开发实例
  11. 列表推导式 python原理_python之列表推导式
  12. 计算机软件的英文简称,计算机常见英文缩写.docx
  13. 深度学习常用数据集汇总
  14. wps纸张大小设置成A4_word2010页面设置:手把手教你添加页眉、页脚、页码、边框和底纹...
  15. 用PS来制作背景透明的图片
  16. uboot研读笔记 | 13 - uboot编译构建Makefile分析研读(2016.03版本)
  17. c++代码批量修改图片名称(重命名)实例及运行结果
  18. 一台计算机有多少公顷,亩换算成公顷(公顷换算成亩的计算器)
  19. nodejs安装和环境配置-Windows
  20. c语言在面向过程有啥特点,C语言是什么

热门文章

  1. centos7 虚拟机系统磁盘扩容
  2. 极域电子教室创建和登录教师端的方法
  3. 十年存储路,宏杉科技再创新“高”
  4. VS2015 VisualSVN的 破解方法
  5. 【机器学习】K-means算法Python实现教程
  6. java编程基础 | 练习题
  7. 2020年华为杯中国研究生数学建模出结果时间
  8. 机房布线技术设计与施工
  9. 导航远峰e路航v700pro刷机包
  10. python汉化包放哪_python环境搭建和pycharm的安装配置及汉化(零基础小白版)