2006-05-03

路線編程簡述

之前提過BVE只有數個指令作一些簡單的編程。如果要表達運行某指令的條件是不可能的,因為BVE路線語言根本沒有條件指令。幸好有一個程式可以先處理這些特別的指令,再把結果匯出成一個臨時的路線檔。這程式正是耳熟能詳的BVE Route Randomizer (BRR) 了。
許多人只用BRR來選車選線,頂多使用一些隨機功能,卻不知我們可以寫一個檔案給它處理。這次先講一些BRR指令,再談談應用。

材料: BRR v10。我們要.../BRR/manual/brfroute.html, RandomLU線(http://koti.mbnet.fi/lopomo/trainsoft/RLU.html)及高鐵東西線

指令
這裡只抽選一些指令,詳細的指令表請看brfrouts.html

If...else
#if{[boolean]} , #elseif{[boolean]} , #else{} 和 #endif{}

賦值
#setvalue{[name],[number]} 或 #setword{[name],[text]}
相當於Pascal編程的: name:=number/text

隨機抽選
#chance{[percent]} #rnd{[number1],[number2]} #rnd25{[number1],[number2]}
number 1是範圍上限, number2是範圍下限。#rnd25只抽選範圍內25的倍數。
percent 不用輸入點數或%號。

子程序(sub-program/procedure)
#definemacro{[名稱]}
...
#endmacro{}
應放在With Track 前。

列出變量
#value{[name]}或者#word{[name]}

運算
加: #add{[a],[b]} 減: #sub{[a],[b]} 乘: #mul{[a],[b]} 除: #div{[a],[b]}
顯示a和b的結果。

比較符號
a大於b: #greater{[a],[b]} a, b相等: #equal{[a],[b]} a小於b: #less{[a],[b]} a,b相異: #not{[a],[b]}
如果句子成立會顯示1,反之為0。

問操作者是非題
#choice{[問題內容]}
如果答「是」會顯示1,反之為0。

(一之三)
2. 觀摩
RandomLU 線應該是最多變化的BVE路線. 每次運行前, BRR會處理其專用指令, 再匯出一個可在BVE運行的csv檔. 各位把路線安裝後, 請以記事本打開下載回來的...\Route\RandLUL\Random_LUL.brf . 綜觀整個檔案, 原來大部分都是BRR指令. 是這些指令控制CSV指令的出現.
看看下面的例子, 同時請參照brfroute.html的指令清單 :

===
Texture.Background(0) RandLUL\Back_Sb.bmp
...
0 #definerndset
...
1 #definemacro
2 #if<#equal<#value,0>>
3 #setvalue<50,3000>>
4 #if<#less<#value,0>>
5 .Announce lul\#rndset,
6 #endif<>
7 #else<>
8 #setvalue>
9 #endif<>
10 #endmacro<>
...
11 #setvalue<50,3000>>
12 #setvalue
With Track,
...
13 #macro
===

這是一個隨機產生調度電台聲音的子程序. 要了解究竟其中發生甚麼事, 請看以下的流程:

===
(定義子程序)
0 訂立一個叫Radiomsg 的 隨機字串值. 可選內容包括"lul\radio1.wav", "lul\radio2.wav" ,"lul\radio3.wav" 及 "lul\radio5.wav".
1 「訂立子集radio
2 「如果Radiodistance的值=0,
3 賦一個50-3000之間25的倍數的值給radiodistance
4 「如果othertrain的值<0>0, )
#sub{RM,1} (RM值減一)
#if{#equal{RM,0}} (若變量RM=0,)
#setword{Rjump,.Pattern} (Rjump變量儲進".Pattern")
#endif{} (終止條件句)
#endif{} (終止條件句)
#endmacro{} (終止子程序)

(隨機效果開始的地方加入)
;BRF sig fault
#if{#chance{50}} (若 '50%機會' 抽中, 條件成立,)
#setword{Rjump, ;skipped } (Rjump變量儲進";skipped")
#setvalue{RM,#rnd{1,2}} (隨機選擇1或2儲進變量RM)
.pattern 1;25, (此指令出現在最終路線檔)
#endif (終止條件句)

(此後所有 ".pattern" 指令改為"#word{Rjump}", 如下例:
.pattern 1;75, 改為 #word{Rjump} 1;75,)

(每個停車點後加入)
#macro{RMChk} (運行子程序, 檢查有效性)

更改後請將副檔名轉為".brf". 每次使用這些隨機特效, 請先以BRR開啟brf檔案. 其他的交給電腦來做就可.

沒有留言: