量産

【Pygame Zero】量産01:100個の風船を表示しよう!

ratch2025

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

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

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

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

BGM提供:DOVA-SYNDROME
https://dova-s.jp/
「おとぼけダンス(Silly dance) 」 by 蒲鉾さちこ

効果音提供:Chisato’s Website
https://chisatosound.sakura.ne.jp/index.html
「accent_synth_bell_e_major_01b_poly」:アクセント
「button_06_3_cancel」:ボタン音

ラッチ先生
ラッチ先生

基礎プログラムと 画像を入れた
「量産01 boonボーンを 探せ!」zipフォルダを ダウンロードしてください

pythonしよう!量産01:ボーンを表示する
pythonしよう!量産01:boonを探せ!zipの中身
スック
スック

この基礎プログラムは、こちらの記事で解説しています

参考記事
【Pygame Zero】スクリーンに画像を 表示させる
【Pygame Zero】スクリーンに画像を 表示させる
スポンサーリンク

100個の風船を ランダムに 表示する

pythonしよう!量産01:100個の風船を表示する

風船を クリックすると 消える

boonを クリックすると、すべての風船が 消える

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

BGM提供:DOVA-SYNDROME
https://dova-s.jp/
「おとぼけダンス(Silly dance) 」 by 蒲鉾さちこ

効果音提供:Chisato’s Website
https://chisatosound.sakura.ne.jp/index.html
「accent_synth_bell_e_major_01b_poly」:アクセント
「button_06_3_cancel」:ボタン音

ラッチ先生
ラッチ先生

今回の「boonを 探せ!」では、
・ 風船やboonボーンを クリックする
・ 風船を ランダムな場所へ
boonボーン が セリフを言う
プログラムが あります

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

pythonしよう!量産01:pgzhelperモジュールを解説
pythonしよう!量産01:randomモジュールを解説
pythonしよう!量産01:sayモジュールを解説
スック
スック

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

ラッチ先生
ラッチ先生

今回は、
100個の風船を 表示するプログラムを 作っていきます。

scratchで言う「クローン」。
pygama zeroでは、次の手順で プログラムします

pythonしよう!量産01:ポイント1を解説
スック
スック

リスト:balloonsバルーンズを作成して、その中に100個の風船を 入れるんだ

pythonしよう!量産01:100個の風船を表示する
ラッチ先生
ラッチ先生

最初に
boonボーンをランダムに選んだ場所へ動かし 隠しましょう

Python
boon_x = random.randint(50, WIDTH-50)  #1 boonのx座標に 50~750からランダムに選んだ数字を 代入する
boon_y = random.randint(50, HEIGHT-50) #2 boonのy座標に 50~540からランダムに選んだ数字を 代入する
boon = Actor("boon", (boon_x, boon_y)) #3 ランダムに選んだ座標に する
スック
スック

これで、boonボーンは、毎回 違う場所になるね

ラッチ先生
ラッチ先生

次に、100個の風船のインスタンスを
リストballoonバルーンに入れるよ

pythonしよう!量産01:ポイント1を解説
Python
balloons = []  #1 手順1:変数balloonsに、空のリストを代入する

for i in range(100): #2 100回 繰り返す
    balloon_x = random.randint(50, WIDTH-50)  #3 風船のx座標に 50~750からランダムに選んだ数値を 代入する
    balloon_y = random.randint(50, HEIGHT-50) #4 風船のy座標に 50~540からランダムに選んだ数値を 代入する
    balloon = Actor("balloon", (balloon_x, balloon_y)) #5 手順2:変数balloonに 風船のインスタンスを 代入する
    balloons.append(balloon)  #6 手順2:リストballoonsに 風船を 追加していく

def draw():
    screen.fill("white")
    boon.draw()
    for balloon in balloons:  #7 手順3:リストballoonsから 風船を取り出し
        balloon.draw() #8 風船を 表示する
スック
スック

風船をゆっくり表示させました。
ホントは、100個の風船を 一瞬で表示させるよ

pythonしよう!量産01:list()クラスのappend()メソッドを解説
pythonしよう!量産01:for i in range()関数を解説
スック
スック

へぇ~、変数balloonsバルーンズの中に 100個も風船が入れるんだぁ…
すごくたくさん入るんだね

pythonしよう!量産01:for文を解説
スック
スック

おおっ!100個の風船が、一瞬で現れたぞ!

ラッチ先生
ラッチ先生

次に、
forフォー 文 を 使って、クリックされた風船を 消していきます

pythonしよう!量産01:pgzhelperモジュールのcollidepoint_pixel()メソッドを解説
pythonしよう!量産01:list()クラスのremove()メソッドを解説
Python
def on_mouse_down(pos):      #1 クリックした座標posを 取得する
    for balloon in balloons: #2 風船を 取り出す
        if balloon.collidepoint_pixel(pos):  #3 もし 風船をクリックしたら
            sounds.button_06_3_cancel.play() #4 効果音を出す
            balloons.remove(balloon)         #5 風船を 削除する
            return                           #6 この関数(on_mouse_down) 終了
pythonしよう!量産01:soundsオブジェクトのplay()メソッドを解説

効果音提供:Chisato’s Website
https://chisatosound.sakura.ne.jp/index.html
「button_06_3_cancel」:ボタン音

スック
スック

あれっ? 
クリックした風船が消えなくて、その下にある風船が 消えてる

ラッチ
ラッチ

おぉ…と、いけない!
これだと、風船が重なっている場合、下の風船が 消えてしまう

スック
スック

なるほど! 
どの風船にクリックしたのか調べる時も
forフォー balloonバルーン inイン bballoonsバルーンズ を使って リストを順番に処理しているんだ

スック
スック

原因は、わかったよ。
それじゃあ、自分が消したい風船が 消えないよ

ラッチ先生
ラッチ先生

まかせなさい!
reversedリバースド( )関数を使えば、
リストの要素を最後から順番に 変数balloonに 代入します

Python
def on_mouse_down(pos): 
    for balloon in reversed(balloons):  #1 リストballoonsを逆順で取り出す
スック
スック

おおっ! これで、クリックした風船が 消えたね

ラッチ先生
ラッチ先生

listリストクラスにある clearクリア( )メソッドを使って
boonボーンを クリックしたら、リストballoonバルーン にある要素を すべて削除しましょう

pythonしよう!量産01:list()クラスのclear()メソッドを解説
Python
def draw():
    screen.fill("white")
    boon.draw()
    for balloon in balloons: 
        balloon.draw()
    text_display.draw(screen) #1 テキストディスプレイを装備する
Python
def on_mouse_down(pos): 
    for balloon in reversed(balloons): 
        if balloon.collidepoint_pixel(pos): 
            sounds.button_06_3_cancel.play() 
            balloons.remove(balloon) 
            return 

    if boon.collidepoint_pixel(pos):  #2 もし boonをクリックしたら
        music.stop()                  
        sounds.accent_synth_bell_e_major_01b_poly.play()  #3 効果音を入れる
        balloons.clear()              #4 リストballoonsの風船を全部削除する
        boon.image = "ok_boon"        #5 boonの画像を "ok_boon"にする
        boon.say("O.K!", 2, color = "red", size = 70, y_offset = -70)  #6 boonが「O.K!」と2秒間 言う

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

スック
スック

おおっ! boonボーンを一発で クリックできたね

ラッチ先生
ラッチ先生

最後に、
musicミュージックオブジェクトを使って BGMを 流してみよう

pythonしよう!量産01:musicモジュールを解説
Python
def on_mouse_down(pos): 
    for balloon in reversed(balloons): 
        if balloon.collidepoint_pixel(pos): 
            sounds.button_06_3_cancel.play() 
            balloons.remove(balloon) 
            return 

    if boon.collidepoint_pixel(pos): 
        music.stop()                   #2 BGMを 停止する
Python
music.play("おとぼけダンス(silly_dance)")  #1 BGMを 流す

BGM提供:DOVA-SYNDROME
https://dova-s.jp/
「おとぼけダンス(Silly dance) 」 by 蒲鉾さちこ

pygame zeroのプログラムでは、ファイル名は 全部小文字です。
大文字が入ると エラーが出ます。
ですので、
「S」の文字を 「s」小文字にして、”おとぼけダンス(silly_dance)” にします。

スック
スック

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

ラッチ先生
ラッチ先生

今回は、
風船を 量産したプログラムを 作りました。

boonを 探せ!
Python
import pgzrun
from pgzhelper import *
import random
from say import text_display

WIDTH = 800
HEIGHT = 590

boon_x = random.randint(50, WIDTH-50) 
boon_y = random.randint(50, HEIGHT-50) 
boon = Actor("boon", (boon_x, boon_y)) 

balloons = [] 

for i in range(100): 
    balloon_x = random.randint(50, WIDTH-50) 
    balloon_y = random.randint(50, HEIGHT-50)
    balloon = Actor("balloon", (balloon_x, balloon_y))
    balloons.append(balloon) 

def draw():
    screen.fill("white")
    boon.draw()
    for balloon in balloons: 
        balloon.draw()
    text_display.draw(screen) 

def on_mouse_down(pos): 
    for balloon in reversed(balloons): 
        if balloon.collidepoint_pixel(pos): 
            sounds.button_06_3_cancel.play() 
            balloons.remove(balloon) 
            return 

    if boon.collidepoint_pixel(pos): 
        music.stop() 
        sounds.accent_synth_bell_e_major_01b_poly.play()
        balloons.clear() 
        boon.image = "ok_boon" 
        boon.say("O.K!", 2, color = "red", size = 70, y_offset = -70) 
       
music.play("おとぼけダンス(silly_dance)") 

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

キャラクターを量産するには、
この3つの流れで、プログラミングします。

pythonしよう!量産01:ポイント1を解説
pythonしよう!量産01:list()クラスのappend()メソッドを解説
pythonしよう!量産01:for i in range()関数を解説
pythonしよう!量産01:for文を解説
ラッチ先生
ラッチ先生

キャラクターを量産するには、forフォー 文 をマスターしようね

キャラクターを 量産する

1. forフォー i inイン rangeレンジ( ) 文で、
   キャラクターを たくさん作って、リストに追加する。

2. forフォー キャラクター inイン リスト文で、
   リストの中のキャラクターを 表示する

スック
スック

みんなも好きなキャラクターを たくさん作ってみてね
それじゃ、またね!

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

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

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