【Pygame Zero】簡単なゲーム05:今日の運勢は?boon占いスロット
こんにちは!
「Pythonしよう!楽しく学べるプログラミング教室」の
ラッチ先生です


スックです。よろしくね!
BGM提供:DOVA-SYNDROME
https://dova-s.jp/
・ 「OP/EDジングル50 」 by t12ya
効果音提供:Chisato’s Website
https://chisatosound.sakura.ne.jp/index.html
・ 「Accent. Brilliant [02] (Low)」:アクセント
・ 「Bump. Low-Bit [04B]」:アクションゲーム
・ 「Power Up Item [01] (Fast)」:アクションゲーム

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


今回は、スクリーンの色を “lavenderblush“に したよ
「原色大事典」サイトには、URL:https://www.colordic.org/
pygame zeroで使える色が載っています

学習の流れ
スクリーンに 文字を表示する

boonうらない スロットを 回す
結果を 発表をする

BGM・効果音を 入れる
BGM提供:DOVA-SYNDROME
https://dova-s.jp/
・ 「OP/EDジングル50 」 by t12ya
効果音提供:Chisato’s Website
https://chisatosound.sakura.ne.jp/index.html
・ 「Accent. Brilliant [02] (Low)」:アクセント
・ 「Accent. Synth-Bell. E-Major [01B] (Polyphonic)」:
アクセント
・ 「Button [04] (Down))」:ボタン
・ 「Kiga Nukeru [01] (Long)」:アニメ
プログラムを 実行してみよう
プログラミングの仕方を説明します
モジュールを 用意する

今回の「boonうらない!」では、
・boon の 画像切り替え
・ セリフを 言う
・ モザイクを かける
プログラムがあります。
そこで、3つのモジュールを 用意しました



このvisualモジュールにある VisualEffect( )クラスを使うため
pgzhelper モジュールも用意します。


モジュールとは、
関数やプログラムが書かれているファイルのことだよ

Actor()クラスが入っている変数boon には、
boonを 動かす属性(データ)やメソッド(命令)が あります。


属性(データ)やメソッド(命令)は、
『 . (ドット)』を付ければ、使えるよ
今回のプログラミングのポイント

今回は、
boonにモザイクをかけながら画面切り替えアニメーションをする プログラムを作っていきます。

この3つのステップで
コスチュームを 切り替えることができるよ


これで、boonに モザイクを かけることができるよ

切り替わる画像に モザイクを かけるよ

3つに 分けたよ
スクリーンに 文字を表示する


text( ) メソッドを使って、
スクリーンに
「Press SPACE to Start(スペースキーを押して スタート!)」と 表示させましょう

game = "ready" #1 変数gameを 宣言する 初期値: ready
def draw():
screen.fill("lavenderblush")
if game == "ready": #2 もし 変数gameが readyなら
screen.draw.text("Press SPACE to Start!", color = "blue", center=(400, 500), fontsize=80) #3 Press SPACE to START!を 表示する

パラメーターで位置を指定できて、便利だよ
boonうらないスロットを 回す

まず、boonの画像を プロパティ:imagesに入れ
animate( ) メソッドで 画像の切り替えをしよう

set_animation_range( )メソッドを使って
リストの1番から3番のboonの画像を 指定したよ

boon.images = ["boon", "boon_ok", "boon_ohno", "boon_lucky"] #1 プロパティimagesに 画像を セットする def on_key_down(key): #2 キーが押された実行する関数を定義する
global game #3 グローバル変数 game
if key == keys.SPACE: #4 もし キーが スペースキーなら
if game == "ready": #5 もし 変数gameが readyなら
game = "play" #6 変数gameに playを代入する
boon.set_animation_range(1, 3) #7 アニメーション画像に 1~3をセットする
boon.fps = 20 #8 画像切り替えアニメーションの速さを 20にする
elif game == "ready": #10 もし 変数gameが readyなら
game = "result" #11 変数gameに resultを 代入する def update():
if game == "play": #8 もし 変数gameが playなら
boon.animate() #9 画像切り替えアニメーションを 実行する
おおっ! スロットが、できた

visualモジュールを使って、boonにモザイクを かけます。
まず、VisualEffect()クラスで、boonオブジェクトを生成します

