見た目

【Pygame Zero】キャラクターを点滅させよう!

ratch2025

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

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

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

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

基礎プログラムと 画像を入れた
「見た目07 boonボーンのねらえ!No.4」zipフォルダを ダウンロードしてください

pythonしよう!見た目07:ボーン・矢印を表示する
pythonしよう!見た目07:boonをねらえ!No.4zipの中身
スック
スック

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

参考記事
【Pygame Zero】スクリーンに画像を 表示させる
【Pygame Zero】スクリーンに画像を 表示させる
スポンサーリンク

矢印をクリックすると 飛び出す

boonが ななめに 動き続ける

点滅する

プログラムを 実行してみよう

ラッチ先生
ラッチ先生

今回の「boonボーンをねらえ!No.4」では、
・ 矢印を クリックする
boonボーンが ななめに動き続ける
boonボーン の明るさを 変える
プログラムが あります

そこで、2つのモジュールを 用意しました

pythonしよう!見た目07:pgzhelperモジュールの解説
pythonしよう!見た目07:visualモジュールの解説
スック
スック

モジュールとは、
関数やプログラムが書かれているファイルのことだよ

ラッチ先生
ラッチ先生

今回のプログラミングには、ポイントが 4つあります

pythonしよう!見た目07:ポイント1の解説
スック
スック

これで、変数boonボーンに「 . (ドット)」を付ければ 使えるよ

pythonしよう!見た目07:ポイント2の解説
スック
スック

明るさ100にすると、見えなくなるよ

pythonしよう!見た目07:ポイント3の解説
スック
スック

それぞれの動きが わかりやすくなるよ

pythonしよう!見た目07:ポイント4の解説
スック
スック

両方 2つに 分けたよ

ラッチ先生
ラッチ先生

最初に、
変数arrowアロー_directionディレクションに 「-1」を代入して、
矢印を 右回りに回転させます

pythonしよう!見た目07:プロパティabgleの解説
Python
arrow.angle = 180
arrow_direction = -1   #1 変数arrow_direction(方向)に -1を 代入する
arrow_state = "rotate" #2 変数arrow_state(状態)に "rotate(回転)"を 代入する
Python
def arrow_move():      #3 矢印の動きを まとめる
    global arrow_state, arrow_direction  #4 グローバル変数

    if arrow_state == "rotate":        #5 もし、変数arrow_stateが ”rotate(回転)" だったら         
        arrow.angle += arrow_direction #6 矢印の向きを 変数arrow_direction ずつ触れる
Python
def update():     #7 更新する
    arrow_move()  #8 矢印の動きを 動かす
スック
スック

あららっ⁉ 回転しすぎ…

ラッチ先生
ラッチ先生

だいじょうぶ!

変数arrowアロー_directionディレクション に、「-1」をかけることによって
矢印の方向を 反転させよう

Python
def arrow_move(): 
    global arrow_state, arrow_direction, boon_state, count 

    if arrow_state == "rotate":         
        arrow.angle += arrow_direction  

        if arrow.angle < 90 or arrow.angle > 180: #1 もし、矢印の向き 90度未満 または、 180以上なら
            arrow_direction = -arrow_direction #2 -(arrow_direction) を 変数arrow_directionに 代入する
スック
スック

-(arrowアロー_directionディレクション) とは、-1 × arrowアロー_directionディレクション だよ

ラッチ先生
ラッチ先生

つぎは、
collideコライドpointポイント_pixelピクセル( ) メゾットを使って
クリックしたら 矢印が 飛ぶようにしよう

pythonしよう!見た目07:collidepoint_pixel()メゾットの解説
Python
def on_mouse_down(pos):   #1 クリックした座標(pos)を取得する
    global arrow_state    #2 グローバル変数:arrow_state

    if arrow_state == "rotate" and arrow.collidepoint_pixel(pos): #3 もし、変数arrow_stateが "rotate(回転)で、矢印をくりっくしたら
        arrow_state = "fly"  #4 変数arrow_stateに "fly"を代入する
ラッチ先生
ラッチ先生

moveムーヴ_forwardフォワード( )メゾットを使って
矢印を 飛ばしましょう

そして、端に触れたら 元の場所で また回転させるよ

Python
def arrow_move(): 
    global arrow_state, arrow_direction, boon_state, count 

    if arrow_state == "rotate":         
        arrow.angle += arrow_direction  

        if arrow.angle < 90 or arrow.angle > 180: 
            arrow_direction = -arrow_direction

    elif arrow_state == "fly":   #1 もし、変数arrow_stateが "fly"になったら
        arrow.move_forward(20)   #2 矢印を 20pxずつ動かす

        if arrow.x < 0 or arrow.y < 0:  #3 もし、矢印のx座標が 0未満、または、y座標が 0未満だったら
            arrow.pos = 700, 500   #4 矢印の座標を (700, 500)      
            arrow_state = "rotate" #5 変数arrow_stateに "rotate"を代入する
スック
スック

変数rotateロテイト_stateステートに “rotateロテイト“と代入するだけで、
また、矢印は、回転し始めたね

ラッチ先生
ラッチ先生

moveムーヴ_forwardフォワード( ) メゾットを使って
boonボーンを 動かしましょう

pythonしよう!見た目07:move_forward()メゾットの解説
Python
def boon_move():       #1 boonの動きをまとめる
    global boon_state  #2 グローバル変数:boon_state 

    if boon_state == "move":   #3 もし、変数boon_stateが "move"なら   
        boon.move_forward(10)  #4 10pxずつ動く

        if boon.x > WIDTH-50 or boon.x < 50: #5 boonのx座標が 750px以上 または、 boonのx座標が 50px以下なら
            boon.angle = 180 - boon.angle #6 boonの向きに 180-boonの向き の角度を代入する
            boon.flip_y = not boon.flip_y #7 boonの上下を反転する

        elif boon.y < 50 or boon.y > HEIGHT-50: #8 boonのy座標が 50px以下 または boonのy座標が 540px以上なら
            boon.angle = -boon.angle #9 boonの向きに -(boonの向き)の角度を代入する

def update(): 
    arrow_move() 
    boon_move() #10 boonを 動かす
pythonしよう!見た目07:左右の壁と上下の壁の跳ね返りの角度の解説
pythonしよう!見た目07:プロパティflip_yの解説
スック
スック

not を 使った not boonボーン.flipフリップ_y は、
Trueトゥルー』⇔ 『Falseフォルス』の切り替えスイッチになるよ

ラッチ先生
ラッチ先生

まず、
setセット_brightnessブライトネス()メゾットを使って
boonボーンを点滅させる関数を 作りましょう

pythonしよう!見た目07:おイント2の解説
Python
def boon_flash():             #1 boonの点滅を まとめる
    global count, boon_state  #2 グローバル変数 count, boon_state

    if count < 10:            #3 もし、変数countが 10未満だったら
        boon.set_brightness(50 * ((-1)**count)) #4 boonの明るさを 50, -50 に する
        count += 1            #5 変数countの数値を 1ずつ増やす
        clock.schedule_unique(boon_flash, 0.1) #6 0.1秒後に boon_flash関数を 実行する

    else:                      #7 それ以外(変数countが 10以上だったら
        boon.set_brightness(0) #8 boonの明るさを 元に戻す
        boon_state = "move"    #9 変数boon_stateに "move"を 代入する 
pythonしよう!見た目07:boonの点滅の解説
pythonしよう!見た目07:演算子**の解説
スック
スック

これは、便利だね!

ラッチ先生
ラッチ先生

それでは、
矢印がboonボーンに当たった時に
boonボーン_flashフラッシュ()関数を 実行させましょう

Python
boon = VisualEffect("boon", (400, 300)) #1 ビジュアルエフェクトに変える
Python
def draw():
    screen.fill("white")
    boon.draw(screen)  #2 ビジュアルエフェクトが 使える
    arrow.draw()
pythonしよう!見た目07:ポイント1の解説
Python
def arrow_move(): 
    global arrow_state, arrow_direction, boon_state, count #1 グローバル変数 boon_state, count
Python
    elif arrow_state == "fly": 
        arrow.move_forward(20) 

        if arrow.x < 0 or arrow.y < 0: 
            arrow.pos = 700, 500       
            arrow_state = "rotate"

        elif arrow.collide_pixel(boon) and boon_state == "move": #2 もし、boonに当たったら、そして、 変数boon_stateが "move"なら 
            boon_state = "hit" #3 変数boon_stateに "hit"を 代入する
            count = 0    #4 変数count 初期値:0
            boon_flash() #5 boon_flash()関数を 実行する
スック
スック

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

ラッチ先生
ラッチ先生

今回は、
矢印に当たると boonボーンが点滅するプログラムを 作りました。

boonをねらえ!No.4
Python
import pgzrun
from pgzhelper import *
from visual import VisualEffect

WIDTH = 800
HEIGHT = 590

boon = VisualEffect("boon", (400, 300))
arrow = Actor("arrow", (700, 500))

arrow.angle = 180    
arrow_direction = -1 
arrow_state = "rotate" 

boon_state = "move" 
boon.angle = 40 

def draw():
    screen.fill("white")
    boon.draw(screen)
    arrow.draw()

def arrow_move(): 
    global arrow_state, arrow_direction, boon_state, count 

    if arrow_state == "rotate":         
        arrow.angle += arrow_direction  

        if arrow.angle < 90 or arrow.angle > 180: 
            arrow_direction = -arrow_direction

    elif arrow_state == "fly": 
        arrow.move_forward(20) 

        if arrow.x < 0 or arrow.y < 0: 
            arrow.pos = 700, 500       
            arrow_state = "rotate"

        elif arrow.collide_pixel(boon) and boon_state == "move": 
            boon_state = "hit"
            count = 0
            boon_flash() 

def boon_flash(): 
    global count, boon_state

    if count < 10:
        boon.set_brightness(50 * ((-1)**count))
        count += 1
        clock.schedule_unique(boon_flash, 0.1) #4-6 光らせる

    else:
        boon.set_brightness(0)
        boon_state = "move"   

def boon_move(): 
    global boon_state 

    if boon_state == "move":   
        boon.move_forward(10)  

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

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

def update(): 
    arrow_move() 
    boon_move()

def on_mouse_down(pos): 
    global arrow_state 

    if arrow_state == "rotate" and arrow.collidepoint_pixel(pos):
        arrow_state = "fly" 

pgzrun.go()
ラッチ先生
ラッチ先生

キャラクターの見た目を 変えるVisualEffectビジュアルエフェクト( )を使って、
boonボーンの 明るさを 変えるプログラムを作りました。

pythonしよう!見た目07:visualモジュールの解説
ラッチ先生
ラッチ先生

キャラクターの明るさを変えるプログラムを作る手順です。

pythonしよう!見た目07:ポイント1の解説
pythonしよう!見た目07:ポイント2の解説
ラッチ先生
ラッチ先生

点滅させる関数だよ

Python
def boon_flash():             #1 boonの点滅を まとめる
    global count, boon_state  #2 グローバル変数 count, boon_state

    if count < 10:            #3 もし、変数countが 10未満だったら
        boon.set_brightness(50 * ((-1)**count)) #4 boonの明るさを 50, -50 に する
        count += 1            #5 変数countの数値を 1ずつ増やす
        clock.schedule_unique(boon_flash, 0.1) #6 0.1秒後に boon_flash関数を 実行する

    else:                      #7 それ以外(変数countが 10以上だったら
        boon.set_brightness(0) #8 boonの明るさを 元に戻す
        boon_state = "move"    #9 変数boon_stateに "move"を 代入する 
スック
スック

みんなも試してみてね
それじゃ、またね!

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

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

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