I Made A Game In Pycharm And When I finished it it was working fine until last week when i run The game it tells me RuntimeError: SDL compiled with version 2.0.22, linked to 2.24.0 so what is SDL and how do i solve it and why it happens and here is the code Thank You For Reviewing My Code
import pygame
pygame.init()
WIDTH, HEIGHT = 1340, 840
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Pong")
FPS = 60
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
PADDLE_WIDTH, PADDLE_HEIGHT = 20, 100
BALL_RADIUS = 7
SCORE_FONT = pygame.font.SysFont("comicsans", 50)
WINNING_SCORE = 10
class Paddle:
COLOR = WHITE
VEL = 6
def __init__(self, x, y, width, height):
self.x = self.original_x = x
self.y = self.original_y = y
self.width = width
self.height = height
def draw(self, win):
pygame.draw.rect(
win, self.COLOR, (self.x, self.y, self.width, self.height))
def move(self, up=True):
if up:
self.y -= self.VEL
else:
self.y += self.VEL
def reset(self):
self.x = self.original_x
self.y = self.original_y
class Ball:
MAX_VEL = 7
COLOR = WHITE
def __init__(self, x, y, radius):
self.x = self.original_x = x
self.y = self.original_y = y
self.radius = radius
self.x_vel = self.MAX_VEL
self.y_vel = 0
def draw(self, win):
pygame.draw.circle(win, self.COLOR, (self.x, self.y), self.radius)
def move(self):
self.x += self.x_vel
self.y += self.y_vel
def reset(self):
self.x = self.original_x
self.y = self.original_y
self.y_vel = 0
self.x_vel *= -1
def draw(win, paddles, ball, left_score, right_score):
win.fill(BLACK)
left_score_text = SCORE_FONT.render(f"{left_score}", 1, WHITE)
right_score_text = SCORE_FONT.render(f"{right_score}", 1, WHITE)
win.blit(left_score_text, (WIDTH//4 - left_score_text.get_width()//2, 20))
win.blit(right_score_text, (WIDTH * (3/4) -
right_score_text.get_width()//2, 20))
for paddle in paddles:
paddle.draw(win)
for i in range(10, HEIGHT, HEIGHT//20):
if i % 2 == 1:
continue
pygame.draw.rect(win, WHITE, (WIDTH//2 - 5, i, 10, HEIGHT//20))
ball.draw(win)
pygame.display.update()
def handle_collision(ball, left_paddle, right_paddle):
if ball.y + ball.radius >= HEIGHT:
ball.y_vel *= -1
elif ball.y - ball.radius <= 0:
ball.y_vel *= -1
if ball.x_vel < 0:
if ball.y >= left_paddle.y and ball.y <= left_paddle.y + left_paddle.height:
if ball.x - ball.radius <= left_paddle.x + left_paddle.width:
ball.x_vel *= -1
middle_y = left_paddle.y + left_paddle.height / 2
difference_in_y = middle_y - ball.y
reduction_factor = (left_paddle.height / 2) / ball.MAX_VEL
y_vel = difference_in_y / reduction_factor
ball.y_vel = -1 * y_vel
else:
if ball.y >= right_paddle.y and ball.y <= right_paddle.y + right_paddle.height:
if ball.x + ball.radius >= right_paddle.x:
ball.x_vel *= -1
middle_y = right_paddle.y + right_paddle.height / 2
difference_in_y = middle_y - ball.y
reduction_factor = (right_paddle.height / 2) / ball.MAX_VEL
y_vel = difference_in_y / reduction_factor
ball.y_vel = -1 * y_vel
def handle_paddle_movement(keys, left_paddle, right_paddle):
if keys[pygame.K_w] and left_paddle.y - left_paddle.VEL >= 0:
left_paddle.move(up=True)
if keys[pygame.K_s] and left_paddle.y + left_paddle.VEL + left_paddle.height <=
HEIGHT:
left_paddle.move(up=False)
if keys[pygame.K_UP] and right_paddle.y - right_paddle.VEL >= 0:
right_paddle.move(up=True)
if keys[pygame.K_DOWN] and right_paddle.y + right_paddle.VEL + right_paddle.height <=
HEIGHT:
right_paddle.move(up=False)
def main():
run = True
clock = pygame.time.Clock()
left_paddle = Paddle(10, HEIGHT//2 - PADDLE_HEIGHT //
2, PADDLE_WIDTH, PADDLE_HEIGHT)
right_paddle = Paddle(WIDTH - 10 - PADDLE_WIDTH, HEIGHT //
2 - PADDLE_HEIGHT//2, PADDLE_WIDTH, PADDLE_HEIGHT)
ball = Ball(WIDTH // 2, HEIGHT // 2, BALL_RADIUS)
left_score = 0
right_score = 0
while run:
clock.tick(FPS)
draw(WIN, [left_paddle, right_paddle], ball, left_score, right_score)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
break
keys = pygame.key.get_pressed()
handle_paddle_movement(keys, left_paddle, right_paddle)
ball.move()
handle_collision(ball, left_paddle, right_paddle)
if ball.x < 0:
right_score += 1
ball.reset()
elif ball.x > WIDTH:
left_score += 1
ball.reset()
won = False
if left_score >= WINNING_SCORE:
won = True
win_text = "Left Player Won!"
elif right_score >= WINNING_SCORE:
won = True
win_text = "Right Player Won!"
if won:
text = SCORE_FONT.render(win_text, 1, WHITE)
WIN.blit(text, (WIDTH//2 - text.get_width() //
2, HEIGHT//2 - text.get_height()//2))
pygame.display.update()
pygame.time.delay(5000)
ball.reset()
left_paddle.reset()
right_paddle.reset()
left_score = 0
right_score = 0
pygame.quit()
if __name__ == '__main__':
main()