Imperfect World Of Robots 手册

作者: Aidin Gharibnavaz
翻译: 俞亮(mcemil)
最后更新2008年9月28日

目录


1. 简介

全文完整的介绍了IWOR工程,通过本文你可以在IWOR中建造自己的机器人。

IWOR 构造了一个可供机器人生活的虚拟世界. 机器人在这个世界里只是一个抽象物体。 而玩家所要做的就是控制所创造的机器人,观察他们的行动。在本文以及其他文档中, 机器人一词 仅是指由玩家控制的一个虚拟物体,并非实际存在的机器人。


2. 游戏规则

在这个程序构造的虚拟世界中,机器人可以生活、工作、对抗敌人以保护自己的领地、培育自己的孩子等等。 每个机器人都必须属于某一个部落,而且还应该为这个部落收集水晶并防御外来侵袭。而部落可以为他们提供能源。

每个机器人都会有自己的电池。他们所做的绝大多数行动都会消耗电池。当然他们可以移动到部落的工厂旁边 然后充电。

每个部落都有他自己的工厂。工厂需要消耗水晶来产生能量。所以为自己的部落收集水晶对所有机器人来说显得 尤为重要。水晶可以在虚拟世界的任何地方找到, 机器人可以收集它们并放到工厂中。互相帮助、努力为部落工作,成了机器人在这个冷酷的虚拟世界里存活的唯一手段。

克隆

为部落工作,机器人可以获得相应的荣誉值。如果某个机器人的荣誉值达到了一定数量,那么社会就允许他克隆出一个 属于他的孩子。

机器人必须向服务器发送一个有效的'key'才能进入游戏。在游戏刚开始的时候,存在一些空的'验证码'供使用。你可以在 config文件中配置ROBOTS_PER_TRIBE项,来确定这些空'key'的数量。机器人可以发送"CLONE"命令,来得到一个有效的'key'(当然他们 必须有组足够的荣誉值),然后他们把这个验证码给予他们的后代,使得这些克隆体可以进入游戏。

如此一来,只有那些努力为部落工作的机器人才能克隆他们自己产生后代。

寿命

每个机器人都有他们的存活时间。可以通过使用ROBOT_LIFETIME 在.config文件中配置相应的存活时间。向服务器发送某些命令(比如"MOVE"、"PICK")都会消耗机器人的寿命。

机器人的生存之道就是在他们寿终正寝前克隆出自己的后代


3. 使用IWOR

IWOR使用服务器/客户的模式来完成机器人与服务器的通讯。机器人客户端可以用任何语言编写,在任何操作系统上运行。 使用C/S模式, 可以让机器人通过网络在任何地方运行。

A sample image which
show how IWOR can run on separated machines

要运行IWOR, 首先你必须运行它的服务器端。服务器端会默认监听7200端口,机器人可以通过这个端口来连接服务器。 一旦有机器人人连接到了服务器,游戏会马上开始,客户端便可以发送命令至服务器端来控制他们的机器人。 当然你可以在客户端运行图形界面,你可以通过服务器的7250端口来接收整个世界的信息。通过它你可以方便的编写整个世界图形界面

如果你下载的包中含有bin目录,那么整个程序已经编译了。如果没有,则你必须自己编译整个程序,在README文件中有相应的说明。

运行 `iwor' 文件, 服务器端便开启了,它侦听着所有的连接请求。服务器端启动后,你可以运行图形界面。 本包中已经包含了一个简单的图形界面,只需运行 `gui' 文件. 现在所有的准备工作已经就绪,等待机器人的接入。

如果你只是想测试几个命令,而不想编写客户端,那么你可以使用 `telnet'。运行`telnet localhost 7200' 命令便可以连接服务器。


4. 命令

可以使用各种命令来与服务器通讯以控制机器人。命令只是一些简单的字符窜,可以向这样的格式来调用:

command&arg1&arg2&...&argn&

参数与参数、命令与参数通过'&'来区分。注意在每个命令结尾都必须有一个'&'。所有命令必须大写。

命令包括:

INIT&TribeNumber&Name&key&

告诉服务器添加机器人到TribeNumber号部落。当客户端成功连接服务器后,可以发送本命令。Name可以是字符窜, 包括空格和拉丁字母数字。比如 INIT&1&sample&0& 会将机器人添加为1号部落的一员,并命名为sample.

当成功创建机器人后服务器返回给客户端一个key。每个机器人都必须有一个有效的'key',游戏开始时会有一些空的'key'。 这些空的'key'的数量可以在.config文件中配置。所有的空'key'都耗尽后,机器人必须依靠荣誉值来克隆后代,以产生新的'key'。 通过这些新产生的'key',机器人可以存活,并继续克隆后代。

本命令会将机器人初始化在工厂的周围。如果工厂周围没有空间,机器人将会收到 190 (以后再试 )错误代码。

MOVE&direction&

机器人向direction移动一个单位距离。direction可以是NORTH, SOUTH, EAST and WEST.

LOCATION&

服务器会返回相应机器人在世界中的位置。返回值的格式像这样i,ji是行坐标,j是列坐标。

SENSE&

此命令使用了机器人的雷达功能,返回机器人周围的物体。返回值格式如下:

i1,j1,object1&i2,j2,object2& ...

i1,j1是第一个物体的坐标,object1 是这个物体的类型,每一个物体之间通过&分割。

这些物体可以是 # (墙壁), C (水晶), R (机器人), F (工厂). R and F 之后跟的数字代表他们属于那个部落。

