Commits

SkRt committed 3312a52

Agregando la (tal vez) última version de Pong_Classic

Comments (0)

Files changed (1)

Pong_Classic/pong01.py

 
 # Este es un nuevo pong. A ver si me queda mejor que el anterior
 
+#-----------------------------------------------------------------------#
+# Importación de los módulos necesarios
+#-----------------------------------------------------------------------#
+
 import pygame
 import time
 import sys
 from pygame.locals import *
 
+#-----------------------------------------------------------------------#
+# Inicialización de Pygame
+#-----------------------------------------------------------------------#
+
 pygame.init()
 
+#-----------------------------------------------------------------------#
+# Constantes
+#-----------------------------------------------------------------------#
+
 fps = 60
 tiempo = 0
 WHITE = (255, 255, 255)
 brick2dy = 5
 points1 = 0
 points2 = 0
-wait = True
+
 
 fonttype = pygame.font.SysFont('sans', 96)
 fonttype2 = pygame.font.SysFont('sans', 24)
 
+#-----------------------------------------------------------------------#
+# Creación de la pantalla de juego (SURFACE)
+#-----------------------------------------------------------------------#
+
 window = pygame.display.set_mode((800, 600), 0)
 
-message1 = 'P O N G'
-text1 = fonttype.render(message1, True, WHITE)
-message2 = 'Press a key to continue'
-text2 = fonttype2.render(message2, True, WHITE)
-window.blit(text1, (50, 250, 200, 100))
-window.blit(text2, (450, 292, 350, 30))
-pygame.display.update()
+#-----------------------------------------------------------------------#
+# Funciones
+#-----------------------------------------------------------------------#
 
-while wait:
-    for event in pygame.event.get():
-        if event.type == KEYDOWN:
-            wait = False
+def pause():
+    # Esta función hace que se espere hasta que se pulse una tecla
+    wait = True
+    while wait:
+        for event in pygame.event.get():
+            if event.type == KEYDOWN:
+                if event.key == K_ESCAPE:
+                    pygame.quit()
+                    sys.exit()
+                else:
+                    wait = False
+
+
+def showIntro():
+    # Muestra la pantalla de inicio y espera
+    message1 = 'P O N G'
+    text1 = fonttype.render(message1, True, WHITE)
+    message2 = 'Press a key to continue'
+    text2 = fonttype2.render(message2, True, WHITE)
+    window.blit(text1, (50, 250, 200, 100))
+    window.blit(text2, (450, 292, 350, 30))
+    pygame.display.update()
+    pause()
+
+def drawGame():
+    # Dibuja la mesa, la pelota, las raquetas y los marcadores
+    # Primero borra la pantalla en negro
+    window.fill((0, 0, 0))
+    # Dibuja la pelota y las raquetas
+    pygame.draw.circle(window, WHITE, (ballx, bally), 4, 0)
+    pygame.draw.rect(window, WHITE, (brickx, bricky, 10, 50))
+    pygame.draw.rect(window, WHITE, (brick2x, brick2y, 10, 50))
+    # Dibuja la red
+    for i in range(10):
+        pygame.draw.rect(window, WHITE, (398, 10 + 60 * i, 4, 30))
+    # Dibuja los marcadores
+    marker1 = fonttype.render(str(points1), True, WHITE)
+    marker2 = fonttype.render(str(points2), True, WHITE)
+    window.blit(marker1, (300, 20, 50, 50))
+    window.blit(marker2, (450, 20, 50, 50))
+    # Y, finalmente, lo vuelca todo en pantalla
+    pygame.display.update()
+
+def sayWinner():
+    # Decir que jugador ha ganado y esperar
+    if points1 == 10:
+        winner = 'Player 1'
+    else:
+        winner = 'Player 2'
+    message = 'Winner: ' + winner
+    text = fonttype.render(message, True, WHITE)
+    window.blit(text, (80, 350, 600, 100))
+    pygame.display.update()
+    pause()
+
+#-----------------------------------------------------------------------#
+# Cuerpo principal del juego
+#-----------------------------------------------------------------------#
+
+showIntro()
 
 while True:
 
