最近看到一个颇有“将来感”的新闻:
一辆特斯拉在拉斯维加斯出了车祸,撞“死”了一个……emmmm……机器人。不知道是意外仍是炒做,又或者是这位机器人故意碰瓷,反正人们也没法从受害者口中了解“被特斯拉撞是怎样一种体验”了。python
随着“人工智能”的应用场景愈来愈多,此类新闻之后可能也会愈来愈频繁。希望这些机器人们能严格遵照阿西莫夫三定律:git
在早些年,人工智能这个概念尚未这么火的时候,提到 AI 常常是指游戏中电脑角色的运行策略。好比枪战游戏、即时战略游戏、MOBA 类游戏中的电脑方,对于寻路、攻击、躲避等行为的判断和执行。早期的一些 AI 有点傻,真的能够称得上“人工智障”。好比玩过星际争霸的玩家必定知道“勾农民”的战术:你只要攻击一下电脑方的基地,它的全部农民就会放下手中工做来追着你。程序员
然而正由于如此,产生了一种程序员之间特有的较量:编程游戏。全部人针对某一个游戏规则编写策略,看谁的策略表现得更好,能战胜其余人,最终取得胜利。像星际争霸、CS之类的经典游戏都有过相似的比赛。优秀的代码甚至能够挑战人类,好比这两年为人所熟知的 AlphaGo,就是此类的极致。而对于编程新手来讲,编程游戏也是练习代码的极好方式。github
在众多可编程的游戏中,有个比较知名的项目:Robocode。它是 IBM 在 2001 年发布的坦克机器人战斗仿真引擎,并在数年后开源。简单来讲,它就是一个“坦克大战”的游戏,你能够控制一辆坦克,和别人对战。然而与通常游戏所不一样的是:你不是经过键盘鼠标控制坦克,而是须要本身写一段代码,制定坦克的策略,在游戏开始后自动对战。编程
坦克由三部分组成:框架
在代码中,你能够经过接口获取如下数据:dom
以及控制坦克的:ide
一些基本规则:学习
因此咱们要作的就是:尽量避开子弹、尽量避免撞墙和撞上别人、尽量击中敌人(打不中不如不打)、活到最后。这和当下热门的吃鸡游戏(绝地求生)的套路就是一致的嘛。人工智能
但是,Robocode 使用的语言是 Java,这是 IBM 当年所大力推广的。若是你想尝试,但不懂 JAVA 就尴尬了。好在有人作了个 Python 移植版本:Python-Robocode。
项目地址:
https://github.com/turkishviking/Python-Robocode/wiki/Bot-Example
不过呢,这个项目有点年久失修了,用的仍是 python2 + PyQt4,在不少比较新的系统上运行会有一些小 bug,好比菜单栏点不出来、不能调参数之类。不要抱过高要求,仍是能够玩玩的,我也就玩了一百多局而已。
具体方式:
python main.py
启动项目这里我再给一个更简单的策略示例:
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的编程教室