top of page

Ren'Pyユーザー向けPython講座 - 04.条件分岐(if文)

更新日:2023年1月31日

本シリーズでは、Ren'Pyユーザーが知っておきたいPythonの使い方をご紹介しています。

詳細および事前準備などは「00.はじめに」をご確認ください。


今回は「条件分岐(if文)」、マルチエンドのビジュアルノベルを作るのに不可欠な内容です。

前回の03.条件式をご覧いただいている前提で進めますので、未読の方は先にご確認ください。



 


準備

今回はコンソールではなくRen'Pyスクリプトで説明を進めます。


今回の記事で出てくるスクリプトのスクリーンショットは、テキストエディター「Atom」を使用した場合の表示となります。同様にAtomを使用したい方は、ランチャーの右下「設定」→「テキストエディター」で「Atom」を選択しておいてください(下図参照)。

※本記事の時点ではAtomを使用していますが、現在はVisual Studio Code推奨です(2023年1月追記)


また、スクリプトの起動時にはランチャーから「script.rpy」を選択してください。上記で設定したエディターで開くことができます。

それでは、始めましょう。



 


条件分岐の例

1つ簡単なサンプルスクリプトを用意しました。

プロジェクトを起動すると次のようなゲームが走ります。

※背景画像は適当に作成しました



先ほどのゲームは次のようなスクリプトで走っています。

少し長く見えるかもしれませんが、ポイントは太字の部分です。この後詳しく解説します。

# キャラクターの定義
define e = Character('エリカ', color="#c8ffc8")

# メイン
label start:

    # (背景を表示)
    scene bg sky
    with dissolve

    "(サンプル開始)"

    $ love_point = 0   # 好感度のリセット

    e "太郎くん、私のこと…好き?"

    menu:   # 選択肢
        "大好き!":
            $ love_point = love_point + 10   # 好感度up

        "あんまり…。":
            $ love_point = love_point - 30   # 好感度down

    e "そう…。"

    if love_point > 0:   # 好感度が0以上ならハッピーエンド
        e "私も太郎くんが好き!"
        "ハッピーエンド"

    else:   # そうでなければバッドエンド
        e "あんたなんか、大っ嫌い!!"
        "バッドエンド"

    "(サンプル終了)"

    return

cf. Atom上での表示



条件分岐(if文)の書き方

条件によって分岐させたいときにはif文を書きます。

先ほどの例では、スクリプトの最後の方にある下図の部分にif文があります。


「if」の後ろに条件式を書きます。

条件式がTrueのときは「if」のブロックが走ります。

条件式がFalseのときは「else」のブロックが走ります。

※ 厳密には、ifの後ろは式でなくフラグなどでもOKです。要するにTrue/Falseが入れば何でもOK。


ここで注意事項です。「:」(コロン)と「 」(インデント)はお忘れなく!

Ren'PyでもPythonでも、「:」と正しいインデントは重要です。

特にインデントは、ただの空欄に見えるかもしれませんが、正しく入れないとエラーが出ます。

(半角スペース4つ分です。 tab/shift+tabでも調整可。ある程度は改行時に自動で入ります。)



Ren'Py内で変数に値を与える

ここまでで山は越えました。あと少しで終わりです。


先ほど、このようなスクリプトを書きました。

if love_point > 0:
    e "私も太郎くんが好き!"
    "ハッピーエンド"

ここでは「love_point」という変数の値が0以上かどうかで分岐させています。


では、love_pointの値はどこで変更しているのでしょうか。

答えは、下図の部分です。

01.変数02.四則演算で度々コンソールに入力してきたようなコードかと思います。

1点異なるのは、頭に「$」がついています。


この「$」について。

実は、Ren'PyスクリプトにそのままPythonコードを挿入することはできません

(if文はそのまま挿入できますが、これは特例です)。

Ren'PyスクリプトにPythonコードを挿入するとき、1行だけなら、頭に「$」を付ければOKです。



今回はここまでです。お疲れ様でした。


cf. 関連ページ

Ren'Py部屋 @crAsmビジュアルノベル情報部屋

お問合せフォーム - ご質問・ご要望はこちら



 


もう少しだけ頑張れる!という方は、以下の内容もご覧ください。



補足

先ほどの例では「if」と「else」のブロックを用意しました。

label start:
    $ love_point = 0
    
    if love_point > 0:
        "ハッピーエンド"
    else:
        "バッドエンド"
    
    return

条件が2段階、3段階あるときには「elif」が使えます。

「elif」の後ろに条件式を書きます。

label start:
    $ love_point = 0
    
    if love_point > 0:
        "ハッピーエンド"
    elif love_point == 0:
        "ノーマルエンド"
    elif love_point > -10:
        "ビミョーエンド"
    else:
        "バッドエンド"
        
    return

また、「else」ブロックは無くてもかまいません。

label start:
    $ love_point = 0
    
    if love_point > 0:
        "ハッピーになった!"

    "終了"
            
    return


おまけです。

今回はRen'Pyスクリプトで説明しましたが、Pythonでもif文の形は同じです。

下図は以前書いたPythonコードの一例です。水色で囲っている部分にif/elseが居ます。



以上です。



関連記事

すべて表示
bottom of page