Advertisement
Mary_99

Pong Game

Dec 15th, 2018
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.63 KB | None | 0 0
  1. import pygame
  2. import sys
  3. import random
  4. import time
  5.  
  6. black = (0, 0, 0)
  7. white = (255, 255, 255)
  8. pink = (244, 121, 131)
  9.  
  10. pygame.init()
  11.  
  12. screen = pygame.display.set_mode((720, 480))
  13. window = screen.get_rect()
  14.  
  15. # variables to defind player palette
  16. player_x = 50
  17. player_y = 90
  18. player_size = 30
  19. # połozenie i wymiary paletki
  20. player = pygame.Rect(player_x, player_y, player_size, player_size*2.5)
  21. player.center = (player_x+(player_size/2), player_y+(player_size/2))
  22.  
  23. opponent = pygame.Rect(window.right-player_x-player_size, player_y, player_size, player_size*2.5)
  24. opponent.center = (window.right-player_x-player_size+(player_size/2), player_y+(player_size/2))
  25.  
  26. ball = pygame.Rect(window.centerx, window.centery, player_size, player_size)
  27. ball.center = window.center
  28.  
  29. step = 15
  30. vec = [1, 2]
  31. # losowanie wektora by rozgrywka za kazdym razem wyglądała inaczej
  32. if random.randint(1, 2) == 1:
  33.     vec[0] = random.randint(2, 4)*-1
  34.     vec[1] = random.randint(2, 4)
  35. else:
  36.     vec[0] = random.randint(2, 4)
  37.     vec[1] = random.randint(2, 4)*-1
  38.  
  39. playerPoints = 0
  40. opponentPoints = 0
  41.  
  42. fps = pygame.time.Clock()
  43. pygame.key.set_repeat(50, 50)
  44.  
  45.  
  46. # blokowanie boków piłeczki
  47. def checkScore():
  48.     if ball.left < window.left:
  49.         ball.left = window.left
  50.     if ball.right > window.right:
  51.         ball.right = window.right
  52.  
  53.  
  54. # kolizja z bokami okna
  55. def playerBorderCollision():
  56.     if player.top < window.top:
  57.         player.top = window.top
  58.     if player.bottom > window.bottom:
  59.         player.bottom = window.bottom
  60.     if opponent.top < window.top:
  61.         opponent.top = window.top
  62.     if opponent.bottom > window.bottom:
  63.         opponent.bottom = window.bottom
  64.  
  65.  
  66. # kolizja z paletkami
  67. def checkCollision():
  68.     global vec
  69.     if(ball.colliderect(player) or ball.colliderect(opponent)):
  70.         vec[0] = vec[0]*1.2  # przyspieszanie piłeczki po odbicu od paletki
  71.         return 1
  72.     return 0
  73.  
  74.  
  75. # dodawanie punktow, reset pileczki
  76. def checkScore():
  77.     global opponentPoints, playerPoints
  78.     if(ball.right > window.right):
  79.         playerPoints += 1
  80.         resetBall()
  81.     if(ball.left < window.left):
  82.         opponentPoints += 1
  83.         resetBall()
  84.  
  85.  
  86. # reset pilki po zdobyciu punktu
  87. def resetBall():
  88.     global ball, vec
  89.     ball.x = window.centerx
  90.     ball.y = window.centery
  91.     if random.randint(1, 2) == 1:
  92.         vec[0] = random.randint(2, 4)*-1
  93.         vec[1] = random.randint(2, 4)
  94.     else:
  95.         vec[0] = random.randint(2, 4)
  96.         vec[1] = random.randint(2, 4)*-1
  97.  
  98.  
  99. # wyswietlanie
  100. def display():
  101.     myfont = pygame.font.Font('freesansbold.ttf', 20)
  102.     msg = myfont.render(str(playerPoints)+"    The Pong Game :)    "+str(opponentPoints), True, pink, (10, 10))
  103.     msg_box = msg.get_rect()
  104.     msg_box.y = 10
  105.     msg_box.x = (window.width-msg_box.width)/2
  106.     screen.fill(black)
  107.     screen.blit(msg, msg_box)  # pink text pygame
  108.     pygame.draw.rect(screen, white, player)
  109.     pygame.draw.rect(screen, white, opponent)
  110.     pygame.draw.rect(screen, pink, ball)
  111.     pygame.display.flip()
  112.  
  113.  
  114. while True:
  115.     # obsluga klawiszy
  116.     for event in pygame.event.get():
  117.         if event.type == pygame.QUIT:
  118.             sys.exit()
  119.         if event.type == pygame.KEYDOWN:
  120.             if event.key == pygame.K_DOWN:
  121.                 player = player.move(0, step)
  122.             if event.key == pygame.K_UP:
  123.                 player = player.move(0, -step)
  124.  
  125.     # ruch piłeczki
  126.     ball = ball.move(vec)
  127.     if ball.top < window.top or ball.bottom > window.bottom:
  128.         vec[1] = -vec[1]
  129.  
  130.     # ruch oponenta
  131.     distance = (ball.top - (opponent.height/2) - opponent.top)
  132.     if(ball.x >= window.centerx):
  133.         if(( (distance >= 0) and (vec[1] < 0) ) or ( (distance <= 0) and (vec[1] > 0) )):
  134.             opponent = opponent.move([0, -vec[1]/2])
  135.         elif(( (distance >= 0) and (vec[1] > 0) ) or ( (distance <= 0) and (vec[1] < 0) )):
  136.             opponent = opponent.move([0, vec[1]/2])
  137.     if(ball.x >= (window.centerx * 3 / 2)):
  138.         if(( (distance >= 0) and (vec[1] < 0) ) or ( (distance <= 0) and (vec[1] > 0) )):
  139.             opponent = opponent.move([0, -vec[1]])
  140.         elif(( (distance >= 0) and (vec[1] > 0) ) or ( (distance <= 0) and (vec[1] < 0) )):
  141.             opponent = opponent.move([0, vec[1]])
  142.  
  143.     if checkCollision():
  144.         vec[0] = -vec[0]
  145.  
  146.     playerBorderCollision()
  147.     checkScore()
  148.  
  149.     display()
  150.  
  151.     # checkWin
  152.     if(playerPoints == 3):
  153.         myfont = pygame.font.Font('freesansbold.ttf', 20)
  154.         msg = myfont.render("YOU WIN!", True, pink, (10, 10))
  155.         msg_box = msg.get_rect()
  156.         msg_box.y = 50
  157.         msg_box.x = (window.width-msg_box.width)/2
  158.         screen.blit(msg, msg_box)
  159.         pygame.display.flip()
  160.         break
  161.     elif(opponentPoints == 3):
  162.         myfont = pygame.font.Font('freesansbold.ttf', 20)
  163.         msg = myfont.render("GAME OVER!", True, pink, (10, 10))
  164.         msg_box = msg.get_rect()
  165.         msg_box.y = 50
  166.         msg_box.x = (window.width-msg_box.width)/2
  167.         screen.blit(msg, msg_box)
  168.         pygame.display.flip()
  169.         break
  170.  
  171.     fps.tick(60)
  172.  
  173. time.sleep(5000)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement