動き

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

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

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

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

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

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

学習の流れ

コードを 書こう
boonボーンを 斜めに向けて 動かす
上下の端に 触れたら、跳ね返る
左右の端に 触れたら、跳ね返る
プログラムを 実行してみよう
ラッチ先生
ラッチ先生

まずは、
Actorアクター()クラスの属性angleアングルboonボーンを 斜め60°に向けます

Actor()クラスとは?

7. boonボーン = Actorアクター(“boonボーン“, (400, 300))

変数boonボーンには、Actorアクター()クラス(設計図)が 入っています。

pythonしよう!動き05:boon = Actor("boon", (400, 300))の解説

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

Python
boon.angle = 60
ラッチ先生
ラッチ先生

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

数学の「=(イコール)」は、
プログラミングの世界では、「==」と書きます
覚えておいてね!

属性:angle
pythonしよう!動き05:Actor()クラスの属性angleの解説
ラッチ先生
ラッチ先生

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

Python
def update():
    boon.move_forward(5)
スック
スック

あららっ! 消えていったよ

ラッチ先生
ラッチ先生

つぎに、
上下の端に 触れたら 跳ね返るようにします。
boonが 上下の端に触れた時の y座標を確認しましょう

boonボーンの画像は、100px × 100px

スクリーンの上端のy座標は、0

boonボーンが、上端に当たる時のy座標は、50

つまり、
boonボーンが y座標:50 の時に 上壁に当たる

boonが上端に触れたy座標
Python
    if boon.y < 50

つぎに、
スクリーンの下端のy座標は、590(HEIGHTハイト

boonボーンが、下端に触れる時の y座標は

590(HEIGHTハイト)ー 50 = 540

つまり、
boonボーンが y座標:540 の時に 下端に触れる

Python
    if boon.y < 50 or boon.y > HEIGHT - 50:
        boon.angle = -boon.angle
ラッチ先生
ラッチ先生

跳ね返った角度の求め方 『- boonボーン.angleアングル 』について
解説します

上端に 触れて(boon.y < 50)

跳ね返ると boonボーン.angleアングル

boonボーン.angleアングル は、-60° になります
そして、boonボーン.angleアングルに 代入するよ

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

下端に 触れて(boonボーン.y > HEIGHTハイト – 50)

跳ね返ると boonボーン.angleアングル

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 の時に 右壁に触れる

boonが右端に触れたx座標
Python
    if boon.x > WIDTH -50 

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

Python
    if boon.x > WIDTH - 50 or boon.x < 50:
        boon.angle = 180 - boon.angle
ラッチ先生
ラッチ先生

跳ね返った角度の求め方 『180 – boonボーン.angleアングル 』について
解説します

右端に 触れて(boon.x > WIDTH – 50)

跳ね返ると boonボーン.angleアングルは、

boonボーン.angleアングルは、240° になります
そして、boonボーン.angleアングルに 240を 代入するよ

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

左端に 触れて(boon.x < 50)

 跳ね返ると boonボーン.angleアングル

boonボーン.angleアングルは、420° になります
そして、boonボーン.angleアングルに 420°を 代入するよ

これで、boonボーンが 左端に触れると 角度が 420°に なって 進みます

ラッチ先生
ラッチ先生

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

スック
スック

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

スック
スック

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

今回は、
boonボーンが 斜めに動き続けるプログラムを 作りました

ラッチ先生
ラッチ先生
boonが 斜めに 動き続ける
Python
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を 動かしてみよう!

スック
スック

はぁ~い!

ABOUT ME
ラッチ先生
ラッチ先生
こんにちは!「Pythonしよう!楽しく学べるプログラミング教室」の学長、ラッチです。 scratchのように楽しく学べるPython講座です。 ・図やアニメーションを使って、わかりやすく楽しく学べる! ・毎回の授業が新しい発見の連続! ・プログラミングの考え方が身につき、自分のやりたいことが形にできるように。 この3点をモットーにサイトを立ち上げました。 よろしくお願いします
記事URLをコピーしました