動き

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

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

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

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

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

pythonしよう!00:boonを表示する
pythonしよう!動き08:pygame zeroフォルダ
スック
スック

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

参考記事
【Pygame Zero】スクリーンに画像を 表示させる
【Pygame Zero】スクリーンに画像を 表示させる
コードを 書こう
目的地の座標を ランダムに決める
目的地の方を 向く
1秒かけて 目的地へ 動く
プログラムを 実行してみよう
ラッチ先生
ラッチ先生

移動する場所は、ランダムに決めます
まず、
ランダムモジュールを用意しよう

Python
import pgzrun
import random #この部分を 追加する
import pgzhelper #削除する
pythonしよう!08:import randomを解説する
pythonしよう!08:pgzhelperモジュールを解説する
ラッチ先生
ラッチ先生

まず、
目的地の座標(x, y)を表す
・ 変数: targetターゲット_x
・ 変数: targetターゲット_y
を 作ります

pythonしよう!08:変数target_x, target_yを解説する
Python
target_x, target_y = boon.x, boon.y
pythonしよう!08:変数target_x, target_yの最初のデータをboonの座標にする
スック
スック

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

ラッチ先生
ラッチ先生

Actorアクター()クラスの属性 x , y で
boonの x座標、y座標が わかるんだ

Actor()クラスとは?
pythonしよう!08:boon = Actor()の解説
ラッチ先生
ラッチ先生

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

pythonしよう!08:update()関数の解説
ラッチ先生
ラッチ先生

変数targetターゲット_x と 変数targetターゲット_y のデータは
つまり、ターゲットの座標は、boonボーンが到着すると
更新(変わる)するので、グローバル宣言します

Python
def update():
    global target_x, target_y
pythonしよう!08:target_x, target_yのグローバル宣言
Python
    if boon.x == target_x and boon.y == target_y:
        target_x = random.randint(50, 750)
        target_y = random.randint(50, 540)
pythonしよう!08:ターゲットの座標がboonの座標と同じになったら
ラッチ先生
ラッチ先生

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

randoint関数
pythonしよう!08:randint関数を解説する
pythonしよう!08:boonのx座標の範囲を解説する
スック
スック

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

ラッチ先生
ラッチ先生

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

スック
スック

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

ラッチ先生
ラッチ先生

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

angle_to( )メゾット
pythonしよう!08:angle_to()メゾットの解説
Python
        boon.angle = boon.angle_to((target_x, target_y))
pythonしよう!08:ボーンの向きをターゲットに向ける
スック
スック

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

angle
pythonしよう!08:angle属性の解説
ラッチ先生
ラッチ先生

そして、
animate()関数を使って、boonを ターゲットへ動かすんだ

Python
        animate(boon, pos=(target_x, target_y), duration = 1.0)        
animate( ) 関数
pythonしよう!08:animate()関数の解説
スック
スック

とっても便利な関数だね

スック
スック

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

今回は、
boonボーンが 1秒かけて ランダムな場所へ行くプログラムを 作りました

ラッチ先生
ラッチ先生
1秒かけていろんな所へ行く
Python
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(オブジェクト)を 変化させる引数が、たくさんあります。

お楽しみにね!

スック
スック

はぁ~い!

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

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

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