游戏智能系列之二:再次进行准备

上次准备用 AIsteroids 和 0.A.D 平台去学习游戏中的人工智能,现在换成 Clashjs。 AIsteroids 和 0.A.D 作模拟平台碰到了一个严重问题:1)AIsteroids 平台太简单了,只要让飞机不停右转同时发射子弹,就能很大概率赢得胜利;0.A.D 则太复杂了,复杂的即时策略游戏 AI 不适合初学者学习,陷入特定游戏的细节也不符合我们学习的本意。

学习会有反复和曲折,我们需要拥抱变化。因此,我在网上搜寻,找到了一个新平台来实践我们学习的知识。

1. Clashjs 游戏

Clashjs 是我在 GitHub 上找到开源项目。从下图可以看出来,Clashjs 也是一个飞机对战游戏。

Clashjs 比 AIsteroids 复杂。在 Clashjs 游戏中,有多台飞机参与战斗,最后只有一家获胜。并且参与战斗的飞机必须先吃到红色的镭射包,才能发射镭射打击敌人。这两点让 AI 设计者需要考虑更精细的策略才能取胜。

2. Clashjs 游戏简明教程

对一款模拟平台,我们要做的第一件事就是把它启动起来。启动 Clashjs 很简单。

1)安装 node 和 npm;
2) 把 Clashjs 项目从 Github 上克隆下来;
3) 进入 Clashjs 项目运行 npm install && npm run dev;
4) 在浏览器地址栏输入 http://127.0.0.1:8080 

项目地址。值得注意的是,如果您不是在本地运行 Clashjs,在您输入 npm install && npm run dev 之前,您需要 package.json 中的 “webpack-dev-server –progress –profile –colors –hot” 语句中加入 “–host 0.0.0.0” 从而允许通过 IP 访问。如果您对 Docker 了解,也可以下载我做的镜像 /lietal/game_ai,配置好的 clashjs 放在主目录下。

模拟平台运行起来之后,我们要做的第二件事就是加入自己的 Bot。您可以在

clash_home/src/Players.js 引入,重新运行 npm run dev。这样就把自己的 Bot 加入模拟平台啦,是不是很方便。

当然了编写 Bot 的时候,我们需要遵守一定的规范。Bot 写出了如下所示,其中最关键的就是 ai 函数。这个 ai 函数输入玩家信息、敌人信息和游戏信息,输出要采取的动作。

{
  info: {
    name: 'javierbyte',
    style: 2 // one of the 6 styles (0 to 5)
  },
  ai: function(playerState, enemiesStates, gameEnvironment) {
    // think...
    return 'move';//
  }
}

玩家信息都用 PlayerState 表示,敌人信息则用 PlayerState 的数组表示。游戏信息则用 GameEnvironment 表示。

PlayerState:
{
  position: `[<number>, <number>]`,
  direction: `<string>`, // One of 'north', 'east', 'south' or 'west'
  ammo: `<number>`,
  isAlive: `<bool>`
}

GameEnvironment:
{
  gridSize: [<number>, <number>],
  ammoPosition: <array of [<number>, <number>] arrays>
}

输出的动作一共有 6 个。其中四个是 north、east、south 和 west,表示转向的方向。另两个则是 shoot 表示射击和 move 表示前景。

3. 总结

游戏智能系列文章会以 Clashjs 为平台介绍游戏智能算法,比如有限状态机和行为树。之前选用的两个游戏平台 AIsteroids 和 0.A.D,一个太简单一个太复杂,重新选择 Clashjs 作为模拟平台。学习过程出现了曲折和反复,只能拥抱变化~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

从“小白”到“白帽子黑客”的实用指南

早先,我也是半个黑客,经常在学校的教务系统看妹子。通过 URL 注入的方式,可以轻松进入别人的个人信息页。后来,又通过某种方式发现了管理员的账号,管理员又没有修...

14230
来自专栏人人都是极客

物联网通信协议介绍

为了方便,将物联网通信协议分为两大类,一类是接入协议,一类是通讯协议。接入协议一般负责子网内设备间的组网及通信;通讯协议主要是运行在传统互联网TCP/IP协议之...

45160
来自专栏福利活动清单

腾讯云学生优惠

腾讯云学生优惠相对于阿里云的槽点在于价格贵了6元一年,而且只能学生认证才能够购买。但是!但是腾讯云学生机可以选择搭配学生优惠的云数据库体验套餐,最低3元一月,还...

20.2K140
来自专栏Java帮帮-微信公众号-技术文章全总结

2016年Java和JavaScript编程方面的趋势

最新版JavaScript的变化 2015年6月,JavaScript/ECMAScript 6(即ECMAScript 2015或ES6)发布。根据之前的预测...

38290
来自专栏Kirito的技术分享

以Dubbo为例,聊聊如何为开源项目做贡献

Github 上有众多优秀的开源项目,大多数 IT 从业者将其当做了予取予求的工具库,遇到什么需求,先去 Github 搜一把,但有没有想过有一天自己也可以给开...

14730
来自专栏Youngxj

EMLOG教程-玩转EMLOG系统2018最新教程-在线高清观看

17840
来自专栏北京马哥教育

你应该丢弃Windows,选择Linux的五大理由

自Linux这款开源操作系统发布以来,它就处于上升通道,这些年来已得到了改进和完善,以至于如今一个典型的发行版现在都是高度完善、功能全面的程序包,包括用户需要的...

40780
来自专栏云计算D1net

将数据迁移到云:回到未来?

数百家公司现在已经证明,单一数据泄露可能会造成长期的经济,法律和品牌上的损失。除了数据保护之外,仅仅管理云中的数据是不同的,如果做法不当,成本,复杂性和风险会使...

14300
来自专栏数据和云

2016年度中国Oracle数据库使用现状分析报告

Oracle数据库从20世纪末就已开始在国内使用,在经历了20多年的迅猛发展后,目前已经占据了全球数据库的首位,在国内拥有数十万的技术粉丝与数万家企业用户,但到...

40890
来自专栏云计算D1net

你为什么需要在云端构建Linux服务器?

云端Linux服务器比以往来得成本更低、性能更好。 要是你之前还没有启动过云端Linux服务器,眼下也许正是大好时机。原因何在因为你在短短几分钟内就能安装好一台...

65370

扫码关注云+社区

领取腾讯云代金券