非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Pythonで2Dゲームを作る(3) ボールを動かす

   

Python/Pygameでボールが壁にあたって跳ね返る動きをさせてみようと思います。

作ったものは下記の通り動画にしています。ボールが画面の4方の壁にあたったら跳ね返ります。

 

下図は跳ね返った時の方向を表しています。

最初にボールは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]

スポンサーリンク

 - Python