Мне нужно получить черную дыру посередине, чтобы она могла столкнуться с мячом и закончить игру, но я не уверен, как это сделать.
Пробовал несколько вещей в прошлом,но я забыл, что делать, я возвращаюсь к этой задаче в конце года.
Я ожидаю, что мяч столкнется с отверстием и закроет или заморозит игру, чтобы показать, что она закончилась.
Несколько месяцев назад я пробовал несколько вещей, но возвращаюсь кэто задание в конце года, и ему нужна помощь в его завершении.
import random
import sys
import pygame
hole = pygame.image.load('hole.png')
class Paddle(pygame.Rect):
def __init__(self, velocity, up_key, down_key, *args, **kwargs):
self.velocity = velocity
self.up_key = up_key
self.down_key = down_key
super().__init__(*args, **kwargs)
def move_paddle(self, board_height):
keys_pressed = pygame.key.get_pressed()
if keys_pressed[self.up_key]:
if self.y - self.velocity > 0:
self.y -= self.velocity
if keys_pressed[self.down_key]:
if self.y + self.velocity < board_height - self.height:
self.y += self.velocity
class Ball(pygame.Rect):
def __init__(self, velocity, *args, **kwargs):
self.velocity = velocity
self.angle = 0
super().__init__(*args, **kwargs)
def move_ball(self):
self.x += self.velocity
self.y += self.angle
class Pong:
HEIGHT = 400
WIDTH = 600
PADDLE_WIDTH = 10
PADDLE_HEIGHT = 100
BALL_WIDTH = 10
BALL_VELOCITY = 10
BALL_ANGLE = 0
COLOUR = (255, 255, 255)
def __init__(self):
pygame.init() # Start the pygame instance.
# Setup the screen
self.screen = pygame.display.set_mode((self.WIDTH, self.HEIGHT))
self.clock = pygame.time.Clock()
# Create the player objects.
self.paddles = []
self.balls = []
self.paddles.append(Paddle( # The left paddle
self.BALL_VELOCITY,
pygame.K_w,
pygame.K_s,
0,
self.HEIGHT / 2 - self.PADDLE_HEIGHT / 2,
self.PADDLE_WIDTH,
self.PADDLE_HEIGHT
))
self.paddles.append(Paddle( # The right paddle
self.BALL_VELOCITY,
pygame.K_UP,
pygame.K_DOWN,
self.WIDTH - self.PADDLE_WIDTH,
self.HEIGHT / 2 - self.PADDLE_HEIGHT / 2,
self.PADDLE_WIDTH,
self.PADDLE_HEIGHT
))
self.balls.append(Ball(
self.BALL_VELOCITY,
self.WIDTH / 2 - self.BALL_WIDTH / 2,
self.HEIGHT / 2 - self.BALL_WIDTH / 2,
self.BALL_WIDTH,
self.BALL_WIDTH
))
self.central_line = pygame.Rect(self.WIDTH/2, 0, 1, self.HEIGHT)
def check_ball_hits_wall(self):
for ball in self.balls:
if ball.x > self.WIDTH or ball.x < 0:
sys.exit(1)
if ball.y > self.HEIGHT - self.BALL_WIDTH or ball.y < 0:
ball.angle = -ball.angle
def check_ball_hits_paddle(self):
for ball in self.balls:
for paddle in self.paddles:
if ball.colliderect(paddle):
ball.velocity = -ball.velocity
ball.angle = random.randint(-10, 10)
break
def game_loop(self):
while True:
for event in pygame.event.get():
# Add some extra ways to exit the game.
if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
return
self.check_ball_hits_paddle()
self.check_ball_hits_wall()
# Redraw the screen.
self.screen.fill((0, 0, 0))
self.screen.blit(hole,(235, 150))
for paddle in self.paddles:
paddle.move_paddle(self.HEIGHT)
pygame.draw.rect(self.screen, self.COLOUR, paddle)
# We know we're not ending the game so lets move the ball here.
for ball in self.balls:
ball.move_ball()
pygame.draw.rect(self.screen, self.COLOUR, ball)
pygame.draw.rect(self.screen, self.COLOUR, self.central_line)
pygame.display.flip()
self.clock.tick(60)
if __name__ == '__main__':
pong = Pong()
pong.game_loop()
Ожидаемый результат состоит в том, что, когда мяч сталкивается с черной дырой в середине, игра заканчивается либо замораживанием, либо закрытием. игра. Черная дыра используется в качестве изображения. named hole.png