【Pygame Zero】簡単なゲーム22:ピタッと3秒で止めろ!boonタイマー
こんにちは!
「Pythonしよう!楽しく学べるプログラミング教室」の
ラッチ先生です


スックです。よろしくね!
BGM提供: DOVA-SYNDROME
https://dova-s.jp/
・ 「Cash_Only」 written by POLARIS PLUS(ポラリスプラス)
効果音提供:効果音ラボ
https://soundeffect-lab.info/
・ 「間抜け4」: アニメ
・ 「決定ボタンを押す3」: ボタン・システム音
・ 「成功音」: ボタン・システム音
・ 「ピアノの単音」: 演出

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



このゲームで使用している音声ファイルは、
以下のサイトからお借りしています。
各自でダウンロードして、該当するフォルダに入れてください!
BGM提供: DOVA-SYNDROME
https://dova-s.jp/
・ 「Cash_Only」 written by POLARIS PLUS(ポラリスプラス)
効果音提供:効果音ラボ
https://soundeffect-lab.info/
・ 「間抜け4」: アニメ
・ 「決定ボタンを押す3」: ボタン・システム音
・ 「成功音」: ボタン・システム音
・ 「ピアノの単音」: 演出

学習の流れ
タイマーを 作る
判定する

プログラムを 実行してみよう
プログラミングの仕方を説明します

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

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

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


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

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

boon = Actor("boon", (400, 300))
game = "ready" #1 変数game 宣言 初期値:ready
time = 0 #2 変数time 宣言 初期値:0
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()
- f 文字列とは?


update()関数の引数 dt を使って
変数game が “play“になったら タイマーを動かそう
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」: ボタン・システム音
- def on_key_down(key) 関数とは?

- 効果音について?


効果音ラボサイトからの音源は、MP3形式です。
しかし、pygame zeroプログラムでは、MP3形式は使えません。WAV形式に 変換して フォルダsoundsに 入れてください

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

そこで、「:.2f」を使って 小数第2位までの表示にしましょう
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に設定する
def draw():
screen.fill("lavenderblush")
boon.draw()
screen.draw.text(f"{time:.2f}", #3 小数第2位までにする
(300, 100),
fontsize=150,
color="blue")
if game == "ready":
これで、タイマーが 完成したね
判定する


set_result関数で 結果発表のプログラムを 定義します。
変数bg_img は、結果発表の時の背景画像を入れます。

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 効果音を 鳴らすdef draw():
screen.fill("lavenderblush")
if bg_img: #2 もし 変数bg_imgに データが入ったら
screen.blit(bg_img, (0, 0)) #3 変数bg_imgを 表示する
boon.draw()- blit( )メソッドとは?


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

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()関数を 実行する
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」: ボタン・システム音
・ 「成功音」: ボタン・システム音
・ 「ピアノの単音」: 演出
- musicモジュールとは?


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

リスタートのプログラムをします。
まず、判定されたら schedule( )メソッドを使って
2秒間 スペースキーを押しても 反応させないようにします

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()関数を実行して リセットさせます
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」: ボタン・システム音
・ 「成功音」: ボタン・システム音
・ 「ピアノの単音」: 演出
- unpause()メソッドとは?


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

今回は、
3秒ジャストに 止めるゲームを作りました。
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』を覚えておくと ゲーム作成に便利だよ
それじゃあ、またね!






