【Pygame Zero】クリックした場所へ行ってセリフを言う

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


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

今回のプロジェクトには、
boonの他に 赤いボールが登場します。
赤いボールの画像と基礎プログラムを入れた
「動き2-1 ボールをねらえ」zipフォルダを ダウンロードしてください



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

学習の流れ
プログラミングの仕方を説明します
sayモジュールを 用意する

今回のプロジェクトでは、
boon が セリフを 言うので sayモジュールを用意しました
import pgzrun
from say import text_display

ボールを マウスで動かす

on_mouse_move関数を使って、
動いているマウスの座標を取得します。

引数pos の中に、マウスの座標が 代入されていくんだね
def on_mouse_move(pos):
ball.pos = pos
変数ballには、Actor()クラス(設計図)が 入っています。
8: ball = Actor(“redball“, (500, 100))

Actor() クラスにある
属性:pos(座標)には、座標のデータが 入っています
ball.pos と「.(ドット)」を付けて使うと
『ballの座標(ballのx座標, ballのy座標)』
データが 入ります。

ball.pos = pos
この演算子「=」は、代入する ということ
つまり、def on_mouse_down(pos)関数で取得したマウスの座標(pos)を
ball.pos(ボールの座標)に 代入するプログラムです
数学の「=」と違うから気を付けてね
プログラムの世界では、「==」に なるよ

代入とは、「データを変数に 入れる」ことだよ
クリックした所に 行く

変数「boon_state(boonの状態)」を作って
boonの状態ごとに プログラムを作っていきましょう
boon_state = "look"


まずは、変数boon_state が、”look”
ボールをねらっている時のプログラムを作ります
ボールをねらうboonの向きは、
anlge_to( )メゾットを 使おう!

ボールをねらっている時、
boonの向きが 変わっていきます。
こういう場合は、def update( )関数を使って
ボールをねらうプログラムを作りましょう

if boon_state == “look“:
この条件をつけると、
変数boon_state が “look“の時だけ
boonが ボールをねらうようになります。
def update():
if boon_state == "look": #もし、変数boon_stateが "look"なら
boon.angle = boon.anglo_to(ball)

boonが ボールをねらい始めたね

つぎは、def on_mouse_down(pos)関数を使って
マウスをクリックしたら、boonが その場所へ 行く
プログラムを 作りましょう
def on_mouse_down(pos):
global boon_state #グローバル宣言
if boon_state == "look": #もし、変数boon_stateが "look"なら
boon.pos = pos #クリックした座標を boonの座標に 代入する
boon_state = "catch" #変数boon_stateに ”catch"を 代入する

あらら!ボールの下に入っちゃったぞ…

おぅぅぅ…と!
これだと、ボールをつかまえた感じにならないね
if boon_state == “look“:
上の条件を付けて、
ボールは、変数boon
_state
が “look“の時だけ 見えるようにしましょう
def draw():
screen.fill("white")
boon.draw()
if boon_state == "look": #もし、変数boon_stateが "look"なら
ball.draw() #ボールを 表示する

変数boon_state が “catch”になったら、ボールが 消えたね

セリフを 2秒間 言う

それでは、sayモジュールのtext_displayを使って
boon に セリフを 言わせましょう
まずは、draw( )メゾットを 使って
キャラクターのセリフを スクリーンに 表示できるようにします。
def draw():
screen.fill("white")
boon.draw()
if boon_state == "look":
ball.draw()
text_display.draw(screen) #キャラクターのセリフが表示できる


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

変数boon_state が “catch“に なったら、
TextDisplayクラスのsayメゾットで
boonに セリフを 言わせよう!
boon_state = "catch"
boon.say("Get!", 2, size=70, color="red", y_offset=-70)

セリフの位置(初期値)は、
(キャラクターのx座標, y座標-50)に しています。
x_offset, y_offsetを 記入しなければ
セリフは、この位置になります。

セリフを好きな場所へ移動させたい時に
x_offset, y_offset を使って、セリフの座標を決めてください

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

今回は、
boonがボールをねらって、クリックするとボールを捕まえるプログラムを作りました。
import pgzrun
form say import text_display
WIDTH = 800
HEIGHT = 590
boon = Actor("boon", (400, 300))
ball = Actor("redball", (500, 100))
boon_state = "look"
def draw():
screen.fill("white")
boon.draw()
if boon_state == "look":
ball.draw()
text_display.draw(screen)
def on_mouse_move(pos):
ball.pos = pos
def update():
if boon_state == "look":
boon.angle = boon.angle_to(ball)
def on_mouse_down(pos):
global boon_state
if boon_state == "look":
boon.pos = pos
boon_state = "catch"
boon.say("Get!", 2, size=70, color="red", y_offset=-70)
pgzrun.go()


TextDisplayクラス(設計図)が入っている変数『text_display」
これは、簡単にキャラクターにセリフが表示できます。
あなたの作るゲームに、使ってみてください。

それじゃ、また!