四、 系統設計與實作
4.2 條件式劇情的視覺化編輯
為了達到視覺化的編輯,我們必須要將傳統由使用者輸入文字程式碼的動作 捨棄,將所有要產生程式碼的動作都交由系統去做,使用者只需藉由系統提供的 對話方塊的協助,以點擊和拖拉的方式來完成編輯。
因此我們的系統必須要在使用者以及系統描述檔之間提供一個視覺化的溝 通,以下先介紹一下劇情編輯系統的系統架構:
圖 14-劇情編輯系統的系統架構
我們可以看到,此系統最主要有三大部分,分別是Message Recognizer、
Scenario Manager 以及 Interpreter,以下分別對這三大部分做一個詳細的介 紹:
(1)Message Recognizer:
負責辨識物件傳過來的訊息,並根據辨識過後的訊息產生相對應的 對話表單。
(2)Scenario Manager:
負責控制及顯示劇情,當使用者根據對話表單的協助輸入完畢之 後,Scenario Manager 會將使用者輸入的內容存入對應的劇情庫當 中,並將結果以圖式顯示出來。
(3)Interpreter:
描述檔的直譯器,一開始Interpreter 會將從描述檔讀入的程式碼 轉成相對應的劇情,並傳給Scenario Manager 存到相對應的劇情庫 中,等到最後要存檔的時候,Interpreter 會將劇情庫當中的劇情轉成 相對應的程式碼,並存入描述檔當中。
舉一個例子,當使用者在開場劇情點選了編輯條件劇情的時候,Message Recognizer 就會出現條件劇情的對話表單來協助使用者編輯。當使用者編輯完 畢之後,Scenario Manager 就會將使用者輸入的結果存入開場劇情的劇情庫
當中,然後將條件劇情以圖式顯示出來。之後當使用者存檔的時候,Interpreter 就會將剛剛所存的條件劇情轉成相對應的程式碼,並存入描述檔當中。
接下來我們就以循環控制(loop)和條件控制(condition)為例子,來看看劇 情控制的圖示、語法以及對話表單的設計。
(1)循環控制(loop)
圖示:
語法:
REPEAT ( <Variable_Integer> ) <Scenario_Block>
對話表單:
根據循環控制的語法,我們知道循環控制最主要就是要知道循環的 次數,因此對話表單設計為一個下拉的選單,讓使用者以下拉的方式設 定循環的次數
圖 15-循環控制的對話表單
(2)條件控制(condition)
圖示:
語法:
IF ( <Expression> ) <Scenario_Block> <Else_Block>
對話表單:
首先根據條件控制的描述檔語法我們可以知道,條件控制分為三大
部分,分別是條件式、成立劇情以及不成立劇情,因此一開始點選條件 控制時,會跳出如圖x.的對話表單,幫助使用者了解說設定條件控制 時,必須要設定條件式,成立劇情以及不成立劇情。
圖 16-條件控制的對話表單
接著就分別來看看設定條件式、成立劇情和不成立劇情的對話表單 條件式:
條件式的語法:
Expression> :: = <Integer>
| CHARC | STRING
| <Lvalue>
| ( <Expression> )
| <Expression>&& <Expression>
| <Expression> <= <Expression>
| <Expression> >= <Expression>
| <Expression> || <Expression>
| <Expression> == <Expression>
| <Expression> != <Expression>
設定條件式的對話表單:
根據條件式的語法,我們將設定條件式的對話表單設計成如下 圖所示,一開始點選左邊的縮圖來設定條件演員,點選之後條件演 員就會出現在右邊的框框,並出現”被按下”以及”沒被按下”兩種條
件,之後再以滑鼠點擊設定條件演員的條件即完成了條件式的設 Statement_List> :: = <Statement> | <Statement_List>
Statement> :: =
xpression> ;
| ene_Parameter> ;
> ;
成立劇
<
<
<Statement>
<
<E
NEXTSCENE <Sc
| PREVIOUSSCENE <Scene_Parameter
(2)以點選的方式來設定條件 演員的條件
(1)點選答案選項縮圖 來設定條件演員
| MAINSCENE <Scene_Parameter> ;
介紹完了這些圖示以及對話表單之後,我可以發現如此設計的一些編輯特