boon = VisualEffect("boon", (400, 300)) #1 VisualEffect()クラスに 変える 
set_mosaic()メソッドを使って、boonにモザイクをかけよう
def on_key_down(key):
global game
if key == keys.SPACE:
if game == "ready":
game = "play"
boon.set_animation_range(1, 3)
boon.fps = 20
boon.set_mosaic(10) #1 boonの画像に モザイクをかける
elif game == "play":
game = "result"
boon.reset_effects() #3 boonの画像を 元に戻すdef update():
if game == "play":
boon.animate()
boon.setup_visual_costume() #2 更新する画像に モザイクをかける
3つのステップで、簡単にモザイクが かけられるよ!
boonうらないの 結果発表


変数bg_imageを 作成して、blit()メソッドを使って
背景画像を表示しましょう

bg_image = None #1 変数bg_imageを 宣言 初期値:None (無し)
def draw():
screen.fill("lavenderblush")
if game == "ready":
screen.draw.text("Press SPACE to Start!", color = "blue", center=(400, 500), fontsize=80)
elif game == "result": #2 もし 変数gameが resultなら
screen.blit(bg_image, (0, 0)) #3 変数bg_imageを 表示するdef on_key_down(key):
global game, bg_image #4 グローバル変数 bg_image
if key == keys.SPACE:
if game == "ready":
game = "play"
boon.set_animation_range(1, 3)
boon.fps = 20
boon.set_mosaic(10)
elif game == "play":
game = "result"
boon.reset_effects()
if boon.image == "boon_ok": #5 もし プロパティimageが 画像boon_okなら
bg_image = "bg_ok" #6 変数bg_imageに bg_okを代入する
elif boon.image == "boon_ohno": #7 もし プロパティimageが 画像boon_ohnoなら
bg_image = "bg_ohno" #8 変数bg_imageにbg_ohnoを代入する
elif boon.image == "boon_lucky": #9 もし プロパティが 画像boon_lickyなら
bg_image = "bg_lucky" #10 変数bg_imageにbg_luckyを代入する
おおっ!いいねえ

つぎは、say( )メソッドを使って
それぞれセリフを言わせましょう

def draw():
screen.fill("lavenderblush")
if game == "ready":
screen.draw.text("Press SPACE to Start!", color = "blue", center=(400, 500), fontsize=80) text_display.draw(screen) #1 テキストディスプレイを 装備するdef on_key_down(key):
global game, bg_image
if key == keys.SPACE:
if game == "ready":
game = "play" elif game == "play":
game = "result"
boon.reset_effects()
if boon.image == "boon_ok":
bg_image = "bg_ok"
boon.say("O.K!", 2, color = "red", size=100, y_offset=150) #2 「o.k!」と2秒言う
elif boon.image == "boon_ohno":
bg_image = "bg_ohno"
boon.say("Oh no!", 2, color="blue", size=100, y_offset=150) #3 「Oh no!」と2秒言う
elif boon.image == "boon_lucky":
bg_image = "bg_lucky"
boon.say("Lucky!", 2, color="yellow", size=100, y_offset=150) #4 「Lucky!」と2秒言う
セリフが入ると よくなるね

そして、is_talking()メソッドを使って
セリフが終わったら、スペースキーを押して 再スタートさせます

def on_key_down(key):
global game, bg_image
if key == keys.SPACE:
if game == "ready":
screen.draw.text("Press SPACE to Start!", color = "blue", center=(400, 500), fontsize=80) elif game == "play":
game = "result" elif game == "result" and not boon.is_talking(): #1 もし 変数gameが result かつ boonがセリフを言ってなかったら
boon.image = "boon" #2 プロパティimageに 画像boonを代入する
bg_image = None #3 変数bg_imageに 無しに代入する
game = "ready" #4 変数gameに readyを代入する
not is_talking():セリフを言っていない
これで、セリフを言っている時に スペースキーを押しても
反応しないよ!
BGM・効果音を 入れる
BGM提供:DOVA-SYNDROME
https://dova-s.jp/
・ 「OP/EDジングル50 」 by t12ya
効果音提供:Chisato’s Website
https://chisatosound.sakura.ne.jp/index.html
・ 「Accent. Brilliant [02] (Low)」:アクセント
・ 「Accent. Synth-Bell. E-Major [01B] (Polyphonic)」:
アクセント
・ 「Button [04] (Down))」:ボタン
・ 「Kiga Nukeru [01] (Long)」:アニメ

それでは、BGMを 入れてみましょう
Python zeroには、musicオブジェクトが標準装備であります。
やり方、以下の手順です
BGM の 流し方
1. MP3ファイルのBGMを 用意する

☆ Pygame zeroでは英語の大文字が 使えません。 エラーが出ます
小文字 に直します
2. フォルダ『music』フォルダに 入れる

3. musicモジュールのメソッドを使う

music.play("opedジングル50") #1 BGMを 入れる
今回のプログラムに「DOVA-SYNDROME」サイトから
・ 「OP/EDジングル50 」 by t12ya
BGMの曲として お借りしました。 ありがとうございます。

つぎに
効果音をつけましょう!
・ スペースキーを押した時
・ 結果発表時:O.K!
・ 結果発表時:Oh!no
・ 結果発表時:Lucky!
Python zeroには、soundsオブジェクトが標準装備であります。
次の手順で 行います
効果音のつけ方
1. WAVファイルの効果音を 用意する




2. フォルダ『sounds』フォルダに 入れる

3. soundsモジュールのplay( )メソッドを使う


今回のプログラムに
「Chisato’s Website」サイトから
・ 「Accent. Brilliant [02] (Low)」:アクセント
・ 「Accent. Synth-Bell. E-Major [01B] (Polyphonic)」:
アクセント
・ 「Button [04] (Down))」:ボタン
・ 「Kiga Nukeru [01] (Long)」:アニメ
効果音を お借りしました。 ありがとうございます。
def on_key_down(key):
global game, bg_image
if key == keys.SPACE:
if game == "ready":
game = "play"
boon.set_animation_range(1, 3)
boon.fps = 20
boon.set_mosaic(10)
sounds.button_04_down.play() #1 効果音を入れる
elif game == "play":
game = "result"
boon.reset_effects()
if boon.image == "boon_ok":
bg_image = "bg_ok"
boon.say("O.K!", 2, color = "red", size=100, y_offset=150)
sounds.accent_synth_bell_e_major_01b_poly.play() #3 効果音を入れる
elif boon.image == "boon_ohno":
bg_image = "bg_ohno"
boon.say("Oh no!", 2, color="blue", size=100, y_offset=150)
sounds.kiga_nukeru_01_long.play() #4 効果音を入れる
elif boon.image == "boon_lucky":
bg_image = "bg_lucky"
boon.say("Lucky!", 2, color="yellow", size=100, y_offset=150)
sounds.accent_brilliant_02_low.play() #5 効果音を入れる
elif game == "result" and not boon.is_talking():
boon.image = "boon"
bg_image = None
game = "ready"
sounds.button_04_down.play() #2 効果音を入れる
今回の学習は、これで 終了! おつかれさま
まとめ

今回は、
boonに モザイクを入れたスロットのプログラムを 作りました。
import pgzrun
from pgzhelper import *
from costume import *
from say import text_display
from visual import VisualEffect
WIDTH = 800
HEIGHT = 600
boon = VisualEffect("boon", (400, 300))
boon.images = ["boon", "boon_ok", "boon_ohno", "boon_lucky"]
game = "ready"
bg_image = None
def draw():
screen.fill("lavenderblush")
if game == "ready":
screen.draw.text("Press SPACE to Start!", color = "blue", center=(400, 500), fontsize=80)
elif game == "result":
screen.blit(bg_image, (0, 0))
boon.draw(screen)
text_display.draw(screen)
def on_key_down(key):
global game, bg_image
if key == keys.SPACE:
if game == "ready":
game = "play"
boon.set_animation_range(1, 3)
boon.fps = 20
boon.set_mosaic(10)
sounds.button_04_down.play()
elif game == "play":
game = "result"
boon.reset_effects()
if boon.image == "boon_ok":
bg_image = "bg_ok"
boon.say("O.K!", 2, color = "red", size=100, y_offset=150)
sounds.accent_synth_bell_e_major_01b_poly.play()
elif boon.image == "boon_ohno":
bg_image = "bg_ohno"
boon.say("Oh no!", 2, color="blue", size=100, y_offset=150)
sounds.kiga_nukeru_01_long.play()
elif boon.image == "boon_lucky":
bg_image = "bg_lucky"
boon.say("Lucky!", 2, color="yellow", size=100, y_offset=150)
sounds.accent_brilliant_02_low.play()
elif game == "result" and not boon.is_talking():
boon.image = "boon"
bg_image = None
game = "ready"
sounds.button_04_down.play()
def update():
if game == "play":
boon.animate()
boon.setup_visual_costume()
music.play("opedジングル50")
pgzrun.go()
画像にモザイクをかける時は、set_mosaic()メソッド。
def update()関数で
毎回更新するごとに 画像にモザイクをかける場合は、
set_visual_costume()メソッド。
覚えておこうね!

みんなも 作っているゲームで モザイクをかけてみてね
それじゃ、またね!
