條件語句 link

Ren’Py中包含幾種語句可以基於某些表達式值改變主控流程。(多提一句, jumpcallreturn 語句修改主控流程不需要前置條件。)

注意之前幾頁討論過的,可以使用在Ren’Py腳本中的各類語句。Python的while、if、and語句可以內嵌在Ren’Py遊戲中,但不能內嵌在Ren’Py腳本語句之中。

if語句 link

當if後的表達式為True時,if語句會執行後面的一個語句塊(block)。if語句包含1個 if 分句,0個或多個 elif 分句,可能有1個 else 分句。

每個分句應該保持在一個邏輯行內,下面跟一個語句塊(block)。 ifelif 關鍵字後面跟一個表達式。每個分句結尾都是英文冒號(:)。

舉例如下:

if flag:
    e "你立了一個flag!"
if points >= 10:
    jump best_ending
elif points >= 5:
    jump good_ending
elif points >= 1:
    jump bad_ending
else:
    jump worst_ending

if語句裡的所有表達式按代碼先後順序進行換算。一旦某個表達式結果為True,其對應的語句塊(block)會被立即執行,完成後主控流程將跳出if語句,開始執行if語句後面的內容。

如果if語句中所有表達式結果均為False, else 分句後的語句塊會被執行,前提是存在一個 else 分句。

while語句 link

當while語句中的表達式結果為True時,while分句下面的語句塊會執行。舉例:

$ count = 10

while count > 0:

    "T-minus [count]."

    $ count -= 1

"發射!"
$ lines = ["sounds/three.mp3", "sounds/two.mp3", "sounds/one.mp3"]
while lines: # 只要lines列表不為空,表達式結果等效於True
    play sound lines.pop(0) # 移除lines列表第一個元素
    pause
while True:

    "這是一首永遠不會結束的歌。"
    "它會不斷不斷播放下去,我的同胞們。"

當主控流程遇到while語句時,while後的表達式會被計算一次,另外每次while下的語句塊(block)執行結束後又會回到while表達式。除非while中的表達式結果為False,不然後面的語句塊會反覆不斷運行。

Ren’Py沒有continue、break和for循環語句。 使用jump語句分別跳轉至while循環之前和之後的腳本標籤(label),可以替代continue和break語句的功能。 在上面的第一個while循環樣例中,示範了如何使用while循環代替簡單的for循環語句。 第二個樣例中,示範了如何使用while循環通過列表實現疊代器功能(其他程序語言中的foreach語句)。

pass語句 link

當我們需要在腳本中根據語法要求必須出現一個語句塊(block),而又沒有實際內容可以寫時,可以使用pass語句。pass語句不做任何事。

舉例:

if points >= 10:
    "棒棒的!"
elif points >= 1:
    pass
else:
    "情況看起來不妙。"
# event.step()函數可能會返回True,但依然有一些事件(event)需要執行。

while event.step():
    pass