Advertisement
Guest User

Untitled

a guest
Jul 6th, 2017
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. # Módulos
  5. import sys, pygame
  6. from pygame.locals import *
  7. import random, time
  8. # ---Constantes
  9. ANCHO = 1024
  10. ALTO = 600
  11.  
  12.  
  13. #---- Variables Globales
  14. puntos = [0, 0]                 #Punuación
  15. listaObjetos = []
  16. # ---Clases
  17. # ---------------------------------------------------------------------
  18. """
  19. Class Objeto: Clase Global del programa, todos los objetos del juego
  20. heredan de aca
  21. """
  22.  
  23. class Objeto (pygame.sprite.Sprite):
  24.     def __init__(self, img):
  25.         pygame.sprite.Sprite.__init__(self)
  26.         self.image = cargarImagen("imagenes/"+img, True)
  27.         self.rect = self.image.get_rect()
  28.  
  29.  
  30.     """
  31.    Metodo mover: metodo que mueve al objeto
  32.    parametros:
  33.                tiempo: tick que sincroniza los objetos del juego
  34.    """
  35.     def mover(self, tiempo):
  36.         pass
  37.  
  38.     """
  39.    Metodo impactoCon: metodo que se llama cuando dos objetos de la pantalla
  40.    colisionan entre si, implementando la lógica correspondiente al objeto
  41.    que lo llama.
  42.    parametros:
  43.                objeto: es el objeto con el que coliciono.
  44.                tiempo: tick que sincroniza los objetos del juego
  45.    """
  46.  
  47.     def impactoCon (self, objeto, tiempo):
  48.         pass
  49.  
  50.    
  51.  # ---------------------------------------------------------------------
  52.  
  53. class Bola(Objeto):
  54.     def __init__(self):
  55.         Objeto.__init__(self,"bola.png")
  56.         self.speed, self.rect.centerx, self.rect.centery = iniciarBola()
  57.  
  58.    
  59.     def mover(self, tiempo):
  60.         self.rect.centerx += self.speed[0] * tiempo
  61.         self.rect.centery += self.speed[1] * tiempo
  62.        
  63.         if self.rect.left <= 0:
  64.             puntos[1] += 1
  65.         if self.rect.right >= ANCHO:
  66.             puntos[0] += 1
  67.  
  68.         if self.rect.left <= 0 or self.rect.right >= ANCHO:
  69.             self.speed, self.rect.centerx, self.rect.centery = iniciarBola()
  70.         if self.rect.top <= 0 or self.rect.bottom >= ALTO:
  71.             self.speed[1] = -self.speed[1]
  72.             self.rect.centery += self.speed[1] * tiempo
  73.  
  74.     def impactoCon (self,objeto,tiempo=None):
  75.         if isinstance(objeto, Paleta):
  76.             if pygame.sprite.collide_rect(self, objeto):
  77.                 self.speed[0] = -self.speed[0]
  78.                 self.rect.centerx += self.speed[0] * tiempo
  79.  
  80.         if isinstance(objeto,Armas):
  81.             if pygame.sprite.collide_rect(self, objeto):
  82.                 self.speed[0] = -self.speed[0]
  83.                 self.rect.centerx += self.speed[0] * tiempo
  84.        
  85.  
  86. #-----------------------------------------------------------------------
  87. class Paleta(Objeto):
  88.     def __init__(self, x):
  89.         Objeto.__init__(self,"paleta.png")
  90.         self.rect.centerx = x
  91.         self.rect.centery = ALTO / 2
  92.         self.speed = 0.5
  93.         self.healt = 100
  94.  
  95.     def mover(self, time):
  96.         tecla = pygame.key.get_pressed()
  97.         if self.rect.top >= 0:
  98.             if tecla[K_UP]:
  99.                 self.rect.centery -= self.speed * time
  100.         if self.rect.bottom <= ALTO:
  101.             if tecla[K_DOWN]:
  102.                 self.rect.centery += self.speed * time
  103.                
  104. class PaletaCpu(Paleta):
  105.     def mover(self, time):
  106.         for objeto in listaObjetos:
  107.             if type(objeto) == Bola:
  108.                 if objeto.speed[0] >= 0 and objeto.rect.centerx >= ANCHO/2 + 5:
  109.                     if self.rect.centery < objeto.rect.centery:
  110.                         self.rect.centery += self.speed * time
  111.                 if self.rect.centery > objeto.rect.centery:
  112.                     self.rect.centery -= self.speed * time
  113.                    
  114. #-----------------------------------------------------------------------
  115. class Armas(Objeto):
  116.     def __init__(self, img):
  117.         Objeto.__init__(self,img)
  118.         self.rect.centerx = random.randint(100, ANCHO-100)
  119.         self.rect.centery = 0
  120.         self.speed = 0.2
  121.  
  122.  
  123.     def mover(self, time):
  124.         self.rect.centery += self.speed * time
  125.  
  126. class ArmasHielo (Armas):
  127.     pass
  128.  
  129. class ArmasFuego (Armas):
  130.     #def __init__(self, img):
  131.     pass
  132. class ArmasVeneno (Armas):
  133.     #def __init__(self, img):
  134.     pass
  135. #-----------------------------------------------------------------------
  136.  
  137. # ---Funciones
  138.  
  139. def texto(texto, posx, posy, color=(255, 255, 255)):
  140.     fuente = pygame.font.Font(None, 25)
  141.     salida = pygame.font.Font.render(fuente, texto, 1, color)
  142.     salida_rect = salida.get_rect()
  143.     salida_rect.centerx = posx
  144.     salida_rect.centery = posy
  145.     return salida, salida_rect
  146.  
  147. def cargarImagen(filename, transparent=False):
  148.         try: image = pygame.image.load(filename)
  149.         except pygame.error, message:
  150.                 raise SystemExit, message
  151.         image = image.convert()
  152.         if transparent:
  153.                 color = image.get_at((0,0))
  154.                 image.set_colorkey(color, RLEACCEL)
  155.         return image
  156.  
  157. def iniciarBola ():
  158.     #time.sleep(2)
  159.     xBola = [-0.3, 0.3]
  160.     yBola = [-0.3, 0.3]
  161.     random.shuffle(xBola)
  162.     random.shuffle(yBola)
  163.     return [xBola[1], yBola[1]], (ANCHO / 2) - 3, (ALTO / 2)
  164.  
  165.  
  166.  
  167. # ---------------------------------------------------------------------
  168.  
  169. def main():
  170.     screen = pygame.display.set_mode((ANCHO, ALTO))
  171.     pygame.display.set_caption("PORONG")
  172.    
  173.     background_image = cargarImagen('imagenes/fondoPong.jpg')
  174.     listaObjetos.append(Bola())
  175.     listaObjetos.append(Paleta(30))
  176.     listaObjetos.append(PaletaCpu(ANCHO - 30))
  177.     reloj = pygame.time.Clock()
  178.  
  179.     #--- Bucle infinito para lo grafico
  180.     while True:
  181.         p_jug, p_jug_rect = texto(str(puntos[0]), ANCHO/4, 40)
  182.         p_cpu, p_cpu_rect = texto(str(puntos[1]), ANCHO-ANCHO/4, 40)
  183.  
  184.         for eventos in pygame.event.get():
  185.             if eventos.type == QUIT:
  186.                 sys.exit(0)
  187.  
  188.         #--- Inicializar Bonus
  189.         rnd = random.randint(0, 50)
  190.         if rnd == 1:
  191.             listaObjetos.append(ArmasHielo("armasHielo.png"))
  192.         elif rnd == 2:
  193.             listaObjetos.append(ArmasFuego("armasFuego.png"))
  194.         elif rnd == 3:
  195.             listaObjetos.append(ArmasVeneno("armasVeneno.png"))
  196.         tiempo = reloj.tick(90)
  197.                    
  198.         #--- Verificar Impactos
  199.         for objeto in listaObjetos:
  200.             for objeto2 in listaObjetos:
  201.                 if type(objeto)==Bola:
  202.                     objeto.impactoCon(objeto2, tiempo)
  203.  
  204.         #--- Mover Objetos
  205.         for objeto in listaObjetos:
  206.             objeto.mover(tiempo)
  207.  
  208.         #--- Resfrescando pantalla
  209.         screen.blit(background_image, (0, 0))
  210.         screen.blit(p_jug, p_jug_rect)
  211.         screen.blit(p_cpu, p_cpu_rect)
  212.         for objeto in listaObjetos:
  213.             screen.blit(objeto.image, objeto.rect)
  214.         pygame.display.flip()
  215.     return 0
  216. #--- Main
  217. if __name__ == '__main__':
  218.     pygame.init()
  219.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement