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]
スポンサーリンク
