【Pygame Zero】キャラクターが 斜めに動き続ける

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


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

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


学習の流れ
コードを 書こう

まずは、
Actor()クラスの属性angleで boonを 斜め60°に向けます
Actor()クラスは、キャラクターを作る設計図です。
7. boon = Actor(“boon“, (400, 300))
変数boonには、Actor()クラス(設計図)が 入っています。

Actor()クラスに入っている
・ angle(キャラクターの向き)
・ move_forward (キャラクターを 動かす)
・ x (キャラクターの x座標)
・ y (キャラクターの y座標)
属性(データ)と メゾットを 「.(ドット)」を付けて 使います
boon.angle = 60

オブジェクトとは…
設計図(クラス)で 作り出されたもの
・ キャラクター
・ キーボード
・ 背景 など
boonオブジェクト

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


プログラミングの世界では、
「=」は、代入する。
つまり、
boon.angleに、「60(データ)」を 代入する と言うこと
数学の「=(イコール)」と 違うからね
数学の「=(イコール)」は、
プログラミングの世界では、「==」と書きます
覚えておいてね!


そして、
boonを動かすプログラムは、「def update():」関数で 作ろう

def update():
boon.move_forward(5)


あららっ! 消えていったよ
上下の端に 触れたら 跳ね返る

つぎに、
上下の端に 触れたら 跳ね返るようにします。
boonが 上下の端に触れた時の y座標を確認しましょう
boonの画像は、100px × 100px
スクリーンの上端のy座標は、0
boonが、上端に当たる時のy座標は、50
つまり、
boonが y座標:50 の時に 上壁に当たる


if boon.y < 50

つぎに、
スクリーンの下端のy座標は、590(HEIGHT)
boonが、下端に触れる時の y座標は
590(HEIGHT)ー 50 = 540
つまり、
boonが y座標:540 の時に 下端に触れる

if boon.y < 50 or boon.y > HEIGHT - 50:
boon.angle = -boon.angle



跳ね返った角度の求め方 『- boon.angle 』について
解説します
① boonが angle 60° 斜めで動く
上端に 触れて(boon.y < 50)

跳ね返ると boon.angle は
② -1 × boon.angle (60) = -60°
boon.angle は、-60° になります
そして、boon.angleに 代入するよ
③ boon.angle = -60

これで、boonは 上端に触れると 角度が-60°に なって進みます

① boonが angle -120° 斜めで動く
下端に 触れて(boon.y > HEIGHT – 50)

跳ね返ると boon.angle は
② -1 × boon.angle(-120)= 120°
boon.angleは、120°になります。
そして、boon.angleに 120°を 代入するよ
③ boon.angle = 120(-boon.angle(120))
これで、boonが下端に触れると 角度が 120°になって 進みます

上下に跳ね返る時は、-angleに なるんだね
左右の端に 触れたら 跳ね返る

つぎに、
左右の端に 触れたら 跳ね返るようにします。
boonが 左右の端に触れた時の x座標を確認しましょう
boonの画像は、100px × 100px
スクリーンの右端のx座標は、800(WIDTH)
boonが、右端に触れる時のx座標は、
800(WIDTH)ー 50 = 750
つまり、
boonが x座標:750 の時に 右壁に触れる


if boon.x > WIDTH -50

つぎに、boonが 右端に触れる x座標は、50です

if boon.x > WIDTH - 50 or boon.x < 50:
boon.angle = 180 - boon.angle



跳ね返った角度の求め方 『180 – boon.angle 』について
解説します
① boonが angle ‐60° で 動く
右端に 触れて(boon.x > WIDTH – 50)

跳ね返ると boon.angleは、
② 180 – boon.angle(-60)= 240°
boon.angleは、240° になります
そして、boon.angleに 240を 代入するよ
③ boon.angle = 240

これで、boonは 右端に触れると 角度が240°に なって 進みます

① boonが boon.angleは -240°で 動く
左端に 触れて(boon.x < 50)

跳ね返ると boon.angleは
② 180 – boon.angle (-240) = 420°
boon.angleは、420° になります
そして、boon.angleに 420°を 代入するよ
③ boon.angle = 420(180 – boon.angle(-240))
これで、boonが 左端に触れると 角度が 420°に なって 進みます

計算では、420°となりますが、
420°は、60°(420-360=60)です
-240°は、120°だよ

角度は、ややこしいなぁ…

これで、今回の学習は終了! おつかれさま
まとめ
今回は、
boonが 斜めに動き続けるプログラムを 作りました

import pgzrun
from pgzhelper import *
WIDTH = 800
HEIGHT = 590
boon = Actor("boon", (400, 300))
boon.angle = 60
def draw():
screen.fill("white")
boon.draw()
def update():
boon.move_forward(5)
if boon.y < 50 or boon.y > HEIGHT - 50:
boon.angle = -boon.angle
if boon.x < 50 or boon.x > WIDTH - 50:
boon.angle = 180 - boon.angle
pgzrun.go()

boon.angleに 好きな角度を入れて boonを 動かしてみよう!

はぁ~い!