Pygame で Pong クローンを構築しています。ボールとパドルに衝突検出を追加して、ボールがパドルから跳ね返るようにする方法がわかりません。これどうやってするの?ボールがパドルに当たったときにボールを反対方向に移動させるにはどうすればよいですか?
bif="bg.jpg"
import pygame, sys
from pygame.locals import *
pygame.init()
pygame.display.set_caption("Griffin West's Python Pong")
pygame.mixer.init()
sounda= pygame.mixer.Sound("Music.wav")
sounda.play()
screen=pygame.display.set_mode((1280,720),0,32)
background=pygame.image.load(bif).convert()
color1=(255,255,255)
color2=(255,255,0)
color3=(0,0,255)
color4=(0,255,0)
pos1=(640,0)
pos2=(640,720)
pos3=(640,360)
pos4=(0,360)
pos5=(1280,360)
radius=(100)
x1,y1=75,0
x2,y2=1175,0
x3,y3=1,1
clock=pygame.time.Clock()
speedx=750
speedy=750
movex1, movey1=0,0
movex2, movey2=0,0
s1=0
s2=0
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type==KEYDOWN:
if event.key==K_w:
movey1=-2
elif event.key==K_s:
movey1=+2
if event.key==K_UP:
movey2=-2
elif event.key==K_DOWN:
movey2=+2
if event.type==KEYUP:
if event.key==K_w:
movey1=0
elif event.key==K_s:
movey1=0
if event.key==K_UP:
movey2=0
elif event.key==K_DOWN:
movey2=0
x1+=movex1
y1+=movey1
x2+=movex2
y2+=movey2
milli=clock.tick()
seconds=milli/1000.0
dx=seconds*speedx
dy=seconds*speedy
x3+=dx
y3+=dy
if x3>1280:
x3+=-dx # get ball out of the wall
speedx = -speedx # change direction
s1=s1+1
if y3>720:
y3+=-dy
speedy = -speedy
if x3<0:
x3+dx
speedx = -speedx
x3=x3+1
s2=s2+1
if y3<0:
y3=y3+1
y3+=dy
speedy = -speedy
if x3<=y3y3+30:
speedx = -speedy
screen.blit(background, (0,0))
screen.lock()
pygame.draw.line(screen, color1, pos1, pos2, 1)
pygame.draw.circle(screen, color1, pos3, radius, 1)
pygame.draw.circle(screen, color1, pos4, radius, 1)
pygame.draw.circle(screen, color1, pos5, radius, 1)
pygame.draw.rect(screen, color3, Rect((x1,y1),(30,100)))
pygame.draw.rect(screen, color2, Rect((x2,y2),(30,100)))
pygame.draw.circle(screen, color4, (int(x3),int(y3)), 15)
screen.unlock()
myfont = pygame.font.SysFont("Press Start 2P", 50)
myfont2 = pygame.font.SysFont("Press Start 2P", 25)
label = myfont.render("Python", 1, (255,0,0))
screen.blit(label, (494, 115))
label = myfont.render("Pong", 1, (255,0,0))
screen.blit(label, (544, 175))
label = myfont2.render("Player 1: "+str(s1), 1, (255,255,255))
screen.blit(label, (25, 675))
label = myfont2.render("Player 2: "+str(s2), 1, (255,255,255))
screen.blit(label, (950, 675))
pygame.display.update()