pythonで作るタイピングゲーム(中級編②)

前回の記事で書いたゲームに肉付けをしていきます(~_~;)

・UI調節

・リザルト画面の追加

・その他もろもろを

UI調節から

中級編①の5行目に

from pygame.locals import *

を追加します。これはエスケープキーを有効にするのに使ったりするやつです。

次に、main関数(ここではrun_game)内に ←(55行目あたりです

font_3 = pygame.font.SysFont(None,30)
correct_string = "" #正解タイプ保存用

を追加します。文字のための設定と、正解タイプを保存するための変数です。

part1 までのプログラムでは正解タイプを押すと一文字目以降を返していたので正解するごとに文字が左づめに一文字づつずれていく感じになります。

上のコードを利用することで写真みたいにすることができます。

*正解タイプを保存して、未タイプの文字とくっつけて文字がずれていくのを防いでいます。

while game:  以降のUI調節のコード。part1からちょっと変わっているので一応張り付けておきます。

         screen.fill((250, 250, 250)) #背面の色
         sf_title = font_2.render(title, True,(0, 0, 0)) #タイトル(title)のフォント設定(sf_title)
         sf_word = font_2.render(displayword,True,(0,0,0)) #標示する言葉の表示
         sf_typeword = font_3.render(typeword,True,(0,0,0)) #実際にタイプする言葉の表示
         sf_correct_string = font_3.render(correct_string,True,(100,100,100))

         center_x_word = screen.get_rect().width / 2 - sf_word.get_rect().width / 2 #中心に表示させるx座標
         length  =  sf_word.get_rect().width + 100 #下で使用、四角形の長さ
         pygame.draw.rect(screen,(175,150,0), (center_x_word-50,154,length,95)) #四角形を描写
         screen.blit(sf_title, (20, 40))                 #タイトル(title)の表示
         screen.blit(sf_word,(center_x_word,200)) #日本語描写
         screen.blit(sf_correct_string,(center_x_word,175)) #正解タイプ数描写
         screen.blit(sf_typeword,(center_x_word + sf_correct_string.get_rect().width,175)) #まだ打っていない文字の描写

詳しい説明を

center_x_word = screen.get_rect().width / 2 – sf_word.get_rect().width / 2  #中心に表示させるx座標

length = sf_word.get_rect().width + 100 #下で使用、四角形の長さ

pygame.draw.rect(screen,(175,150,0), (center_x_word-50,154,length,95))  #四角形を描写

文字の背後に文字の長さに応じた四角形を描写するためのコードです。

文字の真ん中を取得するため一つ目のコードを、

文字の長さを取得するために二つ目のコードを、

実際に四角形を描写するに三つ目のコードを使います。

→引数の説明

(ここはスクリーンで , 四角形の色を , 座標を(x,y,横の幅,縦の幅) )

文字列をくっつけて描写するコードを

screen.blit(sf_correct_string,(center_x_word,175)) #正解タイプ数描写

screen.blit(sf_typeword,(center_x_word + sf_correct_string.get_rect().width,175)) #まだ打っていない文字の描写

sf_correct_string.get_rect().widthで正解タイプの長さを取得し、その分をずらすために初期座標に足し合わせる。

あとは、全部の問題を打ち終わったタイミング、もしくは60秒が経過したタイミングで result = True の文章を挟む。

結果画面構築

     #結果画面
     while result:
          screen.fill((250,250,250))
          #正解タイプすがゼロかつミスタイプがゼロなら正答率は0%に
          if count_c == 0:
               if count_m ==0:
                    corect_rate = 0
          else :
               corect_rate = round((count_c / (count_c + count_m))*100,1)###正答率の表示

          #秒間タイプ数    
          spead = round((count_c / 60),2)

          screen.blit(font_2.render("正解タイプ数{}回".format(count_c), True, (100,0,0)), (200,140))
          screen.blit(font_2.render("ミスタイプ数{}回".format(count_m), True,(100,0,0)),(200,185)) 
          screen.blit(font_2.render("正  答  率{}%".format(corect_rate), True,(100,0,0)),(200,230))
          screen.blit(font_2.render("秒間タイプ数{}回".format(spead), True,(100,0,0)),(200,275)) 

          #エスケープキーで終了
          for event in pygame.event.get():
               if event.type == pygame.KEYDOWN:
                    if event.key == K_ESCAPE:
                         result = False

          pygame.display.update()

特に難しい点はないと思いますが、一点だけ

ここで、if文を使っているのは分母に0が来ること(0で割る)で起きるエラーに対応するために付け加えています。

残りは、秒間タイプ数を導くための変数(spead)を作り

それぞれscreen.blitで画面上に描写していきます。

          #正解タイプすがゼロかつミスタイプがゼロなら正答率は0%に
          if count_c == 0:
               if count_m ==0:
                    corect_rate = 0
          else :
               corect_rate = round((count_c / (count_c + count_m))*100,1)###正答率の表示

画面遷移は無限ループを抜けるタイミングで調整します。

*pygame.display.update() 忘れがちなので注意を

以下感想

ようやくまともなゲーム見たくなってきましたが、ゲーム性が欲しいですね。(p_-)

自分はゲームをマリオカートぐらいしかやっていなかったので考えるのが難しい(笑)

次はタイトル画面の構成と画面遷移を書いていきます。(*´Д`)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です