|
|

楼主 |
发表于 2008-6-20 20:07:00
|
显示全部楼层
Re:用脚本来控制自己的游戏怎么样?Afflatus Script Engine 正
实例对比
我以前做的一个RPG游戏的一个测试脚本系统用的地图,脚本语言用的是我以前自制的“蓝宝石”,名字跟了Matz的“红宝石”,呵呵,但是这个系统很糟糕,虽然实现了远离硬编码,灵活控制游戏,但是语法很难记,复杂,开发效率低。
"蓝宝石"脚本语言:
25
00
2660143,是@Yes/否@No/,是否开始精灵方向测试?%90Yes%00你将看到一个女孩转动身体%19%20%05Girl04,13,12%06Girl04,True%07Girl04,U%021%07Girl04,L%021%07Girl04,D%021%07Girl04,R%021%07Girl04,U%021%06Girl04,False%05Girl04,-1,-1%19%20%90No%
2670143,是@Yes/否@No/,是否开始精灵走动测试?%90Yes%00你将看到一个女孩走动%19%20%05Girl04,13,11%06Girl04,True%07Girl04,D%08Girl04,2%07Girl04,R%08Girl04,2%07Girl04,U%08Girl04,2%07Girl04,L%08Girl04,5%07Girl04,D%08Girl04,2%07Girl04,R%08Girl04,2%07Girl04,U%08Girl04,2%07Girl04,R%08Girl04,1%06Girl04,False%05Girl04,-1,-1%19%20%90No%
2680143,是@Yes/否@No/,是否开始多精灵走动测试?%90Yes%00你将看到一个女孩和一个男孩走动%19%20%05Girl04,10,11%05Boy01,13,11%06Girl04,True%06Boy01,True%07Girl04,D%07Boy01,D%29Girl04/Boy01/,2%07Girl04,R%07Boy01,R%29Girl04/Boy01/,2%07Girl04,U%07Boy01,U%29Girl04/Boy01/,2%07Girl04,L%07Boy01,L%29Girl04/Boy01/,2%06Girl04,False%06Boy01,False%05Girl04,-1,-1%05Boy01,-1,-1%19%20%90No%
2690143,是@Yes/否@No/,是否开始精灵Tip测试?%90Yes%00你将看到自己头上的感叹号%09Lead%19%20%00你将看到一个女孩头上的感叹号%19%20%05Girl04,12,11%06Girl04,True%07Girl04,D%09Girl04%06Girl04,False%05Girl04,-1,-1%19%20%90No%
2700144,开始@Yes/停止@No/,是否开始精灵顺序脚本测试1?%90Yes%00你将看到一个胖男孩绕着这里走动%19%20%05FatBoy01,10,10%06FatBoy01,True%28FatBoy01,True%07Girl04,D%15Exit%90No%05FatBoy01,0,0%06FatBoy01,False%28FatBoy01,False%07Girl04,U%90Exit%19%20%
2710144,开始@Yes/停止@No/,是否开始精灵顺序脚本测试2?%90Yes%00你将看到一个博士在这里随意走动%19%20%05DrOak,13,12%06DrOak,True%28DrOak,True%15Exit%90No%05DrOak,0,0%06DrOak,False%28DrOak,False%90Exit%19%20%
2720148,变成女孩@Girl/变成男孩@Boy/结束@Exit/,是否开始变身测试?%90Girl%00你将变成一个女孩%10Kyouko%15Exit%90Boy%00你将变成一个男孩%10Rebooto%90Exit%19%20%
400000这里是精灵展示区#欢迎测试#只需调查告示牌#就可以看到结果%19%20%
522090Start%144,开始@Yes/恢复@No/退出@Exit/,是否开始Tile变化测试1?%90Yes%00你将看到怪兽球变成石头%19%20%33588,1,Stone%15Exit%90No%00你将看到石头变回怪兽球%19%20%34588,1%90Exit%19%20%
523090Start%144,开始@Yes/恢复@No/退出@Exit/,是否开始Tile变化测试2?%90Yes%00你将看到怪兽球上面有树叶%19%20%33588,2,Tree%15Exit%90No%00你将看到怪兽球上面的树叶消失%19%20%34588,2%90Exit%19%20%
524090Start%144,开始@Yes/恢复@No/退出@Exit/,是否开始碰撞变化测试?%90Yes%00怪兽球将可以通过%19%20%37588,0%15Exit%90No%00怪兽球将不可通过%19%20%37588,1%90Exit%
5250143,是@Yes/否@No/,是否开始动画测试?%90Yes%00你将看到怪兽球的Tile播放开门动画%19%20%38588,1,OpenDoor01,4,0.05%90No%
526000这里是Tile展示区#欢迎测试#只需调查告示牌#就可以看到结果%19%20%
5300143,是@Yes/否@No/,是否开始图片输出测试?%90Yes%00你将看到一张图片#按调查键这张图片才会消失%19%20%18001,0%19%20%00你将看到一张图片#这张图片保留到下一个对话框%19%20%18001,-1%00看到了吗?#这张图片保留到这个对话框#作为了这次对话的背景%00你将看到一张图片#这张图片保留3秒钟%19%20%18001,3%90No%
531021a%143,是@Yes/否@No/,是否开始变量测试?%90Yes%25a,请输入一个字符串,默认字符串%19%20%00你输入的是'a'%25a,请输入一个表达式,(2+3)*2/5%19%20%24a,'a',Number%00计算的结果是'a'%19%20%90No%
534000这里是常规展示区#欢迎测试#只需调查告示牌#就可以看到结果%19%20%
1001000你好#我就是胖男孩#这次测试的临时登场人物%19%20%
1002000你好#我是博士#这次测试的临时登场人物#有能力的话请尽快完成这个游戏%19%20%
343000按<空格键>继续#...%00欢迎你的到来%00这是一幅测试地图#用于测试这个游戏的脚本系统%00下面开始测试#你只需要调查每个公告板#按下<空格键>,就像这样%07Lead,D%19%20%
5320143,是@Yes/否@No/,是否开始延迟特性测试?%90Yes%00请和我一起读秒#从1开始数到5#每秒钟数一下#开始%001,1%002,1%003,1%004,1%005,1%00数完了%19%20%90No%
5330143,是@Yes/否@No/,是否开始预设变量测试?%90Yes%00你目前的位置是'Lead.Position'你目前的#方向是'Lead.Direction'%00现在的日期是'Date'#现在的时间是'Time'%00现在的日期时间是'Now'%19%20%90No%
472021Item1,Item2%24Item1,菜单项1%24Item2,菜单项2%147,'Item1'@Yes/'Item2'@No/,这是菜单变量引用测试,RU%90Yes%90No%19%
370000打开了电脑!,0%19%20%90OpenMenu%146,存档@10/关闭@20/,做什么?,%9010%144,是@Yes/否@OpenMenu/,是否把当前状态记入存档?,%90Yes%70%00已经将当前状态记入存档。,0%19%20%15OpenMenu%9020%19%20%
310119%20%145,是@Yes/否@No/,您确定要离开#脚本测试地图?%90Yes%01start,1,N,N%90No%07Lead,D%08Lead,1%19%20%
现在这个游戏采用Afflatus开发,人物,地形等映射为对象,可以自由操控,编码行云流水,所想流畅输入代码编辑器,开发效率大大提高。
同一段代码用Afflatus脚本语言编写:
int Answer;
int OriginalIndex;
procedure WelcomeBoard_Lookinto;
messagebox("欢迎来到脚本系统测试地图","这张地图专为测试Afflatus",
"脚本系统而作","这张地图","涉及了控制这个游戏","的各个方面","使用方向键移动",
"在需要测试的项目前","按调查键即可测试该项目","Afflatus是完全免费","和开放源代码的","欢迎您在您的游戏中使用",
"Afflatus作为脚本系统","帮助您更高效地进行","游戏开发工作","有问题请联系我","我的邮件是",
"pokemon1024@hotmail.com","谢谢");
endprocedure;
procedure SpiritTestBoard_Lookinto;
messagebox("这里是精灵控制测试区");
endprocedure;
procedure SpiritTest01_Lookinto;
Answer:=Menu("是否开始精灵方向测试?","是","否");
if(Answer=1);
messagebox("你将看到一个女孩转动身体");
Girl04.Position:=365;
Girl04.Visible:=True;
Girl04.Direction:=Aff_Up;Sleep(1);
Girl04.Direction:=Aff_Left;Sleep(1);
Girl04.Direction:=Aff_Down;Sleep(1);
Girl04.Direction:=Aff_Right;Sleep(1);
Girl04.Direction:=Aff_Up;Sleep(1);
Girl04.Visible:=False;
Girl04.PosX:=-1;
Girl04.PosY:=-1;
endif;
endprocedure;
procedure SpiritTest02_Lookinto;
Answer:=Menu("是否开始精灵走动测试?","是","否");
if(Answer=1);
messagebox("你将看到一个女孩走动");
Girl04.Move(13,11);
Girl04.Visible:=True;
Girl04.Direction:=Aff_Down;Girl04.Step(2);
Girl04.Direction:=Aff_Right;Girl04.Step(2);
Girl04.Direction:=Aff_Up;Girl04.Step(2);
Girl04.Direction:=Aff_Left;Girl04.Step(5);
Girl04.Direction:=Aff_Down;Girl04.Step(2);
Girl04.Direction:=Aff_Right;Girl04.Step(2);
Girl04.Direction:=Aff_Up;Girl04.Step(2);
Girl04.Direction:=Aff_Right;Girl04.Step(1);
Girl04.Visible:=False;
Girl04.Move(-1,-1);
endif;
endprocedure;
procedure SpiritTest03_Lookinto;
Answer:=Menu("是否开始多精灵走动测试?","是","否");
if(Answer=1);
messagebox("你将看到一个男孩和一个女孩走动");
Girl04.Move(10,11);
Boy01.Move(13,11);
Girl04.Visible:=True;
Boy01.Visible:=True;
Girl04.Direction:=Aff_Down;Boy01.Direction:=Aff_Down;
MoveSpirits(2,"Girl04","Boy01");
Girl04.Direction:=Aff_Right;Boy01.Direction:=Aff_Right;
MoveSpirits(2,"Girl04","Boy01");
Girl04.Direction:=Aff_Up;Boy01.Direction:=Aff_Up;
MoveSpirits(2,"Girl04","Boy01");
Girl04.Direction:=Aff_Left;Boy01.Direction:=Aff_Left;
MoveSpirits(2,"Girl04","Boy01");
Girl04.Visible:=False;
Boy01.Visible:=False;
Girl04.Move(-1,-1);
Boy01.Move(-1,-1);
endif;
endprocedure;
procedure SpiritTest04_Lookinto;
Answer:=Menu("是否开始精灵Tip测试?","是","否");
if(Answer=1);
messagebox("你将看到自己头上的感叹号");
Leader.Tip;
messagebox("你将看到一个女孩头上的感叹号");
Girl04.Move(12,11);
Girl04.Direction:=Aff_Down;
Girl04.Visible:=True;
Girl04.Tip;
Girl04.Visible:=False;
Girl04.Move(-1,-1);
endif;
endprocedure;
procedure SpiritTest05_Lookinto;
Answer:=Menu("是否开始精灵顺序脚本测试?","开始","停止");
if(Answer=1);
FatBoy01.Move(10,10);
FatBoy01.Reset;
FatBoy01.Visible:=True;
FatBoy01.Enabled:=True;
else;
FatBoy01.Move(-1,-1);
FatBoy01.Visible:=False;
FatBoy01.Enabled:=False;
endif;
endprocedure;
procedure SpiritTest06_Lookinto;
Answer:=Menu("是否开始精灵随机脚本测试?","开始","停止");
if(Answer=1);
DrOak.Move(13,12);
DrOak.Visible:=True;
DrOak.Enabled:=True;
else;
DrOak.Move(-1,-1);
DrOak.Visible:=False;
DrOak.Enabled:=False;
endif;
endprocedure;
procedure SpiritTest07_Lookinto;
Answer:=Menu("是否开始角色模型变化测试?","变成女孩","变成男孩","结束");
if(Answer=1);
Leader.Model:="Kyouko";
endif;
if(Answer=2);
Leader.Model:="Rebooto";
endif;
endprocedure;
procedure FatBoy01_Lookinto;
messagebox("如果测试结果正确","我应该绕着这里走");
endprocedure;
procedure DrOak_Lookinto;
messagebox("如果测试结果正确","我应该随机走动");
endprocedure;
procedure TileTestBoard_Lookinto;
messagebox("这里是地形控制测试区");
endprocedure;
procedure TileTest01_Lookinto;
Answer:=Menu("是否开始Tile变化测试1?","开始","恢复","结束");
if(Answer=1);
messagebox("你将看到怪兽球变成石头");
OriginalIndex:=Mark01.BG1;
Mark01.BG1:=Stone.Index;
endif;
if(Answer=2);
if(Mark01.BG1<>Stone.Index);
messagebox("已经是怪兽球了");
else;
messagebox("你将看到石头变回怪兽球");
Mark01.BG1:=OriginalIndex;
endif;
endif;
endprocedure;
procedure TileTest02_Lookinto;
Answer:=Menu("是否开始Tile变化测试2?","开始","恢复","结束");
if(Answer=1);
messagebox("你将看到怪兽球旁的盆景");
Mark01.BG2:=Tree01.Index;
Mark02.BG1:=Tree02.Index;
Mark02.Collision:=True;
endif;
if(Answer=2);
if(Mark01.BG2=0);
messagebox("已经清除盆景了");
else;
messagebox("怪兽球上面的盆景将会消失");
Mark01.BG2:=0;
Mark02.BG1:=0;
Mark02.Collision:=False;
endif;
endif;
endprocedure;
procedure TileTest03_Lookinto;
Answer:=Menu("是否开始地形碰撞控制测试?","开始","恢复","结束");
if(Answer=1);
messagebox("怪兽球将可以通过");
Mark01.Collision:=False;
endif;
if(Answer=2);
messagebox("怪兽球将不可以通过");
Mark01.Collision:=True;
endif;
endprocedure;
procedure TileTest04_Lookinto;
Answer:=Menu("是否开始地形动画播放测试?","是","否");
if(Answer=1);
Refresh;
Mark01.PlayAnimation(1,"OpenDoor01");
endif;
endprocedure;
procedure Mark01_Walkon;
messagebox("正站在怪兽球上面");
endprocedure;
procedure GeneralTestBoard_Lookinto;
messagebox("这里是常规项目测试区");
endprocedure;
procedure GeneralTest01_Lookinto;
Answer:=Menu("是否进行图片输出测试?","是","否");
if(Answer=1);
messagebox("你将看到一张图片","按调查键这张图片才会消失");
PaintPicture("gfx001",0);
Refresh;
messagebox("你将看到一张图片","这张图片保留到下一个对话框");
PaintPicture("gfx001",-1);
messagebox("看到了吗?","这张图片保留到了这个对话框","作为这次对话的背景");
messagebox("你将看到一张图片","这张图片保留3秒钟");
PaintPicture("gfx001",3);
messagebox("测试结束");
endif;
endprocedure;
procedure GeneralTest02_Lookinto;
string TextLine;
Answer:=Menu("是否进行变量测试?","是","否");
if(Answer=1);
TextLine:=inputbox("请输入一个字符串","默认字符串");
messagebox("你输入的是:"TextLine);
TextLine:=inputbox("请输入一个表达式","(2+3)*2/5");
TextLine:=CalcExpression(TextLine);
messagebox("计算的结果是:"TextLine);
endif;
endprocedure;
procedure GeneralTest03_Lookinto;
Answer:=Menu("是否开始延迟特性测试?","是","否");
if(Answer=1);
messagebox("请和我一起读秒","从1开始数到5","每秒钟数一下","开始");
messageboxdelay("1",1);
messageboxdelay("2",1);
messageboxdelay("3",1);
messageboxdelay("4",1);
messageboxdelay("5",1);
messagebox("结束");
endif;
endprocedure;
procedure GeneralTest04_Lookinto;
Answer:=Menu("是否开始预设变量测试?","是","否");
if(Answer=1);
messagebox("现在的时间是:"Time,"现在的日期是:"Date);
endif;
endprocedure;
|
|