【Pygame Zero】キャラクターが いろんな所へ動く

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


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

今回のプロジェクトは、
基礎プログラムに 追加していきます。
下の「pygame zero」zipファイルを
ダウンロードしてください



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

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

移動する場所は、ランダムに決めます
まず、
ランダムモジュールを用意しよう
import pgzrun
import random #この部分を 追加する
import pgzhelper #削除する

今回のプロジェクトには、
Actor()クラスの move_forward()メゾットでboonを 動かしません
ですので、
move_forward()メゾットが 含まれている pgzhelperモジュールを
削除します。

目的地を ランダムに決める
1. target_x ・ target_y を変数宣言する

まず、
目的地の座標(x, y)を表す
・ 変数: target_x
・ 変数: target_y
を 作ります

変数宣言をして、最初の値は boonの座標にします
target_x, target_y = boon.x, boon.y


「=(代入)」は、数学の「=(イコール)」と 違うよ
boonの x座標・y座標を 入れることだよ

Actor()クラスの属性 x , y で
boonの x座標、y座標が わかるんだ
Actor()クラスは、キャラクターを作る設計図です。
7. boon = Actor(“boon“, (400, 300))
変数boonには、Actor()クラス(設計図)が 入っています。

Actor()クラスに入っている
(属性:データ)
・ x (キャラクターの x座標)
・ y (キャラクターの y座標)
・ angle(キャラクターの向き)
(メゾット:命令)
・ draw (キャラクターを 表示する)
・ angle_to(ターゲットの方へ向く角度を計算する)
属性(データ)と メゾットに 「.(ドット)」を付けて 使います
オブジェクトとは?
設計図(クラス)で 作り出されたもの
・ キャラクター
・ キーボード
・ 背景 など
boonオブジェクト

設計図(クラス)は、
変数に 名前を付けて 保存する

2. グローバル宣言をする

次に
def update()関数で ターゲットの座標を ランダムに決めます


変数target_x と 変数target_y のデータは
つまり、ターゲットの座標は、boonが到着すると
更新(変わる)するので、グローバル宣言します
def update():
global target_x, target_y

3. target_x ・ target_y をランダムに決める
if boon.x == target_x and boon.y == target_y:
target_x = random.randint(50, 750)
target_y = random.randint(50, 540)


boonとターゲットが 同じ座標に なったら、
randomモジュールの中にあるrandint()関数で
ターゲットの座標を ランダムに 決めましょう

なぜ、ターゲットのx座標を 50~750 にしたのか?
それは、
boon の 画像が、100 × 100 px だからです

スクリーンに boonが 入る範囲が x座標は50から750 に なります

つぎに、
ターゲットのy座標を ランダムに 決めるよ

これで、boonが ターゲットの座標と同じになったら、
ターゲットは、 ランダムに決めた新しい座標に 現れます

なるほど!
ターゲットの最初のデータは、boonの座標が入っているから
ターゲットは、スタート時にすぐ新しい場所へ 現れるんだ
1秒かけて 目的地へ動く

次に、Actor()クラスにあるangle_to()メゾットを使って
boonを ターゲットの方へ向かせます

boon.angle = boon.angle_to((target_x, target_y))


なるほど!
① angle_to()メゾットで、ターゲットへの角度を計算してから
② boonの属性angle(向き)に その角度を代入して
boonが ターゲットの方へ 向くんだね


そして、
animate()関数を使って、boonを ターゲットへ動かすんだ
animate(boon, pos=(target_x, target_y), duration = 1.0)


とっても便利な関数だね

これで、今回の学習は終了! おつかれさま
まとめ
今回は、
boonが 1秒かけて ランダムな場所へ行くプログラムを 作りました

import pgzrun
import random
WIDTH = 800
HEIGHT = 590
boon = Actor("boon", (400,300))
target_x, terget_y = boon.x, boon.y
def draw():
screen.fill("white")
boon.draw()
def update():
global target_x, target_y
if boon.x == target_x and boon.y == target_y:
target_x = random.randint(50, 750)
target_y = random.randint(50, 540)
boon.angle = boon.angle_to((target_x, target_y))
animate(boon, pos=(target_x, target_y), duration = 1.0)
pgzrun.go()

animate()関数の引数posで
boonを ランダムに動かすプログラムを作りました。
animate()関数には、
boon(オブジェクト)を 変化させる引数が、たくさんあります。
お楽しみにね!

はぁ~い!