【Pygame Zero】簡単なゲーム01:タイミングを狙え!カラースロット‼
こんにちは!
「Pythonしよう!楽しく学べるプログラミング教室」の
ラッチ先生です


スックです。よろしくね!
BGM提供:DOVA-SYNDROME
https://dova-s.jp/
・ 「Mini mini Kawaii Pop 」 by 蒲鉾さちこ
効果音提供:Chisato’s Website
https://chisatosound.sakura.ne.jp/index.html
・ 「Accent. Brilliant [02] (Low)」:アクセント
・ 「Thought Babble/Cloud [02]」:アニメ

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


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

学習の流れ
スロット操作:スペースキーで準備・回転・一時停止
当たり判定
BGM・効果音を 入れる
BGM提供:DOVA-SYNDROME
https://dova-s.jp/
・ 「Mini_mini_Kawaii_Pop 」 by 蒲鉾さちこ
効果音提供:Chisato’s Website
https://chisatosound.sakura.ne.jp/index.html
・ 「accent_brilliant_02_low」:アクセント
・ 「thought_bubble_cloud_02」:アニメ
効果音が鳴り終わったら、スペースキーで再プレイ
プログラムを 実行してみよう
プログラミングの仕方を説明します
モジュールを 用意する

今回の「カラースロット!」では、
・ ボールのコスチュームの切り替え
プログラムがあります。
そこで、このモジュールを 用意しました

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

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


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

今回は、
ボールの画像の切り替えで スロットを作っていきます。

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

3つに 分けたよ
スロット操作: 準備、回転、一時停止

まず、ボールの画像を プロパティ:imagesに入れ
animate( ) メソッドで 画像の切り替えをしよう
ball.images = ["ball_yellow", "ball_blue", "ball_purple", "ball_red", "ball_green"] #1 プロパティ: imagesに ボールの画像を入れる
ball.fps = 8 #2 プロパティ:fps に 8を 代入するdef update():
ball.animate() #3 コスチュームを 切り替える
ボールの回転速度を変えたい時は、fpsの数値を 変えようね

変数game の “ready“では、
stop( )メソッドを使って、ボールの画像切り替えを 止めます
game = "ready" #1 変数gameを宣言する 初期値:ready
ball.stop() #2 ボールの切り替えを 止めるdef draw():
screen.fill("azure")
if game == "ready":
screen.draw.text("Press SPACE to Start", center=(400, 500), fontsize=80, color="blue") #3 もし変数gameが readyなら 『Press SPACE to Start』 と表示する
ball.draw()

text( ) メソッドを使って
「Press SPACE to Start(スペースキーを押すと スタート)と
表示したよ


def on_key_down(key): 関数で、
スペースキーを押したら 変数game に
・ “play” : スロット再開
・ “result” :当たり判定
・ “ready” : スロット準備
を 代入していくよ。
def on_key_down(key): #1 キーを押す定義: 引数key
global game #2 グローバル変数 game
if key == keys.SPACE: #3 もし keyが スペースキーなら
if game == "ready": #4 もし 変数gameが "ready"なら
game = "play" #5 変数gameに "play"を代入する
ball.play() #6 画面切り替え 再開する
elif game == "play": #7 もし 変数gameが "play"なら
game = "result" #8 変数gameに "result"を代入する
ball.pause() #9 画面切り替え 一時停止する
elif game == "result": #10 もし 変数gameが "result"なら
game = "ready" #11 変数gameに "ready"を代入する
ball.stop() #12 画面切り替え 止める(最初の画面に戻る) 
おおっ!もうスロットに なっちゃった
当たり判定

つぎは、当たり判定です。
・ 黄色ボールに止まれば 当たり。
・ それ以外は はずれ

それぞれの背景画像を 表示します。
背景画像 を 表示する ポイント
1,背景画像を入れる『変数:bg_image』を 宣言します。
初期値は、「None」です。
つまり、背景画像が ない 空です。

2,当たり判定の時に、それぞれの背景画像を 代入します。


bg_image = None #1 変数bg_image を宣言 初期値:None
def draw():
screen.fill("azure")
if game == "result": #2 もし 変数gameが result なら
screen.blit(bg_image, (0, 0)) #3 背景画像を 表示するdef on_key_down(key):
global game, bg_image #4 グローバル変数 bg_image
if key == keys.SPACE:
if game == "ready":
game = "play"
ball.play()
elif game == "play":
game = "result"
ball.pause()
if ball.image == "ball_yellow": #5 もし ボール画像が 黄色いボール なら
bg_image = "bg_clear" #6 変数bg_imageに 画像bg_clearを代入する
else: #7 その他は
bg_image = "bg_over" #8 変数bg_imageに 画像bg_overを代入する

変数に 画像も入れられるんだね
blit( ) メソッドを使って 背景画像を表示したよ
BGM・効果音を入れる
BGM提供:DOVA-SYNDROME
https://dova-s.jp/
・ 「Mini_mini_Kawaii_Pop 」 by 蒲鉾さちこ
効果音提供:Chisato’s Website
https://chisatosound.sakura.ne.jp/index.html
・ 「accent_brilliant_02_low」:アクセント
・ 「thought_bubble_cloud_02」:アニメ

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

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

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

def on_key_down(key):
global game, bg_image
if key == keys.SPACE:
if game == "ready":
game = "play"
ball.play()
music.play("mini_mini_kawaii_pop") #1 BGMを 流す
elif game == "play":
game = "result"
ball.pause()
music.pause() #2 BGMを 止める
今回のプログラムに「DOVA-SYNDROME」サイトから
・ 「Mini_mini_Kawaii_Pop 」 by 蒲鉾さちこ
BGMの曲として お借りしました。 ありがとうございます。

つぎに
効果音をつけましょう! 当たり判定の時
・ 当たり
・ はずれ
Python zeroには、soundsオブジェクトが標準装備であります。
次の手順で 行います
効果音のつけ方
1. WAVファイルの効果音を 用意する


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

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


今回のプログラムに
「Chisato’s Website」サイトから
・ 「accent_brilliant_02_low」:アクセント
・ 「thought_bubble_cloud_02」:アニメ
効果音を お借りしました。 ありがとうございます。
def on_key_down(key):
global game, bg_image
if key == keys.SPACE:
if game == "ready":
game = "play"
ball.play()
music.play("mini_mini_kawaii_pop")
elif game == "play":
game = "result"
ball.pause()
music.pause()
if ball.image == "ball_yellow":
bg_image = "bg_clear"
sounds.accent_brilliant_02_low.play() #1 効果音を入れる
else:
bg_image = "bg_over"
sounds.thought_bubble_cloud_02.play() #2 効果音を入れる
あれれっ⁉
スタートキーを押すと すぐ画面が切り替わって 効果音が途切れるよ
効果音が鳴り終わったら、スペースキーで再プレイ

チャンネルオブジェクトを 使って、
効果音が鳴り終わってから、
スペースキーで画面を切り替えるようにしましょう
チャンネルオブジェクトとは…?
○ 再生中の効果音を操作するリモコン

soundモジュールのplay( )メソッドは、効果音を再生する だけでなく
チャンネルオブジェクトを 返します。
変数に チャンネルオブジェクトを 代入すれば、メソッドが 使えます

今回は、新しく変数result_sound を作って
この中にチャンネルオブジェクトを 代入するよ
result_sound = None #1 変数result_sound を宣言 初期値:None (データ無し)def on_key_down(key):
global game, bg_image, result_sound #2 グローバル変数 result_sound
if key == keys.SPACE:
if game == "ready":
game = "play"
ball.play()
music.play("mini_mini_kawaii_pop")
elif game == "play":
game = "result"
ball.pause()
music.pause()
if ball.image == "ball_yellow":
bg_image = "bg_clear"
result_sound = sounds.accent_brilliant_02_low.play() #3 変数result_soundに チャンネルオブジェクトを 代入する
else:
bg_image = "bg_over"
result_sound = sounds.thought_bubble_cloud_02.play() #4 変数result_soundに チャンネルオブジェクトを 代入する
elif game == "result" and not result_sound.get_busy(): #5 もし 変数gameが result かつ 再生終了なら
game = "ready"
ball.stop()

OK! これで、カラースロットの完成!
今回の学習は、これで 終了! おつかれさま
まとめ

今回は、
カラースロットのプログラムを 作りました。
import pgzrun
from costume import *
WIDTH = 800
HEIGHT = 600
ball = Actor("ball_yellow", (400, 300))
ball.images = ["ball_yellow", "ball_blue", "ball_purple", "ball_red", "ball_green"]
ball.fps = 8
game = "ready"
ball.stop()
bg_image = None
result_sound = None
def draw():
screen.fill("azure")
if game == "result":
screen.blit(bg_image, (0, 0))
if game == "ready":
screen.draw.text("Press SPACE to Start", center=(400, 500), fontsize=80, color="blue")
ball.draw()
def update():
ball.animate()
def on_key_down(key):
global game, bg_image, result_sound
if key == keys.SPACE:
if game == "ready":
game = "play"
ball.play()
music.play("mini_mini_kawaii_pop")
elif game == "play":
game = "result"
ball.pause()
music.pause()
if ball.image == "ball_yellow":
bg_image = "bg_clear"
result_sound = sounds.accent_brilliant_02_low.play()
else:
bg_image = "bg_over"
result_sound = sounds.thought_bubble_cloud_02.play()
elif game == "result" and not result_sound.get_busy():
game = "ready"
ball.stop()
pgzrun.go()
costumeモジュールをプロパティやメソッドを使うと
スロットのようなゲームが 簡単にプログラムできます。

ポイント1:コスチュームの切り替えの手順を 覚えて
みなさんも スロットゲームに挑戦してみてね
それじゃ、またね!
