簡単なゲーム

【Pygame Zero】簡単なゲーム01:タイミングを狙え!カラースロット‼

ratch2025

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

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

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

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

BGM提供:DOVA-SYNDROME
https://dova-s.jp/
Mini mini Kawaii Popby 蒲鉾さちこ

効果音提供:Chisato’s Website
https://chisatosound.sakura.ne.jp/index.html
「Accent. Brilliant [02] (Low)」:アクセント
「Thought Babble/Cloud [02]」:アニメ

ラッチ先生
ラッチ先生

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

pythonしよう!簡単なゲーム01:カラーボールを表示する
スック
スック

今回は、スクリーンの色を “azumi”に したよ

「原色大事典」サイトには、URL:https://www.colordic.org/
pygame zeroで使える色が載っています

pythonしよう!簡単なゲーム01:カラースロット!zipの中身
スポンサーリンク

スロット操作:スペースキーで準備・回転・一時停止

当たり判定

BGM・効果音を 入れる

BGM提供:DOVA-SYNDROME
https://dova-s.jp/
Mini_mini_Kawaii_Popby 蒲鉾さちこ

効果音提供:Chisato’s Website
https://chisatosound.sakura.ne.jp/index.html
「accent_brilliant_02_low」:アクセント
「thought_bubble_cloud_02」:アニメ

効果音が鳴り終わったら、スペースキーで再プレイ

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

ラッチ先生
ラッチ先生

今回の「カラースロット!」では、
・ ボールのコスチュームの切り替え
プログラムがあります。

そこで、このモジュールを 用意しました

スック
スック

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

ラッチ先生
ラッチ先生

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

pythonしよう!簡単なゲーム01:変数ballの詳しい解説
スック
スック

属性(データ)やメソッド(命令)は、
『 . (ドット)』を付ければ、使えるよ

ラッチ先生
ラッチ先生

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

スック
スック

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

スック
スック

3つに 分けたよ

ラッチ先生
ラッチ先生

まず、ボールの画像を プロパティ:imagesイメージズに入れ
animateアニメイト( ) メソッドで 画像の切り替えをしよう

Python
ball.images = ["ball_yellow", "ball_blue", "ball_purple", "ball_red", "ball_green"]  #1 プロパティ: imagesに ボールの画像を入れる
ball.fps = 8               #2 プロパティ:fps に 8を 代入する
Python
def update():
    ball.animate()         #3 コスチュームを 切り替える
スック
スック

ボールの回転速度を変えたい時は、fpsの数値を 変えようね

ラッチ先生
ラッチ先生

変数gameゲーム の “readyレディ“では、
stopストップ( )メソッドを使って、ボールの画像切り替えを 止めます

Python
game = "ready"  #1 変数gameを宣言する 初期値:ready
ball.stop()     #2 ボールの切り替えを 止める
Python
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()
pythonしよう!簡単なゲーム01:スロット:準備・回転・一時停止②の解説
スック
スック

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

pythonしよう!簡単なゲーム01:text( ) メソッドの解説
ラッチ先生
ラッチ先生

defデフ onオン_keyキー_downダウン(keyキー): 関数で、
スペースキーを押したら 変数gameゲーム
・ “playプレイ” : スロット再開
・ “resultリザルト” :当たり判定
・ “readyレディ” : スロット準備
を 代入していくよ。

Python
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 画面切り替え 止める(最初の画面に戻る)   
スック
スック

おおっ!もうスロットに なっちゃった

ラッチ先生
ラッチ先生

つぎは、当たり判定です。

・ 黄色ボールに止まれば 当たり。
・ それ以外は はずれ

pythonしよう!簡単なゲーム01:当たり判定の解説

それぞれの背景画像を 表示します。

背景画像 を 表示する ポイント

1,背景画像を入れる『変数:bgビージー_imageイメージ』を 宣言します。

初期値は、「Noneナン」です。
つまり、背景画像が ない 空です。

pythonしよう!簡単なゲーム01:変数bg_image

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

pythonしよう!簡単なゲーム01:変数bg_image フォルダ内bg_clear
pythonしよう!簡単なゲーム01:変数bg_image フォルダ内bg_over
Python
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 背景画像を 表示する
Python
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を代入する
pythonしよう!簡単なゲーム01:blit(  )メソッド
スック
スック

変数に 画像も入れられるんだね

blitブリット( ) メソッドを使って 背景画像を表示したよ

BGM提供:DOVA-SYNDROME
https://dova-s.jp/
Mini_mini_Kawaii_Popby 蒲鉾さちこ

効果音提供:Chisato’s Website
https://chisatosound.sakura.ne.jp/index.html
「accent_brilliant_02_low」:アクセント
「thought_bubble_cloud_02」:アニメ

ラッチ先生
ラッチ先生

それでは、BGMを 入れてみましょう

Pythonパイソン zeroゼロには、musicミュージックオブジェクトが標準装備であります。
やり方、以下の手順です

pythonしよう!簡単なゲーム01:MP3ファイル

☆ Pygame zeroでは英語の大文字が 使えません。 エラーが出ます
 小文字 に直します

pythonしよう!簡単なゲーム01:mousicフォルダの解説
pythonしよう!簡単なゲーム01:musicモジュールの解説
Python
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サウンズオブジェクトが標準装備であります。

次の手順で 行います

pythonしよう!簡単なゲーム01:WAVファイル
pythonしよう!簡単なゲーム01:WAVファイル
pythonしよう!簡単なゲーム01:soundsフォルダの解説
pythonしよう!簡単なゲーム01:play()メソッドの解説
スック
スック

今回のプログラムに
Chisato’s Website」サイトから
「accent_brilliant_02_low」:アクセント
「thought_bubble_cloud_02」:アニメ

 効果音を お借りしました。 ありがとうございます。

Python
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 効果音を入れる
スック
スック

あれれっ⁉ 
スタートキーを押すと すぐ画面が切り替わって 効果音が途切れるよ

ラッチ先生
ラッチ先生

チャンネルオブジェクトを 使って、
効果音が鳴り終わってから、
スペースキーで画面を切り替えるようにしましょう

チャンネルオブジェクトとは…?

○ 再生中の効果音を操作するリモコン

pythonしよう!簡単なゲーム01:チャンネルオブジェクトの解説

soundサウンドモジュールのplayプレイ( )メソッドは、効果音を再生する だけでなく
チャンネルオブジェクトを 返します。

変数に チャンネルオブジェクトを 代入すれば、メソッドが 使えます

スック
スック

今回は、新しく変数resultリザルト_soundサウンド を作って
この中にチャンネルオブジェクトを 代入するよ

Python
result_sound = None  #1 変数result_sound を宣言 初期値:None (データ無し)
Python
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! これで、カラースロットの完成!

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

ラッチ先生
ラッチ先生

今回は、
カラースロットのプログラムを 作りました。

カラースロット!
Python
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:コスチュームの切り替えの手順を 覚えて
みなさんも スロットゲームに挑戦してみてね

それじゃ、またね!

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

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

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