Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- # Módulos
- import sys, pygame
- from pygame.locals import *
- import random, time
- # ---Constantes
- ANCHO = 1024
- ALTO = 600
- #---- Variables Globales
- puntos = [0, 0] #Punuación
- listaObjetos = []
- # ---Clases
- # ---------------------------------------------------------------------
- """
- Class Objeto: Clase Global del programa, todos los objetos del juego
- heredan de aca
- """
- class Objeto (pygame.sprite.Sprite):
- def __init__(self, img):
- pygame.sprite.Sprite.__init__(self)
- self.image = cargarImagen("imagenes/"+img, True)
- self.rect = self.image.get_rect()
- """
- Metodo mover: metodo que mueve al objeto
- parametros:
- tiempo: tick que sincroniza los objetos del juego
- """
- def mover(self, tiempo):
- pass
- """
- Metodo impactoCon: metodo que se llama cuando dos objetos de la pantalla
- colisionan entre si, implementando la lógica correspondiente al objeto
- que lo llama.
- parametros:
- objeto: es el objeto con el que coliciono.
- tiempo: tick que sincroniza los objetos del juego
- """
- def impactoCon (self, objeto, tiempo):
- pass
- # ---------------------------------------------------------------------
- class Bola(Objeto):
- def __init__(self):
- Objeto.__init__(self,"bola.png")
- self.speed, self.rect.centerx, self.rect.centery = iniciarBola()
- def mover(self, tiempo):
- self.rect.centerx += self.speed[0] * tiempo
- self.rect.centery += self.speed[1] * tiempo
- if self.rect.left <= 0:
- puntos[1] += 1
- if self.rect.right >= ANCHO:
- puntos[0] += 1
- if self.rect.left <= 0 or self.rect.right >= ANCHO:
- self.speed, self.rect.centerx, self.rect.centery = iniciarBola()
- if self.rect.top <= 0 or self.rect.bottom >= ALTO:
- self.speed[1] = -self.speed[1]
- self.rect.centery += self.speed[1] * tiempo
- def impactoCon (self,objeto,tiempo=None):
- if isinstance(objeto, Paleta):
- if pygame.sprite.collide_rect(self, objeto):
- self.speed[0] = -self.speed[0]
- self.rect.centerx += self.speed[0] * tiempo
- if isinstance(objeto,Armas):
- if pygame.sprite.collide_rect(self, objeto):
- self.speed[0] = -self.speed[0]
- self.rect.centerx += self.speed[0] * tiempo
- #-----------------------------------------------------------------------
- class Paleta(Objeto):
- def __init__(self, x):
- Objeto.__init__(self,"paleta.png")
- self.rect.centerx = x
- self.rect.centery = ALTO / 2
- self.speed = 0.5
- self.healt = 100
- def mover(self, time):
- tecla = pygame.key.get_pressed()
- if self.rect.top >= 0:
- if tecla[K_UP]:
- self.rect.centery -= self.speed * time
- if self.rect.bottom <= ALTO:
- if tecla[K_DOWN]:
- self.rect.centery += self.speed * time
- class PaletaCpu(Paleta):
- def mover(self, time):
- for objeto in listaObjetos:
- if type(objeto) == Bola:
- if objeto.speed[0] >= 0 and objeto.rect.centerx >= ANCHO/2 + 5:
- if self.rect.centery < objeto.rect.centery:
- self.rect.centery += self.speed * time
- if self.rect.centery > objeto.rect.centery:
- self.rect.centery -= self.speed * time
- #-----------------------------------------------------------------------
- class Armas(Objeto):
- def __init__(self, img):
- Objeto.__init__(self,img)
- self.rect.centerx = random.randint(100, ANCHO-100)
- self.rect.centery = 0
- self.speed = 0.2
- def mover(self, time):
- self.rect.centery += self.speed * time
- class ArmasHielo (Armas):
- pass
- class ArmasFuego (Armas):
- #def __init__(self, img):
- pass
- class ArmasVeneno (Armas):
- #def __init__(self, img):
- pass
- #-----------------------------------------------------------------------
- # ---Funciones
- def texto(texto, posx, posy, color=(255, 255, 255)):
- fuente = pygame.font.Font(None, 25)
- salida = pygame.font.Font.render(fuente, texto, 1, color)
- salida_rect = salida.get_rect()
- salida_rect.centerx = posx
- salida_rect.centery = posy
- return salida, salida_rect
- def cargarImagen(filename, transparent=False):
- try: image = pygame.image.load(filename)
- except pygame.error, message:
- raise SystemExit, message
- image = image.convert()
- if transparent:
- color = image.get_at((0,0))
- image.set_colorkey(color, RLEACCEL)
- return image
- def iniciarBola ():
- #time.sleep(2)
- xBola = [-0.3, 0.3]
- yBola = [-0.3, 0.3]
- random.shuffle(xBola)
- random.shuffle(yBola)
- return [xBola[1], yBola[1]], (ANCHO / 2) - 3, (ALTO / 2)
- # ---------------------------------------------------------------------
- def main():
- screen = pygame.display.set_mode((ANCHO, ALTO))
- pygame.display.set_caption("PORONG")
- background_image = cargarImagen('imagenes/fondoPong.jpg')
- listaObjetos.append(Bola())
- listaObjetos.append(Paleta(30))
- listaObjetos.append(PaletaCpu(ANCHO - 30))
- reloj = pygame.time.Clock()
- #--- Bucle infinito para lo grafico
- while True:
- p_jug, p_jug_rect = texto(str(puntos[0]), ANCHO/4, 40)
- p_cpu, p_cpu_rect = texto(str(puntos[1]), ANCHO-ANCHO/4, 40)
- for eventos in pygame.event.get():
- if eventos.type == QUIT:
- sys.exit(0)
- #--- Inicializar Bonus
- rnd = random.randint(0, 50)
- if rnd == 1:
- listaObjetos.append(ArmasHielo("armasHielo.png"))
- elif rnd == 2:
- listaObjetos.append(ArmasFuego("armasFuego.png"))
- elif rnd == 3:
- listaObjetos.append(ArmasVeneno("armasVeneno.png"))
- tiempo = reloj.tick(90)
- #--- Verificar Impactos
- for objeto in listaObjetos:
- for objeto2 in listaObjetos:
- if type(objeto)==Bola:
- objeto.impactoCon(objeto2, tiempo)
- #--- Mover Objetos
- for objeto in listaObjetos:
- objeto.mover(tiempo)
- #--- Resfrescando pantalla
- screen.blit(background_image, (0, 0))
- screen.blit(p_jug, p_jug_rect)
- screen.blit(p_cpu, p_cpu_rect)
- for objeto in listaObjetos:
- screen.blit(objeto.image, objeto.rect)
- pygame.display.flip()
- return 0
- #--- Main
- if __name__ == '__main__':
- pygame.init()
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement