最近在做仿雷電的游戲,其中敵人飛船的運動路線和特征需要能靈活的設置,并且盡量少動其他部分的代碼,于是我的想法是把每種類型的飛船指定的運動路線存入腳本中,然后由引擎根據腳本執行.
因此可以把飛船的路線看成是由一系列的關鍵點組成,每個點有比如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:
