簡単なゲーム

【Pygame Zero】簡単なゲーム17:3つ揃えろ!Boonスロット

ratch2025

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

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

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

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

BGM提供: DOVA-SYNDROME
https://dova-s.jp/
「今日の空も 」 written by POLARIS PLUS

効果音提供:効果音ラボ
https://soundeffect-lab.info/
「プレゼンタイトル表示1」: ニュース・プレゼン(ビジネス系)
「ボヨン」: アニメ
「決定ボタンを押す3」: ボタン・システム音[1]
「決定ボタンを押す26」 :ボタン・システム音[1]
「成功音」: ボタン・システム音[1]

ラッチ先生
ラッチ先生

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

pythonしよう!簡単なゲーム17:背景画像を表示するを解説
pythonしよう!簡単なゲーム17:boonスロット!zipの中身
スック
スック

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

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

BGM提供: DOVA-SYNDROME
https://dova-s.jp/
「今日の空も 」 written by POLARIS PLUS

効果音提供:効果音ラボ
https://soundeffect-lab.info/
「プレゼンタイトル表示1」: ニュース・プレゼン(ビジネス系)
「ボヨン」: アニメ
「決定ボタンを押す3」: ボタン・システム音[1]
「決定ボタンを押す26」 :ボタン・システム音[1]
「成功音」: ボタン・システム音[1]

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

スペースキーで スロットを動かす

結果発表

pythonしよう!簡単なゲーム17:結果発表の解説

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




ラッチ先生
ラッチ先生

今回の「boonボーンスロット」では、
・スロットのリールを動かす
・リールの速さを ランダムに決める
プログラムがあります。

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

スック
スック

3つの画像が 入れ替わるんだね

pythonしよう!簡単なゲーム17:randomモジュールの解説
スック
スック

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

ラッチ先生
ラッチ先生

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

pythonしよう!簡単なゲーム17:変数boonの解説
スック
スック

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




ラッチ先生
ラッチ先生

今回のプログラミングには、ポイントが 3つあります

スック
スック

真ん中が止まった時、左の絵柄と違ったら 結果発表に行くよ

スック
スック

空のリストboonsボーンズ を作成して、その中にboonボーン を追加していくよ

スック
スック

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




ラッチ先生
ラッチ先生

それでは、
rangeレンジ()関数を使って boonボーンを3つ 生成して配置しましょう

pythonしよう!簡単なゲーム17:ポイント2の解説
Python
bg_image = "bg"

boons = [] #1 空リストboonsを 作成する

for i in range(3): #2 3回繰り返す
    x = 180 + 220 * i #3 x座標に 180+220×i の数値を代入する
    y = 300 #4 y座標に 300を代入する
    boon = Actor("boon", (x, y)) #5 boon生成する
    boons.append(boon) #6 リストboonsに boonを追加する

def update():
    pass
    
def draw():
    screen.blit(bg_image, (0, 0))
    for boon in boons: #7 リストboonsから boonを取り出す
        boon.draw() #8 boonを 表示する
pythonしよう!簡単なゲーム17:スロット①の解説
Q
range()関数とは?
pythonしよう!簡単なゲーム17:スロット①の解説
スック
スック

x座標を 220pxずつずらしたよ

ラッチ先生
ラッチ先生

animateアニメイト( )メソッドを使って
3つの画像を交換させましょう

Python
for i in range(3): 
    x = 180 + 220 * i 
    y = 300 
    boon = Actor("boon", (x, y))
    boon.images = ["boon_1", "boon_2", "boon_3"] #1 画像を取り込む
    boon.fps = random.randint(10, 30) #2 10~30からランダムに選んだ数値を プロパティfpsに代入する
    boon.pause() #5 アニメーションを 一時停止する
    boons.append(boon) 

def update():
    for boon in boons: #3 リストboonsから boonを取り出す
        boon.animate() #4 コスチュームアニメーションをする
スック
スック

pauseポーズ()メソッドを外しています。 つけたら止まるよ

ラッチ先生
ラッチ先生

defデフ onオン_keyキー_downダウン(keyキー)関数を使って
スペースキーを押したら 3つのリールを 回転させるよ

Python
bg_image = "bg"
game = "ready" #1 変数gameを宣言 初期値:"ready"
Python
def on_key_down(key): #2 キーが押された関数を定義する
    global game   #3 グローバルgame

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

        if game == "ready": #6 もし 変数gameが "ready"なら
            for boon in boons: #7 リストboonsから boonを取り出す
                boon.play() #8 コスチュームアニメーションを 再開する
            game = "spin" #9 変数gameに ”spin"を設定する  

def update():

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

Q
on_key_down関数とは?
pythonしよう!簡単なゲーム17:on_key_down関数の解説
Q
効果音について
pythonしよう!簡単なゲーム17:soundsモジュールの解説
スック
スック

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

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

ラッチ先生
ラッチ先生

次は、変数gameゲームを 変えることにより
スペースキーを押したら 左から順に リールを止まるようにしましょう

Python
def on_key_down(key): 
    global game   

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

        if game == "ready": 
            for boon in boons: 
                boon.play() 
            game = "spin"

        elif game == "spin": #1 もし 変数gameが spinなら
            boons[0].pause() #2 左boonのアニメーションを 止める
            game = "left" #3 変数gameに leftを設定する

        elif game == "left": #4 もし 変数gameが leftなら
            boons[1].pause() #5 真ん中boonのアニメーションを 止める
            game = "center" #6 変数gameに centerを設定する

        elif game == "center": #7 もし gameが centerなら
            boons[2].pause() #8 右boonのアニメーションを 止める
            game = "result" #9 変数gameに resultを設定する

        elif game == "result": #10 もし 変数gameが resultなら
            for boon in boons: #11 リストboonから boonを取り出す
                boon.image = "boon" #12 コスチュームを boonに設定する
            game = "ready" #13 変数gameを readyに設定する
スック
スック

おお!スロットだぁ!




pythonしよう!簡単なゲーム17:結果発表の解説
ラッチ先生
ラッチ先生

まず、2つの図柄が 合っているかどうか調べる
checkチェック( a, b )関数を 定義しましょう

pythonしよう!簡単なゲーム17:check()関数の解説
スック
スック

なるほど!Ture か False が 返ってくるのね

ラッチ先生
ラッチ先生

次に ゲームオーバーを 定義するよ
 ・ 背景画像 : “bgビージー_overオーバー
 ・ 効果音  : ボヨン

Python
def check(a, b):  #1 チェック関数を 定義する
    return boons[a].image == boons[b].image #2 コスチュームを比べて True/ False を返す

def game_over(): #3 ゲームオーバー関数を 定義する
    global bg_image #4 グローバル変数 bg_image

    bg_image = "bg_over" #5 変数bg_imageに bg_overを設定する
    sounds.ボヨン.play() #6 効果音を 鳴らす

def on_key_down(key): 
ラッチ先生
ラッチ先生

それでは、checkチェック( )関数を使って
真ん中のリールが止まった時の プログラムを 作成しよう

Python
def on_key_down(key): 
    global game, bg_image #5-7-1 グローバル変数  

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

        if game == "ready":  
Python
        elif game == "left": 
            boons[1].pause()
            if check(0, 1): #2 もし チェック関数が Trueなら
                bg_image = "bg_reach" #3 変数bg_imageに bg_reachを設定する
                sounds.成功音.play() #4 効果音を 流す
                game = "center"  
            else: #5 その他
                boons[2].pause() #6 右リールを一時停止する
                game_over() #7 game_over()関数を 実行する
                game = "result" #8 変数gameに resultを設定する

        elif game == "center": 
            boons[2].pause() 
            game = "result" 

        elif game == "result":
            bg_image = "bg"  #9 変数gameに bgを設定する
            for boon in boons: 
                boon.image = "boon" 
            game = "ready" 

効果音提供:効果音ラボ
https://soundeffect-lab.info/
「ボヨン」: アニメ
「成功音」: ボタン・システム音[1]

スック
スック

リスタートが できるね

ラッチ先生
ラッチ先生

最後に、右のリールを止めた時のプログラムを作るよ

ラッチ先生
ラッチ先生

まずは、
checkチェック(1, 2)関数で 3つの図柄がそろった時のプログラムを作ります

Python
def on_key_down(key): 
    global game, bg_image   

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

        if game == "ready": 
            for boon in boons: 
Python
        elif game == "center": 
            boons[2].pause()
            if check(1, 2): #1 もし 真ん中と右の絵柄が 同じなら
                bg_image = "bg_win" #2 変数bg_imageを bg_winに設定する
                sounds.決定ボタンを押す26.play() #3 効果音を鳴らす
            else: #4 その他
                game_over() #5 game_over関数を実行する
            game = "result" 

        elif game == "result":

効果音提供:効果音ラボ
https://soundeffect-lab.info/
「プレゼンタイトル表示1」: ニュース・プレゼン(ビジネス系)
「ボヨン」: アニメ
「決定ボタンを押す26」 :ボタン・システム音[1]
「成功音」: ボタン・システム音[1]

ラッチ先生
ラッチ先生

最後に、
図柄: ”boonボーン_3″ がそろったら、ジャックポットにします

pythonしよう!簡単なゲーム17:ジャックポットの解説
Python
def on_key_down(key): 
    global game, bg_image   

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

        if game == "ready": 
            for boon in boons: 
Python
        elif game == "center": 
            boons[2].pause()
            if check(1, 2):
                if boons[2].image == "boon_3": #1 右の絵柄が boon_3なら
                    bg_image = "bg_jackpot" #2 変数bg_imageに bg_jackpotを設定する
                    sounds.プレゼンタイトル表示1.play() #3 効果音を 鳴らす
                else: #4 その他
                    bg_image = "bg_win" 
                    sounds.決定ボタンを押す26.play() 
            else: 
                game_over() 
            game = "result" 
Python
def draw():
    screen.blit(bg_image, (0, 0))
    for boon in boons: 
        boon.draw()

music.play("今日の空も") #5 BGMを 流す
music.set_volume(0.5) #6 音量を 0.5にする

BGM提供: DOVA-SYNDROME
https://dova-s.jp/
「今日の空も 」 written by POLARIS PLUS

効果音提供:効果音ラボ
https://soundeffect-lab.info/
「プレゼンタイトル表示1」: ニュース・プレゼン(ビジネス系)
「ボヨン」: アニメ
「決定ボタンを押す3」: ボタン・システム音[1]
「決定ボタンを押す26」 :ボタン・システム音[1]
「成功音」: ボタン・システム音[1]

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

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




ラッチ先生
ラッチ先生

今回は、
スペースキーを使ったスロットプログラムを作りました。

boonスロット!
Python
import pgzrun
from costume import *
import random

WIDTH = 800
HEIGHT = 600

bg_image = "bg"
game = "ready" 

boons = [] 

for i in range(3): 
    x = 180 + 220 * i 
    y = 300   
    boon = Actor("boon", (x, y)) 
    boon.images = ["boon_1", "boon_2", "boon_3"] 
    boon.fps = random.randint(10, 30) 
    boon.pause() 
    boons.append(boon) 

def check(a,b): 
    return boons[a].image == boons[b].image 

def game_over(): 
    global bg_image 
    bg_image = "bg_over" 
    sounds.ボヨン.play() 
    
def on_key_down(key): 
    global game, bg_image 

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

        if game == "ready": 
            game = "spin" 
            for boon in boons: 
                boon.play() 

        elif game == "spin": 
            boons[0].pause() 
            game = "left" 

        elif game == "left": 
            boons[1].pause() 
            if check(0, 1): 
                bg_image = "bg_reach"  
                sounds.成功音.play() 
                game = "center" 
            else: 
                boons[2].pause() 
                game_over() 
                game = "result" 

        elif game == "center": 
            boons[2].pause() 
            if check(1, 2): 
                if boons[2].image == "boon_3": 
                    bg_image = "bg_jackpot" 
                    sounds.プレゼンタイトル表示1.play() 
                else: 
                    bg_image = "bg_win" 
                    sounds.決定ボタンを押す26.play() 
            else: 
                game_over() 
            game = "result" 

        elif game == "result": 
            bg_image = "bg" 
            for boon in boons: 
                boon.image = "boon" 
            game = "ready"

def update():
    for boon in boons: 
        boon.animate() 

def draw():  
    screen.blit(bg_image, (0, 0))
    for boon in boons: 
        boon.draw() 

music.play("今日の空も") 
music.set_volume(0.5) 

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

costumeコスチュームモジュールの animateアニメイト()メソッドを使って
いろいろな図柄の スロットを作ってみてください

スック
スック

はぁ~い!

それじゃあ、またね!

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

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

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