Guest
Public paste!

elyom

By: a guest | Oct 2nd, 2008 | Syntax: Fortran | Size: 8.11 KB | Hits: 59 | Expires: Never
This paste has a previous version, view the difference. Copy text to clipboard
  1. #--------------------------------------------------------------------------------------#
  2. # Juego "407 in action"
  3. #       Desarrollador Gerardo Francisco Madriz | Nick IRC raCkz0r (R)
  4. # Graficos  2d XD los encontre por ahi
  5. #
  6. # Idea original de un compa
  7. #
  8. # Agradecimientos a los compas de #pyar
  9. #
  10. # licencia la mia... modifiquen el programa hagan lo que quieran pero respeten derechos
  11. # de autor ;)
  12. #-------------------------------------------------------------------------------------#
  13.  
  14. import pygame
  15. from pygame.locals import *
  16. import sys
  17. import time
  18. import random
  19.  
  20. #------------------------------------------------------------------------------------
  21. # Declaramos variables globales
  22. #------------------------------------------------------------------------------------
  23. SCREEN_ANCHO = 1024
  24. SCREEN_ALTO = 768
  25.  
  26. #----------------------------------------#
  27. # Funcion para cargar imagenes  
  28. #----------------------------------------#
  29. def load_image(name, colorkey = False):
  30.         image = pygame.image.load(name)
  31.         image = image.convert()
  32.         if (colorkey):
  33.                 colorkey = image.get_at((0,0))
  34.                 image.set_colorkey(colorkey, RLEACCEL)
  35.         return image, image.get_rect()
  36.        
  37.  
  38. #-------------------------------------------------#
  39. #funcion para cargar musica                       #
  40. #-------------------------------------------------#
  41.  
  42. def sound_file(name):
  43.  
  44.     # Clase para cuando no se puede cargar el sonido
  45.     class NoneSound:
  46.         def play(self): pass
  47.  
  48.     # Si no tiene habilitado el sonido ...
  49.     if not pygame.mixer or not pygame.mixer.get_init():
  50.         return NoneSound()
  51.  
  52.     # Pillamos la direccion entera del archivo
  53.     DATOS = "/home/blackg0l/Desktop/game/",name
  54.     fullname = "".join(DATOS)
  55.  
  56.     # Intentamos guardar el sonido
  57.     try:
  58.         sound = pygame.mixer.Sound(fullname)
  59.     except pygame.error, message:
  60.         print "No se pudo cargar el sonido:", fullname
  61.         raise SystemExit, message
  62.  
  63.     return sound
  64.  
  65.  
  66. #------------------------------------------------------------------------------------
  67. # Clase del Carro que usaremos
  68. #------------------------------------------------------------------------------------
  69.  
  70. class Carro(pygame.sprite.Sprite):
  71.  
  72.         def __init__(self):
  73.                 pygame.sprite.Sprite.__init__(self)
  74.                 self.image, self.rect = load_image("/home/blackg0l/Desktop/game/bugatti.png", True)
  75.                 self.rect.center = (SCREEN_ANCHO/2, SCREEN_ALTO/3)
  76.                 self.x_speed = 0
  77.                 self.y_speed = 0
  78.        
  79.         def update(self):
  80.                 self.rect.move_ip((self.x_speed, self.y_speed))
  81.  
  82.                 # para no salirse de pantalla por los lados
  83.                 if self.rect.left < 0:
  84.                         self.rect.left = 0
  85.                 elif self.rect.right > SCREEN_ANCHO:
  86.                         self.rect.right = SCREEN_ANCHO
  87.  
  88.                 #Limites de la pantalla por arriba y abajo
  89.                 if self.rect.top < 0:
  90.                         self.rect.top = 0
  91.                 elif self.rect.bottom > SCREEN_ALTO-70:
  92.                         self.rect.bottom = SCREEN_ALTO-70
  93.  
  94. #----------------------------------------------------------------#
  95. #Clase del tanque enemigo
  96. #----------------------------------------------------------------#
  97.  
  98. class Tanque(pygame.sprite.Sprite):
  99.  
  100.         def __init__(self, starty):
  101.                 pygame.sprite.Sprite.__init__(self)
  102.                 self.image, self.rect = load_image("/home/blackg0l/Desktop/game/tanque.png", True)
  103.                 self.rect.centerx = 800
  104.                 self.rect.centery = starty
  105.                 self.x_speed = random.randint(-7, 7)
  106.                 self.y_speed = random.randint(-7, 7)
  107.  
  108.         def update(self):
  109.                 self.rect.move_ip((self.x_speed, self.y_speed))
  110.                
  111.                 #definimos el estilo de movimiento
  112.                 if self.rect.left < 400 or self.rect.right > SCREEN_ANCHO:
  113.                         self.x_speed = -(self.x_speed)
  114.  
  115.                 if self.rect.top < 0 or self.rect.bottom > SCREEN_ALTO-70:
  116.                         self.y_speed = -(self.y_speed)
  117.  
  118.                 # disparo aleatorio
  119.                 fire = random.randint(1, 40)
  120.                 if fire == 1:
  121.                         tanksprite.add(DisparoTank(self.rect.center))
  122.                         tanqueshot.play()
  123.  
  124. #--------------------------------------------------------------#
  125. #Clase del disparo de el bugatti veyron
  126. #--------------------------------------------------------------#
  127.  
  128. class Bugattishot(pygame.sprite.Sprite):
  129.  
  130.         def __init__(self, startpos):
  131.                 pygame.sprite.Sprite.__init__(self)
  132.                 self.image, self.rect = load_image("/home/blackg0l/Desktop/game/tiro_bugatti.bmp", True)
  133.                 self.rect.center = startpos
  134.  
  135.         def update(self):
  136.                 if self.rect.right >= SCREEN_ANCHO:
  137.                         self.kill()  #destruye el tiro que se sale de pantalla
  138.  
  139.                 else:
  140.                         self.rect.move_ip((8,0)) #sino sigue avanzando
  141.  
  142. #--------------------------------------------------------#
  143. # Clase de disparo de el tanque
  144. #--------------------------------------------------------#
  145.  
  146. class DisparoTank(pygame.sprite.Sprite):
  147.  
  148.         def __init__(self, startpos):
  149.                 pygame.sprite.Sprite.__init__(self)
  150.                 self.image, self.rect = load_image("/home/blackg0l/Desktop/game/tiro_tank.bmp", True)
  151.                 self.rect.center = startpos
  152.  
  153.         def update(self):
  154.                 if self.rect.left <= 0:
  155.                         self.kill()
  156.                 else:
  157.                         self.rect.move_ip((-8,0))
  158.  
  159.  
  160. #---------------------------------------------------#
  161. # Funcion principal del juego el motor de todo      #
  162. #---------------------------------------------------#
  163.  
  164. def main():
  165.  
  166.         random.seed()
  167.         pygame.init()
  168.         #pygame.key.set_repeat(1, 1)   
  169.         screen = pygame.display.set_mode((SCREEN_ANCHO, SCREEN_ALTO), HWSURFACE|DOUBLEBUF)
  170.         pygame.display.set_caption('407 in action')
  171.  
  172.  
  173.         #---------------------------#
  174.         #Cargamos el fondo          #
  175.         #---------------------------#
  176.  
  177.         background_image, background_rect = load_image("/home/blackg0l/Desktop/game/pasto.png")
  178.         screen.blit(background_image, (0,0))
  179.  
  180.         #--------------------------------#
  181.         #Cargamos los sonidos            #
  182.         #--------------------------------#
  183.  
  184.         global tanqueshot
  185.         tanqueshot = sound_file("explode1.wav")
  186.         tiro_bugatti = sound_file("explode2.wav")
  187.  
  188.         #-------------------------------#
  189.         # Cargamos el carro en pantalla #
  190.         #-------------------------------#
  191.         bugatti = pygame.sprite.RenderClear()
  192.         carro = Carro()
  193.         bugatti.add(carro)     
  194.         #y sus tiro
  195.         veyronshot = pygame.sprite.RenderClear()
  196.  
  197.  
  198.         #-----------------------------#
  199.         # iniciamos unos 4 tanques    #
  200.         #-----------------------------#
  201.  
  202.         tanques = pygame.sprite.RenderClear()
  203.         tanques.add(Tanque (150))
  204.         tanques.add(Tanque (62))
  205.         tanques.add(Tanque (200))
  206.         tanques.add(Tanque (95))
  207.         global tanksprite
  208.         tanksprite = pygame.sprite.RenderClear()
  209.  
  210.         #algo de control de cuadro por segundos
  211.         clock = pygame.time.Clock()
  212.         contador = 0
  213.  
  214.         while 1:
  215.                 clock.tick(300)
  216.                 for event in pygame.event.get():
  217.                         if event.type == pygame.QUIT:
  218.                                 sys.exit()
  219.                         if not hasattr(event,'button') and not hasattr(event,'key'):
  220.                                 continue
  221.                         if event.type == pygame.KEYDOWN:
  222.                                 if event.key == pygame.K_ESCAPE:
  223.                                         sys.exit()
  224.                                 if event.key ==  pygame.K_RIGHT:
  225.                                         carro.x_speed = 9
  226.                                 if event.key == pygame.K_LEFT:
  227.                                         carro.x_speed = -9
  228.                                 if event.key ==  pygame.K_UP:
  229.                                         carro.y_speed = -9
  230.                                 if event.key == pygame.K_DOWN:
  231.                                         carro.y_speed = 9
  232.                                 if event.key == pygame.K_SPACE:
  233.                                         veyronshot.add(Bugattishot(carro.rect.midright))
  234.                                         tiro_bugatti.play()
  235.  
  236.  
  237.                         elif event.type == KEYUP:
  238.                                 if event.key ==  pygame.K_RIGHT:
  239.                                         carro.x_speed = 0
  240.                                 if event.key == pygame.K_LEFT:
  241.                                         carro.x_speed = 0
  242.                                 if event.key ==  pygame.K_UP:
  243.                                         carro.y_speed = 0
  244.                                 if event.key == pygame.K_DOWN:
  245.                                         carro.y_speed = 0
  246.                                                                        
  247.                 #Agregar enemigos
  248.                 contador += 1
  249.                 if contador >= 50:
  250.                         tanques.add(Tanque (63))
  251.                         contador = 0
  252.  
  253.  
  254.                 # Actualizamos los springs sin mostrarlos en pantalla
  255.                 carro.update()
  256.                 veyronshot.update()
  257.                 tanques.update()
  258.                 tanksprite.update()
  259.                
  260.                 #miramos si un laser choca contra un tanque
  261.                 for hit in pygame.sprite.groupcollide( tanques, veyronshot, 1, 2):
  262.                         tiro_bugatti.play()
  263.                
  264.                
  265.                 for hit in pygame.sprite.groupcollide( bugatti, tanksprite, 1, 2):
  266.                         tiro_bugatti.play()
  267.                         sys.exit()
  268.  
  269.                 #limpiamos la pantalla
  270.                 bugatti.clear(screen, background_image)
  271.                 veyronshot.clear(screen, background_image)
  272.                 tanques.clear(screen, background_image)
  273.                 tanksprite.clear(screen, background_image)
  274.  
  275.  
  276.                 #dibujamos la pantalla
  277.                 bugatti.draw( screen )
  278.                 veyronshot.draw( screen)
  279.                 tanques.draw(screen)
  280.                 tanksprite.draw(screen)
  281.  
  282.                                        
  283.                 pygame.display.flip()
  284.                        
  285.                
  286. if __name__ == "__main__":
  287.         main()