Advertisement
Guest User

pong

a guest
Dec 12th, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.87 KB | None | 0 0
  1. # /usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3.  
  4. import pygame
  5. import sys
  6. from pygame.locals import *
  7.  
  8. # inicjacja modułu pygame
  9. pygame.init()
  10.  
  11. # szerokość i wysokość okna gry
  12. OKNOGRY_SZER = 800
  13. OKNOGRY_WYS = 400
  14. # kolor okna gry, składowe RGB zapisane w tupli
  15. LT_BLUE = (230, 255, 255)
  16.  
  17. # powierzchnia do rysowania, czyli inicjacja okna gry
  18. oknogry = pygame.display.set_mode((OKNOGRY_SZER, OKNOGRY_WYS), 0, 32)
  19. # tytuł okna gry
  20. pygame.display.set_caption('Prosty Pong')
  21.  
  22. # paletka gracza #########################################################
  23. PALETKA_SZER = 100 # szerokość
  24. PALETKA_WYS = 20 # wysokość
  25. BLUE = (0, 0, 255) # kolor paletki
  26. PALETKA_1_POZ = (350, 360) # początkowa pozycja zapisana w tupli
  27. # utworzenie powierzchni paletki, wypełnienie jej kolorem,
  28. paletka1 = pygame.Surface([PALETKA_SZER, PALETKA_WYS])
  29. paletka1.fill(BLUE)
  30. # ustawienie prostokąta zawierającego paletkę w początkowej pozycji
  31. paletka1_prost = paletka1.get_rect()
  32. paletka1_prost.x = PALETKA_1_POZ[0]
  33. paletka1_prost.y = PALETKA_1_POZ[1]
  34.  
  35. # piłka #################################################################
  36. P_SZER = 20 # szerokość
  37. P_WYS = 20 # wysokość
  38. P_PREDKOSC_X = 4 # prędkość pozioma x
  39. P_PREDKOSC_Y = 4 # prędkość pionowa y
  40. GREEN = (0, 255, 0) # kolor piłki
  41. # utworzenie powierzchni piłki, narysowanie piłki i wypełnienie kolorem
  42. pilka = pygame.Surface([P_SZER, P_WYS], pygame.SRCALPHA, 32).convert_alpha()
  43. pygame.draw.ellipse(pilka, GREEN, [0, 0, P_SZER, P_WYS])
  44. # ustawienie prostokąta zawierającego piłkę w początkowej pozycji
  45. pilka_prost = pilka.get_rect()
  46. pilka_prost.x = OKNOGRY_SZER / 2
  47. pilka_prost.y = OKNOGRY_WYS / 2
  48.  
  49. # ustawienia animacji ###################################################
  50. FPS = 30 # liczba klatek na sekundę
  51. fpsClock = pygame.time.Clock() # zegar śledzący czas
  52.  
  53. # paletka ai ############################################################
  54. RED = (255, 0, 0)
  55. PALETKA_AI_POZ = (350, 20) # początkowa pozycja zapisana w tupli
  56. # utworzenie powierzchni paletki, wypełnienie jej kolorem,
  57. paletkaAI = pygame.Surface([PALETKA_SZER, PALETKA_WYS])
  58. paletkaAI.fill(RED)
  59. # ustawienie prostokąta zawierającego paletkę w początkowej pozycji
  60. paletkaAI_prost = paletkaAI.get_rect()
  61. paletkaAI_prost.x = PALETKA_AI_POZ[0]
  62. paletkaAI_prost.y = PALETKA_AI_POZ[1]
  63. # szybkość paletki AI
  64. PREDKOSC_AI = 5
  65.  
  66.  
  67. # komunikaty tekstowe ###################################################
  68. # zmienne przechowujące punkty i funkcje wyświetlające punkty
  69. PKT_1 = '0'
  70. PKT_AI = '0'
  71. fontObj = pygame.font.Font('freesansbold.ttf', 64) # czcionka komunikatów
  72.  
  73.  
  74. def drukuj_punkty1():
  75. tekst1 = fontObj.render(PKT_1, True, (0, 0, 0))
  76. tekst_prost1 = tekst1.get_rect()
  77. tekst_prost1.center = (OKNOGRY_SZER / 2, OKNOGRY_WYS * 0.75)
  78. oknogry.blit(tekst1, tekst_prost1)
  79.  
  80.  
  81. def drukuj_punktyAI():
  82. tekstAI = fontObj.render(PKT_AI, True, (0, 0, 0))
  83. tekst_prostAI = tekstAI.get_rect()
  84. tekst_prostAI.center = (OKNOGRY_SZER / 2, OKNOGRY_WYS / 4)
  85. oknogry.blit(tekstAI, tekst_prostAI)
  86.  
  87. # powtarzalność klawiszy (delay, interval)
  88. pygame.key.set_repeat(50, 25)
  89.  
  90. # pętla główna programu
  91. while True:
  92. # obsługa zdarzeń generowanych przez gracza
  93. for event in pygame.event.get():
  94. # przechwyć zamknięcie okna
  95. if event.type == QUIT:
  96. pygame.quit()
  97. sys.exit()
  98.  
  99. # przechwyć ruch myszy
  100. if event.type == MOUSEMOTION:
  101. myszaX, myszaY = event.pos # współrzędne x, y kursora myszy
  102.  
  103. # oblicz przesunięcie paletki gracza
  104. przesuniecie = myszaX - (PALETKA_SZER / 2)
  105.  
  106. # jeżeli wykraczamy poza okno gry w prawo
  107. if przesuniecie > OKNOGRY_SZER - PALETKA_SZER:
  108. przesuniecie = OKNOGRY_SZER - PALETKA_SZER
  109. # jeżeli wykraczamy poza okno gry w lewo
  110. if przesuniecie < 0:
  111. przesuniecie = 0
  112. # zaktualizuj położenie paletki w poziomie
  113. paletka1_prost.x = przesuniecie
  114.  
  115. # przechwyć naciśnięcia klawiszy kursora
  116. if event.type == pygame.KEYDOWN:
  117. if event.key == pygame.K_LEFT:
  118. paletka1_prost.x -= 5
  119. if paletka1_prost.x < 0:
  120. paletka1_prost.x = 0
  121. if event.key == pygame.K_RIGHT:
  122. paletka1_prost.x += 5
  123. if paletka1_prost.x > OKNOGRY_SZER - PALETKA_SZER:
  124. paletka1_prost.x = OKNOGRY_SZER - PALETKA_SZER
  125.  
  126. # ruch piłki ########################################################
  127. # przesuń piłkę po obsłużeniu zdarzeń
  128. pilka_prost.move_ip(P_PREDKOSC_X, P_PREDKOSC_Y)
  129.  
  130. # jeżeli piłka wykracza poza pole gry
  131. # z lewej/prawej – odwracamy kierunek ruchu poziomego piłki
  132. if pilka_prost.right >= OKNOGRY_SZER:
  133. P_PREDKOSC_X *= -1
  134. if pilka_prost.left <= 0:
  135. P_PREDKOSC_X *= -1
  136.  
  137. if pilka_prost.top <= 0: # piłka uciekła górą
  138. # P_PREDKOSC_Y *= -1 # odwracamy kierunek ruchu pionowego piłki
  139. pilka_prost.x = OKNOGRY_SZER / 2 # więc startuję ze środka
  140. pilka_prost.y = OKNOGRY_WYS / 2
  141. PKT_1 = str(int(PKT_1) + 1)
  142.  
  143. if pilka_prost.bottom >= OKNOGRY_WYS: # piłka uciekła dołem
  144. pilka_prost.x = OKNOGRY_SZER / 2 # więc startuję ze środka
  145. pilka_prost.y = OKNOGRY_WYS / 2
  146. PKT_AI = str(int(PKT_AI) + 1)
  147.  
  148. # AI (jak gra komputer)
  149. # jeżeli piłka ucieka na prawo, przesuń za nią paletkę
  150. if pilka_prost.centerx > paletkaAI_prost.centerx:
  151. paletkaAI_prost.x += PREDKOSC_AI
  152. # w przeciwnym wypadku przesuń w lewo
  153. elif pilka_prost.centerx < paletkaAI_prost.centerx:
  154. paletkaAI_prost.x -= PREDKOSC_AI
  155.  
  156. # jeżeli piłka dotknie paletki AI, skieruj ją w przeciwną stronę
  157. if pilka_prost.colliderect(paletkaAI_prost):
  158. P_PREDKOSC_Y *= -1
  159. # uwzględnij nachodzenie paletki na piłkę (przysłonięcie)
  160. pilka_prost.top = paletkaAI_prost.bottom
  161.  
  162. # jeżeli piłka dotknie paletki gracza, skieruj ją w przeciwną stronę
  163. if pilka_prost.colliderect(paletka1_prost):
  164. P_PREDKOSC_Y *= -1
  165. # zapobiegaj przysłanianiu paletki przez piłkę
  166. pilka_prost.bottom = paletka1_prost.top
  167.  
  168. # rysowanie obiektów ################################################
  169. oknogry.fill(LT_BLUE) # wypełnienie okna gry kolorem
  170.  
  171. drukuj_punkty1() # wyświetl punkty gracza
  172. drukuj_punktyAI() # wyświetl punkty AI
  173.  
  174. # narysuj w oknie gry paletki
  175. oknogry.blit(paletka1, paletka1_prost)
  176. oknogry.blit(paletkaAI, paletkaAI_prost)
  177.  
  178. # narysuj w oknie piłkę
  179. oknogry.blit(pilka, pilka_prost)
  180.  
  181. # zaktualizuj okno i wyświetl
  182. pygame.display.update()
  183.  
  184. # zaktualizuj zegar po narysowaniu obiektów
  185. fpsClock.tick(FPS)
  186.  
  187. # KONIEC
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement