動き2

【Pygame Zero】的当てゲームを作ろう!上下移動

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

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

今回のプロジェクトは、こちら!
ラッチ先生
ラッチ先生

今回のプロジェクトには、
boonボーンの他に 緑色の的が 登場します。


緑色の的の画像と基礎プログラムを入れた
「動き2-3 的をねらえ」zipフォルダを ダウンロードしてください

pythonしよう!動き2-3:ボーン・的を表示する
pythonしよう!動き2-3:的をねらえ.zipの中身
スック
スック

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

参考記事
【Pygame Zero】スクリーンに画像を 表示させる
【Pygame Zero】スクリーンに画像を 表示させる
スポンサーリンク
コードを 書こう
boonをクリックして 右に動かす
的を上下に動かす
的に当たったら セリフを 2秒間 言う
プログラムを 実行してみよう
pythonしよう!動き2-3:sayモジュールの解説
ラッチ先生
ラッチ先生

今回の的当てゲームのプログラムを作る上で
ポイントが 2つあります

pythonしよう!動き2-3:ポイント1の解説
スック
スック

わかりやすくなるね

pythonしよう!動き2-3:ポイント2の解説
スック
スック

変数boonボーン_stateステートが “playプレイ” になると
boonボーンが 動くようにしたよ

ラッチ先生
ラッチ先生

それでは、
boonを クリックしたら 動くプログラムを 作ります。

変数boonボーンは、Actorアクター()クラス(設計図)が 入って
boonボーンを動かす属性やメゾットが たくさん入っています

pythonしよう!動き2-3:Actor()クラスの解説

変数ball に、「 . (ドット)」を属性やメゾットを 使いましょう

ラッチ先生
ラッチ先生

まずは、boonボーンをクリックしたら
変数boonボーン_stateステートが、 “readyレディ” から “playプレイ” になるプログラムです。

Python
boon_state = "ready"  #1 変数boon_stateの最初のデータ:"ready"
target_speed = 5 

def draw():
    screen.fill("white")
    boon.draw()
    target.draw()
    text_display.draw(screen) 

def on_mouse_down(pos):  #2 クリックした座標を取得 posに代入される
    global boon_state  #3 グローバル変数:boon_state

    if boon.collidepoint_pixel(pos): #4 boonをクリックしたら
        boon_state = "play" #5 変数boon_stateに"play"が 代入される
pythonしよう!動き2-3:クリックの座標にpos解説
pythonしよう!動き2-3:boon.collidepoint_pixel(pos)メゾットの解説
スック
スック

21. globalグローバル boonボーン_stateステート

変数boonボーン_stateステート を グローバル変数にすることを 忘れないでね
readyレディ” から “playプレイ“に 変わるよ

ラッチ先生
ラッチ先生

つぎは、
boonボーン_moveムーヴ関数にボールの動きを まとめるよ

そして、
def update()関数の中に 入れて、更新させよう

pythonしよう!動き2-3:update関数の解説
Python
def boon_move():  #1 boonの動きをまとめる関数
    global boon_state  #2 グローバル変数 boon_state

    if boon_state == "play": #3 もし 変数boon_stateが"play"になったら
        boon.x += 10 #4 boonのx座標を 10ずつ 増やす

        if boon.x > WIDTH: #5 もし boonのx座標が WIDTH(800)より大きくなったら
            boon.x = 100 #6 boonのx座標を 100に代入する(元に戻す)
            boon_state = "ready" #7 変数boon_stateに "ready"を代入する
Python
def update(): #8 更新する
    boon_move() #9 boon_move関数
スック
スック

クリックしたら boonボーンが 動いたね

ラッチ先生
ラッチ先生

targetターゲットのy座標を変えて、上下の動きを作ります。

Python
target_speed = 5 #1 変数target_speedを作る 初期値:5
Python
def target_move(): #2 的の動きをまとめる
    global target_speed  #3 グローバル変数target_speed

    target.y += target_speed #4 的のy座標を 変数target_speedずつ増やす

    if target.y > HEIGHT-50 or target.y < 50: #5 上下の端に触れたら
        target_speed = -target_speed #6 変数target_speedに -1 × target_speed を 代入する
