Gracias Hugo por el menu, en cuanto tenga hecho uno por mi lo substituyo
 
 
Dispone:
- 2 Players
- Interfaz sencilla pero agradable
- Música de fondo
- Menú
- Contador de puntos
- etc.
Falta (que no creo que termine):
- Jugar contra CPU
- Algunos eventos originales
Nath Pong 0.4.tar.gz
Para ejecutarlo en caso de tener Windows necesitais el intérprete de Python y la biblioteca Pygame
http://www.python.org/download/
http://www.pygame.org/download.shtml
En caso de tener GNU/Linux generalmente viene instalado por lo que tan sólo hay que hacer con la shell: python nombredelscript.py
- Código: Seleccionar todo
- # Autor: Nath (Nath.py@hotmail.com)
 # Licencia GPL
 # Descripcion: El clasico juego del Ping Pong a 2D
 # Greetz to Hugo Ruscitti for Menu ;)
 #------------------------------------------------------------------------------
 #Importamos los modulos necesarios
 import random
 import pygame
 from pygame.locals import *
 import math
 pygame.init()
 pygame.mixer.init()
 pygame.mixer.music.load("Error.mp3")
 pygame.mixer.music.play()
 
 
 class Opcion:
 def __init__(self, fuente, titulo, x, y, paridad, funcion_asignada):
 self.imagen_normal = fuente.render(titulo, 1, (0, 0, 0))
 self.imagen_destacada = fuente.render(titulo, 1, (200, 0, 0))
 self.image = self.imagen_normal
 self.rect = self.image.get_rect()
 self.rect.x = 500 * paridad
 self.rect.y = y
 self.funcion_asignada = funcion_asignada
 self.x = float(self.rect.x)
 
 def actualizar(self):
 destino_x = 105
 self.x += (destino_x - self.x) / 5.0
 self.rect.x = int(self.x)
 
 def imprimir(self, screen):
 screen.blit(self.image, self.rect)
 
 def destacar(self, estado):
 if estado:
 self.image = self.imagen_destacada
 else:
 self.image = self.imagen_normal
 
 def activar(self):
 self.funcion_asignada()
 
 
 class Cursor:
 def __init__(self, x, y, dy):
 self.image = pygame.image.load('cursor.png').convert_alpha()
 self.rect = self.image.get_rect()
 self.rect.x = x
 self.y_inicial = y
 self.dy = dy
 self.y = 0
 self.seleccionar(0)
 
 def actualizar(self):
 self.y += (self.to_y - self.y) / 10.0
 self.rect.y = int(self.y)
 
 def seleccionar(self, indice):
 self.to_y = self.y_inicial + indice * self.dy
 
 def imprimir(self, screen):
 screen.blit(self.image, self.rect)
 
 
 class Menu:
 def __init__(self, opciones):
 self.opciones = []
 fuente = pygame.font.Font('dejavu.ttf', 20)
 x = 105
 y = 105
 paridad = 1
 
 self.cursor = Cursor(x - 30, y, 30)
 
 for titulo, funcion in opciones:
 self.opciones.append(Opcion(fuente, titulo, x, y, paridad, funcion))
 y += 30
 if paridad == 1:
 paridad = -1
 else:
 paridad = 1
 
 self.seleccionado = 0
 self.total = len(self.opciones)
 self.mantiene_pulsado = False
 
 def actualizar(self):
 k = pygame.key.get_pressed()
 
 if not self.mantiene_pulsado:
 if k[K_UP]:
 self.seleccionado -= 1
 elif k[K_DOWN]:
 self.seleccionado += 1
 elif k[K_RETURN]:
 self.opciones[self.seleccionado].activar()
 
 if self.seleccionado < 0:
 self.seleccionado = 0
 elif self.seleccionado > self.total - 1:
 self.seleccionado = self.total - 1
 
 self.cursor.seleccionar(self.seleccionado)
 
 self.mantiene_pulsado = k[K_UP] or k[K_DOWN] or k[K_RETURN]
 
 self.cursor.actualizar()
 
 for o in self.opciones:
 o.actualizar()
 
 def imprimir(self, screen):
 self.cursor.imprimir(screen)
 
 for opcion in self.opciones:
 opcion.imprimir(screen)
 
 def comenzar_nuevo_juego():
 #Definimos la pantalla como 640x480
 Anchura, Altura = 640, 480
 screen = pygame.display.set_mode((Anchura,Altura))
 pygame.display.set_caption("Ping Pong")
 Fondo = pygame.image.load("Fondo.jpg")
 #Definimos el Sprite "Jugador1", el de la izquierda.
 class Jugador1 (pygame.sprite.Sprite):
 def __init__(self):
 pygame.sprite.Sprite.__init__(self)
 self.Jugador1_image = pygame.image.load("pala.png")
 self.rect = self.Jugador1_image.get_rect()
 def Update(self):
 self.rect.clamp_ip(screen.get_rect())
 self.key = pygame.key.get_pressed()
 if self.key[pygame.K_w]:
 self.rect.y -= 5
 elif self.key[pygame.K_s]:
 self.rect.y += 5
 screen.blit(self.Jugador1_image,self.rect)
 #Definimos el Sprite "Jugador2", el de la derecha.
 class Jugador2 (pygame.sprite.Sprite):
 def __init__(self):
 pygame.sprite.Sprite.__init__(self)
 self.color = (0,0,0)
 self.Jugador2_image = pygame.image.load("pala.png")
 self.rect = self.Jugador2_image.get_rect()
 self.rect.x = 620
 def Update(self):
 self.rect.clamp_ip(screen.get_rect())
 self.key = pygame.key.get_pressed()
 if self.key[pygame.K_UP]:
 self.rect.y -= 5
 elif self.key[pygame.K_DOWN]:
 self.rect.y += 5
 screen.blit(self.Jugador2_image,self.rect)
 
 #Definimos el sprite "Pelota"
 class Pelota(pygame.sprite.Sprite):
 def __init__(self):
 pygame.sprite.Sprite.__init__(self)
 self.color = (0,0,0)
 self.Pelota_image = pygame.image.load("ball.gif")
 self.rect = self.Pelota_image.get_rect()
 self.speed = [3,3]
 self.rect.y,self.rect.x = 200,200
 self.Player2_Score = 0
 self.Player1_Score = 0
 def Update(self):
 self.rect.clamp_ip(screen.get_rect())
 Colision = pygame.sprite.spritecollide(self,GrupoJugadores,dokill=False)
 if Colision:
 if self.speed[0] > 0:
 self.speed[0] += 1
 elif self.speed[0] < 0:
 self.speed[0] -= 1
 elif self.speed[1] > 0:
 self.speed[1] += 1
 elif self.speed[1] < 0:
 self.speed[1] -= 1
 self.speed[0] = - self.speed[0]
 if self.rect.top < 1 or self.rect.bottom > 479: self.speed[1] = -self.speed[1]
 elif self.rect.left < 1:
 self.Player2_Score += 1
 if self.Player2_Score == 5:
 Render = Fuente2.render("Ha ganado el Jugador 2!", 1, (0, 0, 0))
 screen.blit(Render,(30,230))
 pygame.display.update()
 pygame.time.wait(1000)
 exit()
 Reset("Ganador_2")
 elif self.rect.right > 639:
 self.Player1_Score += 1
 if self.Player1_Score == 5:
 Render = Fuente2.render("Ha ganado el Jugador 1!", 1, (0, 0, 0))
 screen.blit(Render,(30,230))
 pygame.display.update()
 pygame.time.wait(2000)
 exit()
 Reset("Ganador_1")
 self.rect.move_ip(self.speed[0],self.speed[1])
 screen.blit(self.Pelota_image,self.rect)
 #Funcion para resetear despues de un punto
 def Reset(Ganador):
 Pelota.speed[0],Pelota.speed[1] = 2,2
 Pelota.rect.x,Pelota.rect.y = 300,210
 if Ganador == "Ganador_1":
 Pelota.speed[0] = -Pelota.speed[0]
 pygame.time.wait(100)
 elif Ganador == "Ganador_2":
 Pelota.speed[0] = -Pelota.speed[0]
 pygame.time.wait(100)
 #Inicializaciones y configuraciones previas para empezar el juego
 Jugador1 = Jugador1()
 Jugador2 = Jugador2()
 Pelota = Pelota()
 GrupoJugadores = pygame.sprite.Group()
 GrupoJugadores.add(Jugador1,Jugador2)
 Running = True
 pygame.mouse.set_visible(False)
 #Definimos la fuente para el marcador
 Fuente = pygame.font.Font("dejavu.ttf",80)
 Fuente2 = pygame.font.Font("dejavu.ttf",40)
 #Empezamos el bucle infinito que inicia el juego
 while Running:
 for event in pygame.event.get():
 if event.type == QUIT:
 Running = False
 if event.type == pygame.K_ESCAPE:
 Running = False
 screen.blit(Fondo,(0,0))
 Jugador1.Update()
 Jugador2.Update()
 Pelota.Update()
 screen.blit(Fuente.render(str(Pelota.Player1_Score)+" - " + str(Pelota.Player2_Score),True, (255,000,000)),(230,30))
 pygame.display.flip()
 
 
 def salir_del_programa():
 exit()
 
 
 if __name__ == '__main__':
 salir = False
 opciones = [
 ("Jugar", comenzar_nuevo_juego),
 ("Salir", salir_del_programa)
 ]
 
 pygame.font.init()
 screen = pygame.display.set_mode((310, 200))
 fondo = pygame.image.load("fondo.png").convert()
 menu = Menu(opciones)
 
 while not salir:
 
 for e in pygame.event.get():
 if e.type == QUIT:
 salir = True
 
 screen.blit(fondo, (0, 0))
 menu.actualizar()
 menu.imprimir(screen)
 
 pygame.display.flip()
 pygame.time.delay(10)


