前の頁へ   次の頁へ

老い学の捧げ物 Part Ⅰ

10.再挑戦の勧め

今回はさらなる改良として、面選択の画面で既にクリアした面がわかるようにします。また一度クリアした面に再挑戦する場合には、前回の歩数が表示されるようにもしましょう。さらに再挑戦でクリアした時の歩数が前回より少なければ、その歩数でcleared.pklファイルを更新したいですね。

これらの処理を分かり易くコーディングするために「reFlag」というフラグを使います。Playerクラスのインスタンス変数に「self.reFlag = 0」「self.oldCounter = 0」の二つを追加しました。先ず再挑戦かどうかを判定し、reFlagを決定するとともに前回の歩数「oldCounter」を取得するメソッドをMapクラスにつくります。

   # 再挑戦 Flagを取得
   def getReFlag(self, player):
      for i in range(len(self.clearedList)):
         if self.index == self.clearedList[i][0]:           # [(x,y), (x1,y1)..]の index iの xが  map.indexなら
            player.reFlag = 1
            player.oldCounter = self.clearedList[i][1]      # [(x,y), (x1,y1)..]の index iの y = oldCounter
            break

またMapクラスのgetStage()メソッドに、再挑戦する面の番号色を赤にする処理を追加します。黄色の上に赤で上書きしています。

      sysfont = pygame.font.SysFont(None, 25)
      for i in range(len(self.clearedList)):         # cleared buttonを赤で表示
         for button in buttons:
            if button.num == self.clearedList[i][0]:
               suu = sysfont.render(str(button.num), False, (255,0,0))
               self.screen.blit(suu, (button.x+5, button.y+8))

あとはsouko.pyのmain()メソッドに、上のメソッドを使うためのmap.getReFlag(player)を追加し、スペースキーを押した時の処理を以下のように変更するだけです。

if event.type == KEYDOWN and event.key == K_SPACE:       # stage選択画面に戻る
   if clearFlag == 1:                                    # clear時の clearedList[]処理
      if player.reFlag == 0:                             # 初挑戦でクリアしていたら
         map.clearedList.append([map.index, player.counter, map.playerHis])   # append
      elif player.reFlag == 1:                           # 再挑戦でクリアしていたら
         for i in range(len(map.clearedList)):
            if map.index == map.clearedList[i][0] and player.counter < map.clearedList[i][1]:   # 進歩なら
               map.clearedList[i][1] = player.counter   # 該当行のcounterを書き換え
               map.clearedList[i][2] = map.playerHis    # 該当行のplayerHisを書き換え
   map.save(map.clearedList)         # cleared.pklに save
   map.stage.clear()                 # stage[]クリア
   clearFlag = 0                     # clearFlagを初期値に戻す
   self.main()                       # mainメソッドを実行

Soukoクラスのコンストラクタは、結局使わなかったので削除しました。今回変更のあった各クラスのファイルを提示します。button.pyは前々回に提示したものから変更がありません。cleared.pklファイルに保存しているplayerHisのデータは次の更新時に使います。
mapStage.py
players.py
souko.py

前の頁へ   次の頁へ