Python
def update(): 
    boon_move()
    target_move()  #7 target_move()関数

pythonしよう!動き2-3:green_targetの画像の解説
スック
スック

的は、
targetターゲット_speedスピードが、「5」なら、下に動き、
targetターゲット_speedスピードが、「-5」なら、上に動くよ

ラッチ先生
ラッチ先生

textテキスト_displayディスプレイオブジェクトを使って
キャラクターに セリフを 言わせるよ

Python
def draw():
    screen.fill("white")
    boon.draw()
    target.draw()
    text_display.draw(screen) #1 テキスト表示機能を準備します
pythonしよう!動き2-3:TextDisplayクラスのdraw()メゾットの解説
スック
スック

これで、キャラクターにセリフを言わせる準備が できました

ラッチ先生
ラッチ先生

boonに当たったら、的にセリフを言わせるよ

衝突判定は、collideコライド_pixelピクセル( ) メゾットを使います。

pythonしよう!動き2-3:collide_pixelの解説
Python
def target_move(): 
    global target_speed 
    
    target.y += target_speed

    if target.y > HEIGHT-50 or target.y < 50: 
        target_speed = -target_speed

    if target.collide_pixel(boon): #2 boonに衝突したら
            target.say("Hit", 2, size=70, color="red", y_offset=-70) #3 [Hit!」と 2秒間言う
pythonしよう!動き2-3:TextDisplayクラスのsayメゾットの解説
pythonしよう!動き2-3:画像green_targetの解説
スック
スック

あれっ? 的が、セリフを言いながら動いてるよ

ラッチ先生
ラッチ先生

はい。これでもいいんだけれど、
お好みでセリフを言っている時、的の動きを止めたい場合は
isイズ_talkingトーキング( )メゾットと使おう

pythonしよう!動き2-3:TextDisplayクラスis_talking()メゾットの解説
Python
def target_move(): 
    global target_speed 

    if not target.is_talking(): #4 もし 的が話していなければ
        target.y += target_speed

        if target.y > HEIGHT-50 or target.y < 50: 
            target_speed = -target_speed

        if target.collide_pixel(boon): 
            target.say("Hit", 2, size=70, color="red", y_offset=-70) 
pythonしよう!動き2-3:if target.is_talking()の解説

pythonしよう!動き2-3:if not target.is_talking()の解説
スック
スック

40~46.インデント(字下げ:4文字下げる)してね

ラッチ先生
ラッチ先生

これで、的が 「Hitヒット!」と言わない時だけ 動く。
つまり、
的が 「Hitヒット!」と言っている間は 動かないんだ

スック
スック

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

ラッチ先生
ラッチ先生

今回は、
クリックしたらboonボーンが動き 的に当たったら「Hitヒット!」と言う
プログラムを作りました。

的を ねらえ!
Python
import pgzrun
from pgzhelper import *
from say import text_display

WIDTH = 800
HEIGHT = 590

boon = Actor("boon", (100, 300))
target = Actor("green_target", (700, 300))

boon_state = "ready" 
target_speed = 5 

def draw():
    screen.fill("white")
    boon.draw()
    target.draw()
    text_display.draw(screen) 

def on_mouse_down(pos): 
    global boon_state 

    if boon.collidepoint_pixel(pos):
        boon_state = "play" 

def boon_move(): 
    global boon_state 

    if boon_state == "play":
        boon.x += 10 

        if boon.x > WIDTH: 
            boon.x = 100
            boon_state = "ready"

def target_move(): 
    global target_speed 

    if not target.is_talking(): 
        target.y += target_speed

        if target.y > HEIGHT-50 or target.y < 50: 
            target_speed = -target_speed

        if target.collide_pixel(boon): 
            target.say("Hit", 2, size=70, color="red", y_offset=-70) 
           
def update(): 
    boon_move()
    target_move() 

pgzrun.go()
pythonしよう!動き2-3:TextDisplayクラスのsay()メゾットの解説
ラッチ先生
ラッチ先生

今回は、的当てゲームを作りました。

sayメゾットの使い方、覚えたかな
あなたのプログラムで 活用してみてください!

スック
スック

それじゃ、またね!

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

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

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