Pythonで2Dゲームを作る(3) ボールを動かす
Python/Pygameでボールが壁にあたって跳ね返る動きをさせてみようと思います。
作ったものは下記の通り動画にしています。ボールが画面の4方の壁にあたったら跳ね返ります。
https://youtu.be/ylB60Uo5BU0
下図は跳ね返った時の方向を表しています。
最初にボールはX、Yともに正の方向に動いていますが、下の壁にあたると、Y方向のみ負の方向に変わります。更に右壁にあたってXが負に、今度は上の壁にあたってYが正に戻ります。
下表がそれをまとめたもので、左端がボールが入ってくる方向で、右4つが各壁に当たった時の方向を示しています。
INPUT | 下壁 | 上壁 | 右壁 | 左壁 |
---|---|---|---|---|
(1,1) | (1,-1) | – | (-1,1) | – |
(-1,1) | (1,-1) | – | – | (1,1) |
(1,-1) | – | (1,1) | (-1,-1) | – |
(-1,-1) | – | (-1,1) | – | (1,-1) |
[ad#top-1]
これをソースコードに起こすと下記の通りになります。各壁に当たったらボールの進む方向を変えてあげればいいわけですね。
if(y_ball>=480): vector_y = -5 #下壁に当たったら if(y_ball<=0): vector_y = 5 #上壁に当たったら if(x_ball>=700): vector_x = -5 #右壁に当たったら if(x_ball<=0): vector_x = 5 #左壁に当たったら x_ball += vector_x y_ball += vector_y pygame.draw.circle(screen, WHITE, (x_ball, y_ball), 10)
ソースコード全文はこちら
import pygame BLACK = (0, 0, 0) RED = (255, 0, 0) WHITE = (255, 255, 255) pygame.init() screen = pygame.display.set_mode((700, 480)) myclock = pygame.time.Clock() flag=0 x_paddle=250 x_ball = 10 y_ball = 10 vector_x = 5 vector_y = 5 while flag==0: for event in pygame.event.get(): if event.type==pygame.QUIT: flag=1 press = pygame.key.get_pressed() if(press[pygame.K_LEFT] and x_paddle>0): x_paddle-=5 if(press[pygame.K_RIGHT] and x_paddle<600): x_paddle+=5 screen.fill(BLACK) #ボールを描画 if(y_ball>=480): vector_y = -5 if(y_ball<=0): vector_y = 5 if(x_ball>=700): vector_x = -5 if(x_ball<=0): vector_x = 5 x_ball += vector_x y_ball += vector_y pygame.draw.circle(screen, WHITE, (x_ball, y_ball), 10) pygame.display.flip() myclock.tick(60) pygame.quit()
[ad#ad-1]
スポンサーリンク