【初心者向け】KivyによるWindowsアプリ作成29 ミスタイプ時のペナルティ処理実装

今回は、画面に表示されていない文字をタイプしてしまった時に、ペナルティとしてスコアを10点マイナスする処理を実装します。

<スポンサーリンク>

実装方針の検討

今回、コードに追加する記述はそれほど複雑なものではありませんが、どのような内容を追加するか、簡単に整理しておきましょう。

まず、キータイプ時には、keyboardDownメソッドが実行されますが、この中では、targetsリストに登録されている表示済みの文字を一通りなめて、タイプされたキーと一致する文字が含まれていれば、スコアを10点加算しています。

この現状の処理を踏まえ、以下のようにkeyboardDownメソッド内のコードを修正することで、ペナルティ処理を実装したいと思います。

  • 不正解かどうかを示すフラグを準備し、表示済みの文字をなめるループ処理の前に、このフラグをTrueに設定しておく
  • ループの中で、タイプされたキーに一致する表示済み文字が見つかった場合、このフラグにTrueを立てる(1つも一致するものが無ければ、フラグはFalseのままループが終了する)
  • ループ終了後、フラグがFalseのままであれば、正解タイプが行われなかったことを意味するため、スコアを10点減算する

それでは、この方針に従って、実装を行いましょう。

実装

まず、フラグを作成し、Trueで初期化します。

def keyboardDown(self, keyboard, keycode, text, modifiers):
    missFlag = True #この行を追加
#省略

フラグの名称は、分かりやすいように「missFlag」としておきました。

次に、表示済みの文字の中にタイプされたキーと一致するものがあるかを確認するためのループ処理中に、一致する場合はmissFlagをFalseにする処理を追記します。

def keyboardDown(self, keyboard, keycode, text, modifiers):
#省略
    for target in self.targets:
        if target.text == text:
#省略
            missFlag = False #この行を追加

最後に、missFlagの値を確認して、Trueであればスコアを減算する処理を、forループを抜けた後に追加します。

def keyboardDown(self, keyboard, keycode, text, modifiers):
#省略
    for target in self.targets:
#省略
    if missFlag: #このifブロックを追加
        self.score -= 10

実装は以上です。

今回はあっさりしていましたね。

テスト実行

それでは、プログラムが正しく動くか、実際に起動して確かめてみましょう。

ゲーム中にミスタイプをするごとに10点マイナスされていきます。そして、それを繰り返すと、スコアそのものがマイナスになります。

正解タイプを重ねてスコアを積み上げるのとは違って、こちらは時間の許す限り、いくらでもマイナスを積み上げることができますので、試してみて下さい。

終わりに

過去数回に渡り、ゲームのメイン処理の作り込みを進めてきた結果、それなりのゲーム内容にすることができました。

ここで、一旦ゲームのメイン処理からは離れ、次回は難易度設定を行うための処理を実装していきたいと思います。

<スポンサーリンク>

シェアする

フォローする