RoboCom.docx
- 文档编号:30178185
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:14
- 大小:21.59KB
RoboCom.docx
《RoboCom.docx》由会员分享,可在线阅读,更多相关《RoboCom.docx(14页珍藏版)》请在冰豆网上搜索。
RoboCom
RobCom机器人编程
一、基本概念
1、机器人:
一个机器人最多拥有50个代码段(或程序段),机器人执行任务的时候,总是对它面对的方向(三角尖指向)执行任务。
机器人属性有移动性、活动性(处于不活动时不能执行代码)。
2、星球:
一个供机器人战斗的正方形场地,特点是:
机器人从场地一边离开,就会从另一端出现。
3、机器人种类:
●母机器人:
第一个投放到星球上的机器人,它不能移动,主要任务是制造新的机器人。
●普通机器人:
可以移动,不能攻击和制造其它机器人,但制造时花费时间最短。
●战斗机器人:
由母机器人和高级机器人制造的机器人,不能制造新的机器人。
可以移动,攻击其它机器人。
●高级机器人:
既可以制造新机器人,又可以攻击其它机器人。
但制造高级机器人所花费的时间比制造普通机器人和战斗机器人的长。
二、一个简单机器人控制程序的示例
PublishedNameMyRobot1.0;机器人的名字(模拟时可供选择,必需)
PublishedAuthorTeacher;作者
PublishedCountryChina;国家
PublishedLanguageRc300;所用编程语言(这是目前最新版本)
(后三行可以省去)
BankMain;程序段名称
@Loop;标号
Turn0;向左转90度
Create1,1,1;制造一个新机器人
Jump@Loop;跳转到标号@Loop
说明:
这个母机器人在不断地制造新机器人。
三、机器人的基本行为
1、制造新的机器人
制造命令:
Createa,b,c
Create命令有三个参数。
其中a代表制造的新机器人的类别。
0表示普通机器人,1表示战斗机器人,2是高级机器人。
b代表新机器人的代码段数,c表示机器人可以移动可否,1表示可以移动,0表示不可以移动。
说明:
制造会移动的机器人的时间要比不会动的长,制造级别高的机器人比级别低的花费的时间更长。
代码段越多,可以移动则需要的制造时间越多。
例如:
Create2,5,1
制造一个可以移动的高级机器人,它有5个代码段。
2、移动与转向
移动命令:
Move
无参数,机器人向前方移动一格。
转向命令:
Turna
a表示转动方向,0左转90度,1右转90度。
3、扫描命令Scan#a
#a=0空格#a=1敌人#a=2己方
这里#a代表一个变量。
Robocom中的变量都是由#开头,用数字命名。
从#1到#20一共有20个。
(每个机器人)
例如:
Scan#1;扫描前方格子
Comp#1,1;是否为敌人
4、代码传递指令Transa,b
把自己编号为a的代码段,填入敌方的编号为b的代码段中。
例如:
Trans2,1;将自己的第2段代码段,复制到其他机器人(己方或敌方)的第1代码段中。
5、自毁指令Die
当执行到Die命令时,自己销毁。
用于传递给敌方,摧毁敌人。
6、杀死敌方的方法
(1)用die覆盖别人的代码段
但若用了跳段执行,可以躲过攻击。
(2)用空指令覆盖别人的代码段
并重启,必定杀死别人,但速度相对较慢。
四、程序控制及变量、常量
1、程序控制命令
Jumpa
相对跳转命令。
a为跳转值或标号。
例如:
jump@loop
jump-3
Bjumpa,b
绝对跳转命令。
跳到a代码段的第b条语句执行。
例:
bjump2,1
Compa,b
比较命令。
比较a和b的值,若a≠b,执行下一语句,否则执行再下一条语句。
例:
scan#2
comp#2,1
jump@friend
trans2,1
2、运算命令
Add#a,b
相加命令。
将b加到#a变量中。
Sub#a,b
相减命令。
从#a变量中减去b。
Set#a,b
赋值命令。
将b赋值给#a变量。
例:
set#1,5
add#1,3
set#2,8
sub#2,4
例如:
Set#1,5;#1变量值为5
Add#1,3;#1:
=#1+3也就是8
Scan#2;扫描前方格子
Comp#2,1;是否为敌人
Jump@Friend;不是敌人,跳转到另外标号为@Friend的语句
Trans2,1;是敌人,把自己的第二段代码传递给别人
3、几种参数
#变量
$常量
%前方机器人的变量
#1..#20
机器人自己变量
#Active,%Active
机器人活动状态,0表示不活动,其它为活动。
唯一可被其它机器人更改
$Banks,%Banks
自己或对方机器人拥有的代码段数
$InstrSet,%InstrSet
机器人级别
$Mobile,%Mobile
机器人可否移动
$Fields
场地大小
例如:
Move
Set%Active,0;把前方机器人停止活动
Scan#2;把前方的人的代表的值赋给#2
Comp#2,0;空格子吗?
Jump@Examine;不是,那我们继续检查
……
@Examine
Comp#2,1;敌人吗
Set%Active,1;不是,那肯定是己方的了,
五、策略介绍
●尽可能制造更多的机器人。
●尽可能杀死敌人保护自己。
1、总的来说,策略就是保护自己杀死别人,
推荐PeSTiCiDe!
和Persuader3这两个机器人。
比较初级,初次编制的机器人可以与他们比试比试。
2、重写所有代码段
必杀,速度慢
Set%Active,0;停止对方机器人
Set#1,%Banks;获得敌方有多少代码段
@Overwrite
Trans2,#1;用空代码段重写别人的代码段
Sub#1,1;把#1减1
Comp#1,0;比较#1,是否为0
Jump@Overwrite;不是,跳到@Overwrite,继续重写
Set%Active,1;激活对方机器人
3、快速制造
BankShielder
Ncomp%Banks,0;前方有人吗?
Create2,1,0;没人,制造
Trans1,1;否则,重写他第一段代码
Set%Active,1;激活
Turn0;左转
4、“清道夫”大量制造,迅速杀死对方,但弱点是繁殖较弱。
NameCopyBot
BankInitialCopyBot
scan#1;前方是谁?
comp#1,1;敌人?
jump@klon;不是,跳@klon
set#2,%banks;是,获得它的代码段数
set%active,0;让它停止工作
@loop
trans2,#2;\
sub#2,1;\用自毁命令
comp#2,-1;/复制所有代码段
jump@loop;/
set%active,1;激活敌人,让它自毁
@klon
comp#1,2;是己方吗?
create2,2,0;不是,制造新机器人
trans1,1;传送代码
set%active,1;激活它
turn0;左转
;自动重启
BankHarakiri
Die
5、十字架StarDemo
在“十字”结构中,母机器人总是在四个方向分别制造机器人,这些机器人又继续在自己的方向上制造新的机器人,最后看起来就是一个大的“十字”。
这种结构的机器人队伍有坚实的基础,不容易被敌人攻破,加上其他的攻击和防护手段,这是一个很强大的策略。
PublishedNameStarDemo
BankMain
Create2,2,0;制造2个代码段的机器人,用于制造更多的机器人。
Trans2,1;将代码段2复制给新机器人
Set%Active,1;激活新机器人
Trans3,2;将代码段3复制给新机器人
Turn1;右转
;自动重启
BankBuilder
Create2,2,0;\
Trans1,1;\
Set%Active,1;/克拢一个
Trans2,2;/
Turn1;右转
@Builder.Loop;\
Create1,2,1;\
Trans2,1;>尽可能多制造
Set%Active,1;/
Jump@Builder.Loop;/
BankRunner
@Runner.Start
Scan#1;前方是谁?
Comp#1,1;是敌方?
Jump@Runner.NoOpponent;不,转@Runner.NoOpponent
Set%Active,0;是,使它停止活动
Set#2,%Banks;\
;\
@Runner.Overwrite;\
Trans2,#2;>清敌方所有代码段
Sub#2,1;/
Comp#2,-1;/
Jump@Runner.Overwrite;/
Set%Active,1;激活敌方
Jump@Runner.Start;返回@Runner.Start
@Runner.NoOpponent
Comp#1,0;前方为空吗?
Turn0;不,左转
Move;前移
;自动重启
6、定时炸弹
有时候,希望过了一段时间后,你的机器人任务已完成,或被你感染的机器人工作一段时间,你希望清除它们,那么就可以设置一个“定时炸弹”。
用die传染对方,你我同归于尽。
但由于你一命抵十命,人数占了优势,就胜利了。
BankTimeBomb
@start
Trans1,1;传播病毒
Add#13,1;递增一个变量
Turn1;感染下一个
Comp#13,20;到20了吗?
Jump@start
Die;到了20,Bomb
7、快速超级感染
用超强的病毒弄死别人,但弱点是病毒还没有大面积扩散,你就完了。
8、Cross
横竖把别人切成烂泥,防护以及繁殖能力差的全都死光。
9、最重要的策略
(1)永远不要放弃。
(2)不要指望以上的策略,发明自己的策略。
(3)观察别人的代码,以及多与相同水平的程序对打。
在文件夹下有许多值得我们学习的代码。
(4)多参加网上竞赛,希望能在Gold组遇到你们。
(5)借鉴别人的程序,但杜绝抄袭。
附加策略:
(1)无敌繁殖
快速繁殖的改进,繁殖会动的,再往前走一步,假设单位时间内,快速繁殖了N个,无敌繁殖会繁殖N*lgN个。
弱点是防御的能力低了。
(2)超级繁殖
快速繁殖的改进,也是繁殖不会动的,但是只是来回的转,这个改进后,攻击能力提高一倍,防御能力变得不稳定。
六、指令时间计算
1、机器人级别与指令范围:
普通机器人(0):
add、comp、die、move、set、sub、turn
战斗机器人
(1):
增加scan、trans
高级机器人
(2):
再增加create
2、一般指令时间周期:
add6
sub6
set5
comp3
die1
move18
turn5
3、高级指令时钟周期的计算:
scan6
tran基本周期为6
代码段中每一条指令增加3
create1、2参数基本周期为50
每增加一个代码段,周期加20
机器人可移动,周期数乘2
机器人级别为1周期加40,机器人级别为2周期加80
例:
create2,3,180+(50+20*3+50)*2=340
指令
RoboCom3指令集分为三部分:
基本指令、扩展指令和多任务指令。
指令表中包括指令语法和说明。
基本指令(12条)
指令
种类
周期
说明
ADD#a,b
0
6
将b加到#a变量中去。
BJUMPa,b
0
5
绝对跳转命令。
跳到编号为a的代码段的第b语句执行。
COMPa,b
0
3
比较a和b的值,如果a不等于b,那么执行下一句,否则跳到再下一句执行。
CREATEa,b,c
2
制造新机器人。
其中:
a代表机器人种类。
0表示普通机器人,1表示战斗机器人,2表示高级机器人。
b代表机器人的代码段数。
c代表机器人可以移动与否。
1可以移动,0不可以移动。
时钟周期:
基本50。
每个代码段增加20;可移动*2;战斗机器人增加40,高级机器人增加80。
DIE
0
1
摧毁机器人。
JUMPa
0
2
相对跳转命令。
跳到a标号或语句。
MOVE
0
18
朝面向的方向移动一格。
机器人必须是可移动的。
SCAN#a
1
6
扫描前面的一格,将机器人类型保存在变量#a中。
#a=0...空格
#a=1...敌方
#a=2...己方
SET#a,b
0
5
将b赋值给变量#a。
SUB#a,b
0
6
从变量#a中减去b。
TRANSa,b
1
传输命令。
将编号为a的代码段,写入到新机器人的b代码段中。
时钟周期为5,每条指令增加周期3。
TURNa
0
5
转向命令,每次90度。
a=0...左转
a≠0...右转
扩展指令(13条)
指令
说明
AJUMPa
当前代码段绝对跳转命令。
DIV#a,b
将变量#a除以b的商赋给#a。
FARSCAN#a,#b,c
扫描前面的c格,将机器人类型保存在变量#a中,距离保存在变量#b中。
#a=0...空
#a=1...敌方
#a=2...己方
LCOMPa,b
若a≤b,跳过下一条语句。
GCOMPa,b
若a≥b,跳过下一条语句。
MAX#a,b
将#a和b中的较大数赋给#a。
MIN#a,b
将#a和b中的较小数赋给#a。
MOD#a,b
将#a除以b的余数赋给#a。
MUL#a,b
将变量#a乘以b的积赋给#a。
NCOMPa,b
若a≠b,跳过下一条语句。
RANDOM#a,b,c
生成随机数给#a,满足b≤#a≤b+c。
RTRANSa,b
反向传输命令。
将远程编号为a的代码段,写入到b代码段中。
SLEEPa
暂停执行当前机器人的a任务。
多任务指令(6条)
指令
说明
BREAK
完全停止其它任务的执行,给当前任务100%的优先权。
INITa,b
在a编码段的b语句处初始化另一任务。
RESUME
恢复被查封命令SEIZE暂停的其它任务。
SEIZE
暂停其它任务的执行,给当前任务100%的优先权,直止执行恢复命令RESUME。
SLEEPa
暂停当前任务a个周期给其它任务100%的优先权。
注:
这是惟一的用真实周期的指令,不管有多少任务在运行。
QUIT
完全停止当前任务,若无任务,则机器人死亡。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RoboCom
