Advertisement
shh_algo_PY

Ping-Pong Game Final

Jan 12th, 2023 (edited)
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.31 KB | None | 0 0
  1. from pygame import *
  2.  
  3. class GameSprite(sprite.Sprite):
  4.     def __init__(self, player_image, player_x, player_y, player_speed, width, height):
  5.         super().__init__()
  6.         self.image = transform.scale(image.load(player_image), (width, height))
  7.         self.speed = player_speed
  8.         self.rect = self.image.get_rect()
  9.         self.rect.x = player_x
  10.         self.rect.y = player_y
  11.  
  12.     def reset(self):
  13.         window.blit(self.image, (self.rect.x, self.rect.y))
  14.  
  15. class Player(GameSprite):
  16.     def update_r(self):
  17.         keys = key.get_pressed()
  18.         if keys[K_UP] and self.rect.y > 5:
  19.             self.rect.y -= self.speed
  20.         if keys[K_DOWN] and self.rect.y < win_height - 80:
  21.             self.rect.y += self.speed
  22.     def update_l(self):
  23.         keys = key.get_pressed()
  24.         if keys[K_w] and self.rect.y > 5:
  25.             self.rect.y -= self.speed
  26.         if keys[K_s] and self.rect.y < win_height - 80:
  27.             self.rect.y += self.speed
  28.  
  29. # Background color (background - light blue in example)
  30. back = (100, 255, 255)
  31.  
  32. win_width = 600
  33. win_height = 500
  34.  
  35. window = display.set_mode((win_width, win_height))
  36. display.set_caption("The name of your game")
  37. window.fill(back)
  38.  
  39. # Flags responsible for game state
  40. game = True
  41. finish = False
  42. clock = time.Clock()
  43. FPS = 60
  44.  
  45. # Creating ball and paddles - Update the player_image with your file name
  46. # Inside the bracket: player_image, player_x, player_y, player_speed, width, height  
  47. # You may change the size of your characters in the last two numbers
  48. racket1 = Player('your_picture.png', 30, 200, 4, 50, 150)
  49. racket2 = Player('your_picture.png', 520, 200, 4, 50, 150)
  50. ball = GameSprite('your_picture.png', 200, 200, 4, 50, 50)
  51.  
  52. font.init()
  53. font = font.SysFont('comicsansms', 40)
  54. lose1 = font.render('PLAYER 2 WINS!', True, (180, 0, 0))
  55. lose2 = font.render('PLAYER 1 WINS!', True, (180, 0, 0))
  56.  
  57. speed_x = 3
  58. speed_y = 3
  59.  
  60. # GAME LOOP
  61. while game:
  62.     for e in event.get():
  63.         if e.type == QUIT:
  64.             game = False
  65.    
  66.     if finish != True:
  67.         window.fill(back)   # Fill the background with colour
  68.        
  69.         racket1.update_l()  # Update the positions of your rackets/ paddles
  70.         racket2.update_r()
  71.        
  72.         ball.rect.x += speed_x  # CONSTANT MOVEMENT OF THE BALL
  73.         ball.rect.y += speed_y
  74.    
  75.         if sprite.collide_rect(racket1, ball) or sprite.collide_rect(racket2, ball):
  76.             speed_x *= -1
  77.             speed_y *= 1
  78.        
  79.         # If the ball reaches screen edges, change its movement direction
  80.         if ball.rect.y > win_height-50 or ball.rect.y < 0:
  81.             speed_y *= -1
  82.    
  83.         # If ball flies behind this paddle, display loss condition for player 1
  84.         # if ball goes beyond the left side of the screen
  85.         if ball.rect.x < 0:
  86.             finish = True
  87.             window.blit(lose1, (150, 225))
  88.             game_over = True
  89.    
  90.         # If the ball flies behind this paddle, display loss condition for player 2
  91.         # If ball goes beyond the right side of the screen
  92.         if ball.rect.x > win_width:
  93.             finish = True
  94.             window.blit(lose2, (150, 225))
  95.             game_over = True
  96.    
  97.         racket1.reset()
  98.         racket2.reset()
  99.         ball.reset()
  100.  
  101.     display.update()
  102.     clock.tick(FPS)
  103.  
  104.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement