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

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


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

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



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

学習の流れ
プログラミングの仕方を説明します
コードを 書こう
boonを 動かす

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

def update():
boon.move_forward(5)

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

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

7. boon = Actor(“boon“, (400, 300))
変数boonには、Actor()クラス(設計図)が 入っています。

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


あれっ? boonは、動いたけど 消えていったよ…
左右の端に 触れたら 跳ね返る

つぎに、
左右の端に 触れたら 跳ね返るようにします。
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



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


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

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

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

① boonが 左に動いている時は boon.angleは 180°
左端に 触れて(boon.x < 50)

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

左右の端の跳ね返り角度は、180-boon.angleを 覚えておこう!
左に動く boonの逆さを 直す

最後に、
左に動くboonの逆さを flip_y(属性)で上下反転させよう

boon.flip_y = not boon.flip_y

Actor( )クラスの flip_yには、最初から「False」が 入っています。
つまり、
boonが 表示されて右側に 動いている時
boon.flip_y は、「False」

右端に触れて
2、boon.angle は、180° になる

3、not boon.flip_y
「not」は、
「False(偽)」 ⇔ 「True(真)」
切り替えスイッチ
boon.flip_y に 「True」が 代入され
boonの画像が 上下反転され
boonの逆さが 直ります


boonが 左に動いている時
boon.flip_y は 「True」

左端に 触れたら
② boon.angle は 0° に なる

③ not boon.flip_y
「not」は、
「False(偽)」 ⇔ 「True(真)」
切り替えスイッチ
boon.flip_y に 「False」が 代入され
boonの画像が 上下反転され
boonの逆さが 直ります

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

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

左右の端の跳ね返り
・跳ね返る角度:180 – boon.angle
・上下反転:not boon.flip_y
この2つを 覚えておこうね!

はぁ~い!