最近在做仿雷电的游戏,其中敌人飞船的运动路线和特征需要能灵活的设置,并且尽量少动其他部分的代码,于是我的想法是把每种类型的飞船指定的运动路线存入脚本中,然后由引擎根据脚本执行.
因此可以把飞船的路线看成是由一系列的关键点组成,每个点有比如3个属性,X速度,Y速度和保持该速度的持续时间。而路线的运动轨迹可以由简单的脚本语言来定义,比如也许需要在某几个点之间重复移动一定的次数。

以下是一个Script Demo:

GO
    BEGIN
        1.0 0.0 500
    END
    BEGIN
        -1.0 0.0 500
    END
    REPEAT 4
        BEGIN
             0.0 1.0 500
        END
        BEGIN
             1.0 0.0 500
        END
        BEGIN
             0.0 -1.0 500
        END
        BEGIN
            -1.0 0.0 500
        END
    END
END

表示先左右移动一次,然后向下,向右,向上,向左呈矩形移动4次,通过设置速度分量可以实现任何路线的移动以及其他特征。
该脚本语言解释器采用了2个设计模式,Facade和Interpret模式,其中的解释器使用了几乎和任何设计模式书上介绍的一样的结构,很经典呐~

附上语言的文法定义:
program ::= GO command_list
command_list ::= command* END
command ::= begin_end_block | repeat
begin_end_block ::= BEGIN primitive END // Leaf Node on the Syntax tree
repeat ::= REPEAT INT command_list
primitive ::= SpeedX,SpeedY,Time // Recursive exit

// TestScript.txt
GO
  BEGIN
   1.0,0.0,500
  END
  BEGIN
   -1.0,0.0,500
  END
  REPEAT 4
   BEGIN
    0.0,1.0,500
   END
   BEGIN
    0.0,-1.0,500
   END
  END
END

// Execute result:

posted on 2009-12-23 16:58 Reno 阅读(360) 评论(2)  编辑 收藏 引用 所属分类: 编译原理/脚本语言开发
评论
  • # re: 运动路线控制脚本语言
    Davy.xu
    Posted @ 2009-12-23 18:12
    有意思,我最近也在研究这个,来我博客看虚幻的Kismet,呵呵  回复  更多评论   
  • # re: 运动路线控制脚本语言[未登录]
    Reno
    Posted @ 2009-12-23 21:42
    那可以和你交流下,我把源码放上去  回复  更多评论   

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


统计