誰でもこれで私を助けることができますか?ボールがパドルに当たったかどうかを検出し、rect_change_y 変数を変更してバウンドさせる簡単な方法を作成するのに問題があります。これは機能するコードですが、ボールがゲームの底に当たったときにパドルまたはダイと相互作用しません。
import pygame
black = ( 0, 0, 0)
white = ( 255, 255, 255)
green = ( 0, 255, 0)
red = ( 255, 0, 0)
rect_x = 10
rect_y = 250
pad_x = 350
pad_y = 480
ball = 3
rect_change_x = 1
rect_change_y = 1
pad_x_c = 0
pygame.init()
size=[700,500]
screen=pygame.display.set_mode(size)
pygame.mouse.set_visible(0)
pygame.display.set_caption("Breakout Recreation WIP")
done=False
clock=pygame.time.Clock()
# -------- Main Program Loop -----------
while ball != 0:
# ALL EVENT PROCESSING SHOULD GO BELOW THIS COMMENT
for event in pygame.event.get(): # User did something
if event.type == pygame.QUIT: # If user clicked close
done=True # Flag that we are done so we exit this loop
keys = pygame.key.get_pressed() #checking pressed keys
if keys[pygame.K_LEFT]:
pad_x_c -= 2
elif keys[pygame.K_RIGHT]:
pad_x_c += 2
else :
pad_x_c = 0
# ALL EVENT PROCESSING SHOULD GO ABOVE THIS COMMENT
# ALL GAME LOGIC SHOULD GO BELOW THIS COMMENT
# ALL GAME LOGIC SHOULD GO ABOVE THIS COMMENT
# ALL CODE TO DRAW SHOULD GO BELOW THIS COMMENT
# First, clear the screen to white. Don't put other drawing commands
# above this, or they will be erased with this command.
screen.fill(black)
# Draw the rectangle
pygame.draw.rect(screen,white,[rect_x,rect_y,15,15])
pygame.draw.rect(screen,white,[pad_x,pad_y,50,10])
# Move the rectangle starting point
rect_x += rect_change_x
rect_y += rect_change_y
pad_x += pad_x_c
# Bounce the ball if needed
if rect_y > 480 or rect_y < 10:
rect_change_y = rect_change_y * -1
if rect_x > 680 or rect_x < 5:
rect_change_x = rect_change_x * -1
if pad_x <= 5 :
pad_x_c = 0
if pad_x >= 645 :
pad_x_c = 0
# ALL CODE TO DRAW SHOULD GO ABOVE THIS COMMENT
pygame.display.flip()
clock.tick(100)
pygame.quit ()
そして、ここに(私にとって)機能するはずのコードがありますが、機能しません。
import pygame
black = ( 0, 0, 0)
white = ( 255, 255, 255)
green = ( 0, 255, 0)
red = ( 255, 0, 0)
rect_x = 10
rect_y = 250
pad_x = 350
pad_y = 480
ball = 3
rect_change_x = 1
rect_change_y = 1
pad_x_c = 0
pygame.init()
size=[700,500]
screen=pygame.display.set_mode(size)
pygame.mouse.set_visible(0)
pygame.display.set_caption("Breakout Recreation WIP")
done=False
clock=pygame.time.Clock()
# -------- Main Program Loop -----------
while ball != 0:
# ALL EVENT PROCESSING SHOULD GO BELOW THIS COMMENT
for event in pygame.event.get(): # User did something
if event.type == pygame.QUIT: # If user clicked close
done=True # Flag that we are done so we exit this loop
keys = pygame.key.get_pressed() #checking pressed keys
if keys[pygame.K_LEFT]:
pad_x_c -= 2
elif keys[pygame.K_RIGHT]:
pad_x_c += 2
else :
pad_x_c = 0
# ALL EVENT PROCESSING SHOULD GO ABOVE THIS COMMENT
# ALL GAME LOGIC SHOULD GO BELOW THIS COMMENT
# ALL GAME LOGIC SHOULD GO ABOVE THIS COMMENT
# ALL CODE TO DRAW SHOULD GO BELOW THIS COMMENT
# First, clear the screen to white. Don't put other drawing commands
# above this, or they will be erased with this command.
screen.fill(black)
# Draw the rectangle
pygame.draw.rect(screen,white,[rect_x,rect_y,15,15])
pygame.draw.rect(screen,white,[pad_x,pad_y,50,10])
# Move the rectangle starting point
rect_x += rect_change_x
rect_y += rect_change_y
pad_x += pad_x_c
# Bounce the ball if needed
if rect_y == pad_y:
if rect_x == pad_x:
rect_change_y = rect_change_y * -1
if rect_y > 490:
ball -= 1
rect_y = 250
rect_x = 10
rect_change_x = 1
rect_change_y = 1
if rect_y < 10:
rect_change_y = rect_change_y * -1
if rect_x > 680 or rect_x < 5:
rect_change_x = rect_change_x * -1
if pad_x <= 5 :
pad_x_c = 0
if pad_x >= 645 :
pad_x_c = 0
# ALL CODE TO DRAW SHOULD GO ABOVE THIS COMMENT
pygame.display.flip()
clock.tick(100)
pygame.quit ()
最後に、ボールの代わりにブロックを破壊することを除いて、ブロックを作成して同じことを行う方法について何か提案はありますか?
みんな、ありがとう!