簡単なゲーム

【Pygame Zero】簡単なゲーム22:ピタッと3秒で止めろ!boonタイマー

ratch2025

こんにちは!
「Pythonしよう!楽しく学べるプログラミング教室」の
ラッチ先生です

ラッチ先生
ラッチ先生
スック
スック

スックです。よろしくね!

今回のプロジェクトは、こちら!

BGM提供: DOVA-SYNDROME
https://dova-s.jp/
・ 「Cash_Only」 written by POLARIS PLUS(ポラリスプラス)

効果音提供:効果音ラボ
https://soundeffect-lab.info/
・ 「間抜け4」: アニメ
・ 「決定ボタンを押す3」: ボタン・システム音
・ 「成功音」: ボタン・システム音
・ 「ピアノの単音」: 演出

ラッチ先生
ラッチ先生

基礎プログラムと 画像を入れた
「簡単なゲーム22: boon タイマー!」zipフォルダを
ダウンロードしてください

pythonしよう!簡単なゲーム22:boonを表示するを解説
pythonしよう!簡単なゲーム22:boonタイマー!zipの中身
スック
スック

このゲームで使用している音声ファイルは、
以下のサイトからお借りしています。

各自でダウンロードして、該当するフォルダに入れてください!

BGM提供: DOVA-SYNDROME
https://dova-s.jp/
・ 「Cash_Only」 written by POLARIS PLUS(ポラリスプラス)

効果音提供:効果音ラボ
https://soundeffect-lab.info/
・ 「間抜け4」: アニメ
・ 「決定ボタンを押す3」: ボタン・システム音
・ 「成功音」: ボタン・システム音
・ 「ピアノの単音」: 演出

pythonしよう!簡単なゲーム22:boonタイマー!zipの中身
スポンサーリンク

タイマーを 作る

判定する

pythonしよう!簡単なゲーム22:判定する

プログラムを 実行してみよう




ラッチ先生
ラッチ先生

今回のプログラミングのポイントが こちらです

スック
スック

『:.2f』は、
変数timeタイムのデータを 小数第3位を四捨五入した数値にするよ




ラッチ先生
ラッチ先生

最初に
変数gameゲーム を 作成して ゲームを4つに分けます。

pythonしよう!簡単なゲーム22:ポイントを解説する
スック
スック

”waitウェイト“は、結果が出たら、2秒間 スペースキーを押しても、
反応しないようにしたよ

ラッチ先生
ラッチ先生

textテキスト( )メソッドを使って 画面に、
・ タイマー
・ テキスト「Pressプレス SPACEスペース toトゥー STARTスタート!”」 を表示します

pythonしよう!簡単なゲーム22:textメソッドを解説する
Python
boon = Actor("boon", (400, 300))

game = "ready" #1 変数game 宣言 初期値:ready
time = 0 #2 変数time 宣言 初期値:0
Python
def draw():
    screen.fill("lavenderblush")
    boon.draw()
    screen.draw.text(f"{time}", 
                     (300, 100),
                     fontsize=150,
                     color="blue") #3 タイマーを 表示する
    if game == "ready":
        screen.draw.text("Press SPACE to START!",
                         (100, 450),
                         fontsize=80,
                         color="red") #4 テキストを 表示する

pgzrun.go()
pythonしよう!簡単なゲーム22:タイマーを作る①を解説する
Q
f 文字列とは?
pythonしよう!簡単なゲーム22:f文字列を解説する
ラッチ先生
ラッチ先生

updateアップデート()関数の引数 dtデルタタイム を使って
変数gameゲーム が “playプレイ“になったら タイマーを動かそう

Python
time = 0

def on_key_down(key): #1 キーを押したときの処理を定義する
    global game #2 グローバル変数 game

    if key == keys.SPACE: #3 もし スペースキーを 押したら 
        sounds.決定ボタンを押す3.play() #4 効果音を 鳴らす

        if game == "ready": #5 もし 変数game readyなら
            game = "play" #6 変数gameに playを設定する

def update(dt): #7 update関数 引数dt
    global time #8 グローバル変数 time

    if game == "play": #9 もし 変数gameが playなら
        time += dt #10 変数timeを dtずつ増える

def draw():

効果音提供:効果音ラボ
https://soundeffect-lab.info/
・ 「決定ボタンを押す3」: ボタン・システム音

Q
def on_key_down(key) 関数とは?
pythonしよう!簡単なゲーム22:def on_key_down(key)関数を解説する
Q
効果音について?
pythonしよう!簡単なゲーム22:soundsモジュールを解説する
スック
スック

効果音ラボサイトからの音源は、MP3形式です。
しかし、pygame zeroプログラムでは、MP3形式は使えません。

WAV形式に 変換して フォルダsoundsに 入れてください

スック
スック

うわぁ~!桁数が すごくない!

ラッチ先生
ラッチ先生

そこで、「:.2f」を使って 小数第2位までの表示にしましょう

Python
def on_key_down(key): 
    global game 

    if key == keys.SPACE and game != "result":  
        sounds.決定ボタンを押す3.play() 

        if game == "ready": 
            game = "play"

        elif game == "play": #1 もし 変数gameが playなら
            game = "result" #2 変数gameを resultに設定する
Python
def draw():
    screen.fill("lavenderblush")
    boon.draw()
    screen.draw.text(f"{time:.2f}", #3 小数第2位までにする
                     (300, 100),
                     fontsize=150,
                     color="blue") 
    if game == "ready":
スック
スック

これで、タイマーが 完成したね




pythonしよう!簡単なゲーム22:判定する
ラッチ先生
ラッチ先生

setセット_resultリザルト関数で 結果発表のプログラムを 定義します。

変数bgビージー_imgイメージ は、結果発表の時の背景画像を入れます。

pythonしよう!簡単なゲーム22:ポイントset_result関数を解説する
Python
game = "ready" 
time = 0
bg_img = None #1 変数bg_img 宣言 初期値:None(無し)

def set_result(bg, costume, sound): #4 set_result関数を 定義する
    global bg_img #5 グローバル変数 bg_img

    bg_img = bg #6 変数bg_imgに 引数bgを設定する
    boon.image = costume #7 プロパティimageに 引数costumeを設定する
    sound.play() #8 効果音を 鳴らす
Python
def draw():
    screen.fill("lavenderblush")
    if bg_img: #2 もし 変数bg_imgに データが入ったら
        screen.blit(bg_img, (0, 0)) #3 変数bg_imgを 表示する
    boon.draw()
Q
blit( )メソッドとは?
pythonしよう!簡単なゲーム22:blit()メソッドを解説する
ラッチ先生
ラッチ先生

roundラウンド( )関数を使って
停めたタイムを 小数第2位までの数字にしてから
・ パーフェクト:3.00
・ クリア: 3.01~3.04
・ オーバー: それ以外  と 判定するjudgeジャッジ()関数を 定義します

pythonしよう!簡単なゲーム22:round()関数を解説する
Python
def judge(): #3 judge()関数を 定義する
    if round(time, 2) == 3: #4 もし 変数timeが 3.00なら
        set_result("bg_perfect",
                   "boon_perfect",
                    sounds.ピアノ単音) #5 set_result()関数を 実行する
        music.pause() #6 BGMを 一時停止する

    elif 3 < round(time, 2) < 3.05: #7 もし変数timeが 3.01~3.04なら
        set_result("bg_clear",
                 "boon_clear",
                 sounds.成功音) #8 set_result関数を 実行する

    else: #9 その他
        set_result("bg_over",
               "boon_over",
                sounds.間抜け4) #10 set_result関数を 実行する

def on_key_down(key): 
    global game 

    if key == keys.SPACE:  
        sounds.決定ボタンを押す3.play() 

        if game == "ready": 
            game = "play"

        elif game == "play": 
            game = "result"
            judge() #11 judge()関数を 実行する
            
Python
music.play("cash_only") #1 BGMを 流す
music.set_volume(0.3) #2 音量を 0.3にする

pgzrun.go()

BGM提供: DOVA-SYNDROME
https://dova-s.jp/
・ 「Cash_Only」 written by POLARIS PLUS(ポラリスプラス)

効果音提供:効果音ラボ
https://soundeffect-lab.info/
・ 「間抜け4」: アニメ
・ 「決定ボタンを押す3」: ボタン・システム音
・ 「成功音」: ボタン・システム音
・ 「ピアノの単音」: 演出

Q
musicモジュールとは?
pythonしよう!簡単なゲーム22:musicモジュールを解説する
スック
スック

おおっ!パーフェクトが出たね

ラッチ先生
ラッチ先生

リスタートのプログラムをします。

まず、判定されたら scheduleスケジュール( )メソッドを使って
2秒間 スペースキーを押しても 反応させないようにします

pythonしよう!簡単なゲーム22:schedule()メソッドを解説する
Python
def on_key_down(key): 
    global game 

    if key == keys.SPACE:  
        sounds.決定ボタンを押す3.play() 

        if game == "ready": 
            game = "play"

        elif game == "play": 
            game = "result"
            judge()
            clock.schedule(can_reset,
                      2.0) #1 2.0秒後に can_reset関数を実行する

def can_reset(): #2 can_reset()関数を 定義する
    global game #3 グローバル変数 game

    game = "wait" #4 変数gameを waitに設定する

BGM提供: DOVA-SYNDROME
https://dova-s.jp/
・ 「Cash_Only」 written by POLARIS PLUS(ポラリスプラス)

効果音提供:効果音ラボ
https://soundeffect-lab.info/
・ 「間抜け4」: アニメ
・ 「決定ボタンを押す3」: ボタン・システム音
・ 「成功音」: ボタン・システム音
・ 「ピアノの単音」: 演出

ラッチ先生
ラッチ先生

変数gameゲームが waitウェイト になったら
スペースキーを押すと resetリセット()関数を実行して リセットさせます

Python
def on_key_down(key): 
    global game 

    if key == keys.SPACE and game != "result": #10 かつ 変数gameが result以外
        sounds.決定ボタンを押す3.play() 

        if game == "ready": 
            game = "play"

        elif game == "play": 
            game = "result"
            judge()
            clock.schedule(can_reset, 2.0)

        elif game == "wait": #1 もし 変数gameが waitなら
            reset() #2 reset()関数を 実行する

def reset(): #3 reset()関数を 定義する
    global game, time, bg_img #4 グローバル変数 game, time, bg_img

    game = "ready" #5 変数gameを readyに設定する
    time = 0 #6 変数timeを 0に設定する
    bg_img = None #7 変数bg_imgを None(無し)に設定する
    boon.image = "boon" #8 プロパティimageに boonを設定する
    music.unpause() #9 BGMを 再開する

def can_reset():     

BGM提供: DOVA-SYNDROME
https://dova-s.jp/
・ 「Cash_Only」 written by POLARIS PLUS(ポラリスプラス)

効果音提供:効果音ラボ
https://soundeffect-lab.info/
・ 「間抜け4」: アニメ
・ 「決定ボタンを押す3」: ボタン・システム音
・ 「成功音」: ボタン・システム音
・ 「ピアノの単音」: 演出

Q
unpause()メソッドとは?
pythonしよう!簡単なゲーム22:unpause()メソッドを解説する
スック
スック

今回の学習は、これで 終了! おつかれさま




ラッチ先生
ラッチ先生

今回は、
3秒ジャストに 止めるゲームを作りました。

boon タイマー!
Python
import pgzrun

WIDTH = 800
HEIGHT = 600

boon = Actor("boon", (400, 300))

game = "ready" 
time = 0 
bg_img = None 

def set_result(bg, costume, sound): 
    global bg_img 

    bg_img = bg 
    boon.image = costume 
    sound.play() 

def judge(): 
    if round(time, 2) == 3: 
        set_result("bg_perfect",
                   "boon_perfect",
                   sounds.ピアノの単音) 
        music.pause() 

    elif 3 < round(time, 2) < 3.05: 
        set_result("bg_clear",
                   "boon_clear",
                   sounds.成功音) 

    else: 
        set_result("bg_over",
                   "boon_over",
                   sounds.間抜け4) 

def on_key_down(key): 
    global game 

    if key == keys.SPACE and game != "result": 
        sounds.決定ボタンを押す3.play() 

        if game == "ready": 
            game = "play" 

        elif game == "play": 
            game = "result" 
            judge() 
            clock.schedule(can_reset, 2.0) 

        elif game == "wait": 
            reset() 

def reset(): 
    global game, time, bg_img 

    game = "ready" 
    time = 0 
    bg_img = None 
    boon.image = "boon" 
    music.unpause() 

def can_reset(): 
    global game 

    game = "wait" 

def update(dt): 
    global time 

    if game == "play": 
        time += dt 

def draw():
    screen.fill("lavenderblush")
    if bg_img: 
        screen.blit(bg_img, (0, 0))
    boon.draw()
    screen.draw.text(f"{time:.2f}", 
                     (300, 100),
                     fontsize=150,
                     color="blue") 
    if game == "ready":
        screen.draw.text("Press SPACE to START!",
                         (100, 450),
                         fontsize=80,
                         color="red") 

music.play("cash_only") 
music.set_volume(0.3) 

pgzrun.go()
ラッチ先生
ラッチ先生

今回は、updateアップデート(dtデルタタイム)関数の引数dt を使って
タイマーを作りました。

スック
スック

表示の仕方『:.2f』を覚えておくと ゲーム作成に便利だよ

それじゃあ、またね!

スポンサーリンク
ABOUT ME
ラッチ先生
ラッチ先生
こんにちは!
「Pythonしよう!楽しく学べるプログラミング教室」の学長、ラッチです。

scratchのように楽しく学べるPython講座です。
・図やアニメーションを使って、わかりやすく楽しく学べる!
・毎回の授業が新しい発見の連続!
・プログラミングの考え方が身につき、自分のやりたいことが形にできるように。

この3点をモットーにサイトを立ち上げました。 よろしくお願いします
記事URLをコピーしました