【初心者向け】KivyによるWindowsアプリ作成26 文字表示速度の変更処理実装

今回の記事では、正解タイプが行われる毎に文字の表示速度を早める処理を実装し、徐々にゲーム難易度が上がっていくようにしたいと思います。

コード全量については、GitHubにファイルをアップしていますので、必要に応じてご参照下さい。

<スポンサーリンク>

実装方針の整理

今回も、最初に実装方針を簡単に整理しておきたいと思います。

まず、文字の表示時間の間隔は、現在1秒としています。これを、正解タイプの都度何秒短縮するかですが、第20回の記事で機能設計を行った際、1/60秒ずつ短縮すると決めたのでしたね。

それでは今回からゲーム画面の実装に入り、ゲーム内容を作り込んでいきたいと思います。 今回はまずゲーム画面の設計を簡単に行った上で、後半...

では、短縮処理をどのように実装するかですが、今回は以下の方針で進めて行きます。

①updateメソッドの呼び出し間隔を、現在の1秒間隔から1/60秒間隔にする

②updateメソッドに、初期値0で、呼び出しの都度、値が1増加するカウンタを用意。updateメソッド実行時にカウンタが60であれば文字を表示の上、カウンタを0にリセットする

③正解タイプの都度、この60というカウンタ上限を1ずつ小さくすることにより、呼び出し頻度を徐々に高める

では、順に実装していきましょう。

実装

①updateメソッド呼び出し間隔の変更

updateメソッドの呼び出しは、startメソッド内の「Clock.schedule_interval(self.update, 1.0/1.0)」という記述で実装しているのでした。この2つ目の引数が、メソッド呼び出しの頻度ですね。

これを1.0/1.0 (=1秒)から、1.0/60.0に変更します。

def start(self):
#省略
        Clock.schedule_interval(self.update, 1.0/60.0)

②カウンタを用いた文字表示処理の実装

続いて、カウンタによる処理の実装ですが、具体的には、

1.カウンタ変数とカウンタ上限変数を用意

2.updateメソッド実行の都度、カウンタの値を増加

3.カウンタの値がカウンタ上限に達した場合のみ、文字を表示してカウンタを0にリセット

という3点を実装します。

まず1つ目と2つ目については、startメソッドの中で初期化処理の一環として行うようにします。

def start(self):
    self.targetExist = [[False for i in range(10)] for j in range(7)]
    self.counter = 0 #この行を追加
    self.counterLimit = 60 #この行も追加
#省略

次に、3つ目ですが、これらはupdateメソッドの中に記述していきます。

def update(self, dt):
        self.counter += 1 #追加
        if self.counter >= self.counterLimit: #追加
            indexList = [] #以降の行すべてにインデントを入れる
#省略
            self.targetExist[y][x] = True
            self.targets.append(target)
            self.counter = 0 #追加

1点だけ、updateメソッド内にもともと記載していた処理は、ifの条件を満たす場合のみ実行されるよう、処理全てをifブロック内に入れる(インデントを入れる)必要があることに注意して下さい。

③カウンタの上限の減算

最後に、正解タイプが行われた際に、カウンタ上限(counterLimit)変数の値から1を減じることにより、文字表示の間隔が早まるようにします。処理を記述するのは、keyboardDownメソッド内です。

def keyboardDown(self, keyboard, keycode, text, modifiers):
    for target in self.targets:
        if target.text == text:
#省略
                self.score += 10
                self.counterLimit -= 1 #追加

実行

それでは、追加した処理が正しく動作するか、確認してみましょう。

画像による表現が難しいため、スクリーンショットは掲載しませんが、正解タイプを重ねるごとに文字表示速度が上がり、最終的には、あっけにとられるぐらいのスピードで文字が表示されるようになります。

これで、止め時が分からずに、延々とゲームを続けることにはならなそうです。

が、画面が文字で覆いつくされた時に、「GameOver」等の表示もなく、異常終了してしまうのが難点ですね。

終わりに

少し前振りをしましたが、次回はゲームの終了処理を実装することにより、ゲームとしての体をなすようにプログラムを更新していきたいと思います。

<スポンサーリンク>

シェアする

フォローする