+    #-----------------------------------------------------------------------#
+    # Gestionar la velocidad del juego
+    #-----------------------------------------------------------------------#
+
     if pygame.time.get_ticks() - tiempo < 1000 / fps:
         continue
     tiempo = pygame.time.get_ticks()
 
+    #-----------------------------------------------------------------------#
+    # Bucle de eventos: Mirar si se quiere terminar el juego
+    #-----------------------------------------------------------------------#
+
     for event in pygame.event.get():
-
         if event.type == KEYDOWN:
             if event.key == K_ESCAPE:
                 pygame.quit()
                 sys.exit()
 
+    #-----------------------------------------------------------------------#
+    # Mover la pelota
+    #-----------------------------------------------------------------------#
+
+    # Primero hay que vigilar por si hay que cambiar de dirección
+    # Mira si se impacta con el jugador 1
     diff1 = bally - bricky
     if ballx == brickx + 10 and diff1 >= 0 and diff1 <= 50:
         balldx = -balldx
+    # Mira si se impacta con el jugador 2
     diff2 = bally - brick2y
     if ballx == brick2x and diff2 >= 0 and diff2 <= 50:
         balldx = -balldx
-
+    # Mira si se ha llegado al borde de la pantalla
     if bally < 5 or bally > 595:
         balldy = -balldy
-
+    # Mueve la pelota
     ballx += balldx
     bally += balldy
 
+    #-----------------------------------------------------------------------#
+    # Mover las raquetas
+    #-----------------------------------------------------------------------#
+
+    # Mira si el jugador 1 mueve la raqueta
     keysPressed = pygame.key.get_pressed()
     if keysPressed[K_a]:
         bricky += brickdy
     if keysPressed[K_q]:
         bricky -= brickdy
-
+    # Vigilar que la raqueta no se salga de la pantalla
     if bricky < 0:
         bricky = 0
     elif bricky > 550:
         bricky = 550
-
+    # Ahora hacemos lo mismo con el jugador 2
     if keysPressed[K_DOWN]:
         brick2y += brick2dy
     if keysPressed[K_UP]:
     elif brick2y > 550:
         brick2y = 550
 
+    #-----------------------------------------------------------------------#
+    # Mirar si se ha ganado un punto
+    #-----------------------------------------------------------------------#
+
+    # Primero, mira si la pelota ha llegado al borde
     if ballx > 800 or ballx < 0:
+        # En tal caso, recolocar jugadores y pelota y cambiar la puntuación
         time.sleep(1)
         bricky = 250
         brick2y = 250
         ballx = 400
         bally = 400
         balldx = -balldx
+        # Comprobar si el juego se ha acabado
+        if points1 == 10 or points2 == 10:
+            sayWinner()
+            points1 = 0
+            points2 = 0
+            window.fill((0, 0, 0))
+            showIntro()
 
-    window.fill((0, 0, 0))
 
-    pygame.draw.circle(window, WHITE, (ballx, bally), 4, 0)
-    pygame.draw.rect(window, WHITE, (brickx, bricky, 10, 50))
-    pygame.draw.rect(window, WHITE, (brick2x, brick2y, 10, 50))
+    #-----------------------------------------------------------------------#
+    # Dibujar el juego en pantalla
+    #-----------------------------------------------------------------------#
 
-    for i in range(10):
-        pygame.draw.rect(window, WHITE, (398, 10 + 60 * i, 4, 30))
-
-    marker1 = fonttype.render(str(points1), True, WHITE)
-    marker2 = fonttype.render(str(points2), True, WHITE)
-    window.blit(marker1, (300, 20, 50, 50))
-    window.blit(marker2, (450, 20, 50, 50))
-
-    pygame.display.update()
+    drawGame()