40歳から始めるプログラミング

40歳になったおっさんがゲーム作りを目指すブログです。

Python学習とゲーム作り#9

今回はウィンドウに表示した戦車の画像を、プレイヤーキャラとして動かしてみたいと思います。今までのコードとは大きく変わりました。自分なりに解析してみたいと思います。

import pygame
pygame.init()

screen = pygame.display.set_mode((800,600))
screen.fill((255,255,255))

img = pygame.image.load("player.png") #戦車の画像を読み込み 以下プレイヤーとする
playerX,playerY = 290,280 #プレイヤーの初期X座標とY座標 ,で区切れば1行でOK
playerX_change = 0 #プレイヤーのX座標を扱う変数を定義
playerY_change = 0 #プレイヤーのY座標を扱う変数を定義

def player(x,y):   
    screen.blit(img,(x,y))
#defで関数を定義し、 player(x,y)のxとyをscreen.blit(img,(x,y))のxとyに代入する
#以下player(x,y):と入力するだけでscreen.blit(img,(x,y))まで実行される

running = True
while running:
    for event in pygame.event.get():
#今まではfor key ~というようにkeyをオブジェクト名にしていたが、キー入力で.keyがあることが判明したのでeventに変更
        if event.type == pygame.QUIT:
            running = False
    
    if event.type == pygame.KEYDOWN: #キーが押されているとき 
        if event.key == pygame.K_RIGHT: #ここで.keyが登場 右キーが押されたとき
            playerX_change =  1 #プレイヤーのX座標を+1
        if event.key == pygame.K_LEFT: #左キーが押されているとき
            playerX_change = -1 #プレイヤーのX座標を-1
        if event.key == pygame.K_UP: #上キーが押されているとき
            playerY_change = -1 #プレイヤーのY座標を-1
        if event.key == pygame.K_DOWN: #下キーが押されているとき
            playerY_change =  1 #プレイヤーのY座標を+1
    
    if event.type == pygame.KEYUP: #キーが押されていないとき(離す)
        if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
            playerX_change = 0
#プレイヤーの左か右キーが押されていないとき、プレイヤーのX座標の変化を0にする

        if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
            playerY_change = 0
#プレイヤーの上か下キーが押されていないとき、プレイヤーのY座標の変化を0にする

    playerX += playerX_change #プレイヤーのX座標に、上のキー入力状態を反映させる(1か-1)
    playerY += playerY_change #プレイヤーのY座標に、上のキー入力状態を反映させる(1か-1)
    #+=はa+bという意味
 player(playerX,playerY)
#上の方で定義したplayer()関数にプレイヤーのX座標とY座標にplayerX,playerYを反映。プレイヤーが表示される

    pygame.display.update()

実行すると
youtu.be

なんと上下左右斜めに自分で動かすことのできるプレイヤーキャラが表示されました!だけどプレイヤーキャラの残像が黒く残る…?これはどういうことかというと、ウィンドウのデフォルトの色は黒なので、プレイヤーキャラが表示されたところは黒く残るわけですね。ではどうするかというと

while running:
    screen.fill((255,255,255)) #追加
#ここにウィンドウの色を白にするコードを追加。whileの先頭に持ってくることによって、プレイヤーキャラが表示される前に、黒い部分を白で上書できる
  
  for event in pygame.event.get():

これを追加したコードを実行
youtu.be
感動😂 自分の意志で自在に動くプレイヤーキャラが誕生しました!まだ動かすだけでその他は何もできないけど、徐々にできることを増やしていけたらいいなーと思います。初代ドラクエカニ歩きみたいになってるし笑、まずは移動に合わせてキャラの向きを変えたりアニメーションさせたりとか、スピードを変えたりとか、画面外から出ないようにするとか…。今回はここまで!