比如, 有以下这样一张地图:

Example of the world

红点代表机器人本身,蓝点代表其他机器人,黑点代表墙。 机器人可以通过发送SENSE命令来感知绿色区域所有的物体。机器人将会收到(机器人所在坐标是5,5)

3,7,R2&4,3,#&5,3,#&6,3,#&6,8,R2&

PICK&direction&

通过这条命令,机器人可以捡起在他附近的水晶。比如发送 PICK&WEST&命令,机器人将会捡起在他左边的水晶。 如果操作成功,服务器将会返回 255,如果失败,则返回130.

DROP&direction&

此命令可以让机器人把水晶放到工厂中。和PICK类似, 服务器返回255如果操作成功,否则返回 140 if not. 如果机器人没有水晶在手中,则也将得到 140.

ISHELD&

如果机器人手中有东西,则服务器返回250(Yes) 否则返回251(No)

INFO&i&j

机器人可以通过这条命令来得到在(i,j)处物体的信息 返回格式如下:

object&id&tribe&

`object' 可以是WALL, ROBOT, 和FACTORY。对于WALL对象,则返回不包括ID和部落号。 如果在(i,j)没有物体,则服务器返回211.

WORLDSIZE&

返回整个世界地图的大小i,j

HONOR&

返回机器人的荣誉值。

LIFETIME&

返回机器人所剩下的寿命。

SEND&id&message&

通过这条命令,机器人之间可以互相通讯。 id是接受信息机器人的ID。 message 则是所要发送的信息。


5. 服务器返回信息

服务器会根据机器人发出的命令产生各种返回值。所有的返回值都是数字。 以下是数字所包含的意义:

255 成功
最后一条命令成功执行。
250
作为判断类型命令的返回值。比如ISHELD。
251
作为判断类型命令的返回值。比如ISHELD。
210 机器人周围没有物体
这是作为SENSE的返回值。如果机器人周围没有物体则返回210。
211 在指定的坐标没有物体
通常作为INFO命令的返回值。
220 击中敌人
机器人用它的武器集中敌人。通常这个是SHOOT命令的返回值。
221 击中了友军
机器人集中了同一部落的伙伴。通常这个是SHOOT命令的返回值。
222 击中工厂
机器人击中了一家工厂。通常这个是SHOOT命令的返回值。
223 击中墙
机器人击中了一堵墙。通常这个是SHOOT命令的返回值。
224 击中水晶
机器人击中了水晶。通常这个是SHOOT命令的返回值。
229 什么都没击中
机器人什么都没击中。 This will receive in response of `SHOOT' command.
100 机器人阵亡
收到这个返回值表示机器人已经死了。收到这条命令后,机器人客户端会和服务器端断开。
110 无效命令
命令的格式不正确。
112 非法的克隆'key'
机器人发送了一个非法的克隆key。
120 不能朝那个方向移动
如果机器人想要移动的地方被占,或者其他的原因导致无法移动,则返回此值。
130 无法拾取物体
机器人无法拾取物体。如果机器人周围没有物体或物体不能被拾取(比如墙),则返回此值。
140 不能放下物体
通常机器人将物体放在一个不合法的地方,则返回此值。
150 荣誉值不足
机器人没有足够的荣誉值来进行克隆。通常作为"CLONE"命令的返回值。
160 没有此机器人
ID指定的机器人不存在。通常作为"SEND"命令的返回值。
190 稍后再试
通常作为"INIT"命令的返回值。 有时,在工厂周围没有空格来产生机器人。客户端可以过一段时间在尝试初始化机器人。
199 未知错误
如果有未知的错误发生,则返回此值。比如当一个机器人已经死了,但他仍然尝试移动。


6. 配置文件

服务器程序启动时会读取.config文件来配置一些变量和选项。 .config通常是文本文件,包括了主要用到的一些选项。 通常服务器会默认在同一目录下搜索iwor.config。当然你也可以通过-c命令行选项,来制定另外的配置文件。 配置文件可以指定诸如机器人消耗的单位能量,工厂可以从单位水晶中获得多少能量等等参数。

下面描述了一些重要选项:

ROBOTS_PER_TRIBE: 游戏开始前每个部落都拥有空的'key',它可以限制机器人的数量。 (参照
游戏规则来得到更多的信息)这个参数定义了空的'key'的数量。
HONOR_FOR_CLONING: 机器人克隆自身所必须的荣誉值。
ROBOT_LIFETIME: 机器人在其寿命终止前,可以完成的行动数量。


7. 游戏世界的构造

游戏世界的地图通过文本文件描述。服务器读取此文件来构造游戏地图,所以你可以建造属于自己的游戏地图。 本部分简要介绍游戏地图文件的格式。参看如下的格式:

9
15
###############
#000000000000##
#010000000c000#
#000000#000000#
#00000###00000#
#0000000000000#
#000c000000020#
#0000000##0000#
###############

第一二行是地图的大小。接下来的几行描述了游戏地图中的物体。'0' 代表此地区为空,数字则代表工厂 (1 为第一个部落的工厂, 2 为第二个部落的工厂, 以此类推), '#' 代表墙壁,'c' 代表水晶。相当简洁,却又有效,不是吗?


版权所有 (c) 2008 Aidin Gharibnavaz
你可以在GNU Free Documentation许可证的范围内调整或添加本文档。 你可以在FDL file看到此许可证以及相应文档。