本記事は『ナビつき!つくってわかる はじめてゲームプログラミング』ノードンガイド「勝敗判定プログラムのしくみ」の内容まとめです。
先に条件を満たすと勝利と判定して演出を発生させ、それ以降に条件を満たしても何も起こらないようにします。
勝敗判定の仕組み
追加条件:レッスン6のステップ3をクリアする
登場する主なノードン | ||
---|---|---|
AND | NOT | フラグ |
今回は勝敗判定プログラムの解説です。勝ったときだけ演出(エフェクト)が発生し、一度勝敗が決まると、それ以降にもう片方が条件を満たしても何の反応も起きないといった仕組みです。
完成すると画像のようなプログラムになります。少し複雑なので順を追って説明していきますね。
一度オンになるとオンの状態を維持する
画面には数つきモノがあります。Lボタンを押すと数つきモノの数字が0から1に変わり、同時にクラッカーが鳴り、それ以降は、何度ボタンを押しても反応がありません。
一度ボタンを押すと、それ以降何も起きなくなる仕組み。これが勝敗判定プログラムに欠かせない重要な部分です。
プログラム画面には4体のノードンがいます。
- ボタン:Lボタンを押した瞬間に1.00を出力
- フラグ:オンポートに入力があるとオンになって1.00を出力し、以降はずっとオンのまま
- エフェク:入力があると設定されたエフェクトを発生させる
- 数つきモノ:入力された数をゲーム画面に表示する直方体
フラグノードンは入力があるまでオフ(0.00)の状態です。オフの間はシグナルを出力しないので、数つきモノは0を表示し、エフェクトノードンは何もしません。
Lボタンが押されるとフラグノードンのオンポートに1.00が入力され、フラグがオンになります。オンになると1.00が出力されて、数つきモノの数が1に変わり、エフェクトノードンはクラッカーを鳴らします。
フラグノードンは1度オンになるとオンの状態を維持します。何度オンポートにシグナルが来てもオンのまま変わらないので、Lボタンを押しても、数つきモノの数も1のまま変化しません。
同じプログラムで対戦相手をつくる
先ほどと同じノードン構成を右側に配置します。左チームとの違いは、ボタンノードンがRボタンをチェックしていること。数つきモノとエフェクトの見た目を変えて、見分けがつくようにしてあることです。
ゲーム画面には左に青い数つきモノ、右に赤い数つきモノが置かれました。プログラムはどちらも同じなので、Lボタンを押すと青い数つきモノが0から1に変わり、Rボタンを押すと赤い数つきモノが0から1に変わり、それぞれにエフェクトが発生します。
どちらも1に変わったあとは、どのボタンを押しても1のままです。つまりどちらのボタンも、反応するのは最初に押された1回だけ。
このプログラムを勝敗判定にするには、片方のボタンが押されたら、もう片方のボタンに反応しないようにする必要があります。
どちらのボタンが早く押されたかを判定
「一度ボタンが押されるとオンになり、それ以降オンの状態を維持する」というフラグノードンの特性を活かして、LボタンとRボタンどちらが早く押されたかで勝敗を判定するプログラムを作っていきます。
それには、相手のフラグがオフの時にボタンを押すと反応し、ボタンが押された後は反応できなくしてしまえばいいわけです。
- 相手のフラグがオフの時にボタンを押すと反応する
- 相手のフラグがオンの時はボタンを押しても反応しない
まずは右チームから改良します。
- ボタンノードンとフラグノードンを繋ぐワイヤーを解除する
- ANDノードンを呼び出す
- ボタンノードンをANDノードンの上ポートに繋ぐ
- NOTノードンを呼び出す
- 相手のフラグノードンをNOTノードンに繋ぐ
- NOTノードンをANDノードンの下ポートに繋ぐ
- ANDノードンをフラグノードンのオンポートに繋ぐ
新しく2体のノードンを追加します。ANDノードンは上下の入力ポートに同じシグナルが入力された時だけシグナルを出力します。
NOTノードンは0.00が入力されると1.00を出力し、0以外が入力されると0.00を出力します。
相手のフラグがオフの時、NOTノードンは反対の1.00を出力します。ANDノードンの下ポートには1.00が入力されている状態となります。
そこにRボタンが押されると、上ポートに同じ1.00が入力され、ANDの条件が揃います。
ANDノードンのシグナルはワイヤーを通ってフラグノードンのオンポートに送られ、フラグがオンになるというわけです。エフェクトが発生して数つきモノが1になり、そして、それ以降はどのボタンを押しても何も起きなくなります。
相手のフラグがオフの時にRボタンが押されると、右チームのフラグがオンになる。
もし先にLボタンが押されれば相手のフラグはオンになり、NOTノードンは反対の0.00を出力するようになります。Rボタンを押してもANDの条件は揃いません。
これでRボタンが先に押された時だけ反応するプログラムの完成です。
左チームも同じように作っていきます。
相手のフラグがオフの時、NOTノードンは1.00を出力し、Lボタンが押されるとANDノードンの条件が揃って左チームのフラグがオンになります。左チームのエフェクトが発生し、数つきモノが0から1になり、それ以降は何も起きません。
勝利判定プログラムの完成です。
LボタンとRボタン、どちらが先に押されたかで異なるエフェクトが発生するので、どちらが勝ったか見た目にも分かりやすいですね。
最後に
最後に勝敗判定プログラムの要点をまとめておしまいです。
- フラグノードンを2体使う(※重要)
- 勝利判定にはNOTノードンとANDノードンを使う
- 相手のフラグがオフの時に条件が揃うとこちらのフラグがオンになるよう、相手のフラグノードンをNOTノードンに繋ぐ
- 勝利条件とNOTノードンをANDノードンの入力ポートに繋ぐ
- ANDノードンをフラグノードンのオンポートに繋ぐ
- フラグノードンをエフェクトノードンに繋ぐなどして勝利演出にする
フラグノードンのどちらか片方がオンになれば、もう片方のフラグはNOTノードンの働きでオンになりません。勝利演出にはエフェクトノードンの他に、音を鳴らすノードンやBGMノードンが使えます。
以上、ノードンガイド「勝敗判定プログラムのしくみ」の内容と解説でした。
ノードンガイドの一覧はこちら。
本記事に使用しているゲーム画像や著作権および商標権、その他知的財産権は、当該コンテンツの提供元に帰属します。© Nintendo
コメント