#--------------------------------------------------------------------------------------#
# Juego "407 in action"
# Desarrollador Gerardo Francisco Madriz | Nick IRC raCkz0r (R)
# Graficos 2d XD los encontre por ahi
#
# Idea original de un compa
#
# Agradecimientos a los compas de #pyar
#
# licencia la mia... modifiquen el programa hagan lo que quieran pero respeten derechos
# de autor ;)
#-------------------------------------------------------------------------------------#
import pygame
from pygame.locals import *
import sys
import time
import random
#------------------------------------------------------------------------------------
# Declaramos variables globales
#------------------------------------------------------------------------------------
SCREEN_ANCHO = 1024
SCREEN_ALTO = 768
#----------------------------------------#
# Funcion para cargar imagenes
#----------------------------------------#
def load_image(name, colorkey = False):
image = pygame.image.load(name)
image = image.convert()
if (colorkey):
colorkey = image.get_at((0,0))
image.set_colorkey(colorkey, RLEACCEL)
return image, image.get_rect()
#-------------------------------------------------#
#funcion para cargar musica #
#-------------------------------------------------#
def sound_file(name):
# Clase para cuando no se puede cargar el sonido
class NoneSound:
def play(self): pass
# Si no tiene habilitado el sonido ...
if not pygame.mixer or not pygame.mixer.get_init():
return NoneSound()
# Pillamos la direccion entera del archivo
DATOS = "/home/blackg0l/Desktop/game/",name
fullname = "".join(DATOS)
# Intentamos guardar el sonido
try:
sound = pygame.mixer.Sound(fullname)
except pygame.error, message:
print "No se pudo cargar el sonido:", fullname
raise SystemExit, message
return sound
#------------------------------------------------------------------------------------
# Clase del Carro que usaremos
#------------------------------------------------------------------------------------
class Carro(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image, self.rect = load_image("/home/blackg0l/Desktop/game/bugatti.png", True)
self.rect.center = (SCREEN_ANCHO/2, SCREEN_ALTO/3)
self.x_speed = 0
self.y_speed = 0
def update(self):
self.rect.move_ip((self.x_speed, self.y_speed))
# para no salirse de pantalla por los lados
if self.rect.left < 0:
self.rect.left = 0
elif self.rect.right > SCREEN_ANCHO:
self.rect.right = SCREEN_ANCHO
#Limites de la pantalla por arriba y abajo
if self.rect.top < 0:
self.rect.top = 0
elif self.rect.bottom > SCREEN_ALTO-70:
self.rect.bottom = SCREEN_ALTO-70
#----------------------------------------------------------------#
#Clase del tanque enemigo
#----------------------------------------------------------------#
class Tanque(pygame.sprite.Sprite):
def __init__(self, starty):
pygame.sprite.Sprite.__init__(self)
self.image, self.rect = load_image("/home/blackg0l/Desktop/game/tanque.png", True)
self.rect.centerx = 800
self.rect.centery = starty
self.x_speed = random.randint(-7, 7)
self.y_speed = random.randint(-7, 7)
def update(self):
self.rect.move_ip((self.x_speed, self.y_speed))
#definimos el estilo de movimiento
if self.rect.left < 400 or self.rect.right > SCREEN_ANCHO:
self.x_speed = -(self.x_speed)
if self.rect.top < 0 or self.rect.bottom > SCREEN_ALTO-70:
self.y_speed = -(self.y_speed)
# disparo aleatorio
fire = random.randint(1, 40)
if fire == 1:
tanksprite.add(DisparoTank(self.rect.center))
tanqueshot.play()
#--------------------------------------------------------------#
#Clase del disparo de el bugatti veyron
#--------------------------------------------------------------#
class Bugattishot(pygame.sprite.Sprite):
def __init__(self, startpos):
pygame.sprite.Sprite.__init__(self)
self.image, self.rect = load_image("/home/blackg0l/Desktop/game/tiro_bugatti.bmp", True)
self.rect.center = startpos
def update(self):
if self.rect.right >= SCREEN_ANCHO:
self.kill() #destruye el tiro que se sale de pantalla
else:
self.rect.move_ip((8,0)) #sino sigue avanzando
#--------------------------------------------------------#
# Clase de disparo de el tanque
#--------------------------------------------------------#
class DisparoTank(pygame.sprite.Sprite):
def __init__(self, startpos):
pygame.sprite.Sprite.__init__(self)
self.image, self.rect = load_image("/home/blackg0l/Desktop/game/tiro_tank.bmp", True)
self.rect.center = startpos
def update(self):
if self.rect.left <= 0:
self.kill()
else:
self.rect.move_ip((-8,0))
#---------------------------------------------------#
# Funcion principal del juego el motor de todo #
#---------------------------------------------------#
def main():
random.seed()
pygame.init()
#pygame.key.set_repeat(1, 1)
screen = pygame.display.set_mode((SCREEN_ANCHO, SCREEN_ALTO), HWSURFACE|DOUBLEBUF)
pygame.display.set_caption('407 in action')
#---------------------------#
#Cargamos el fondo #
#---------------------------#
background_image, background_rect = load_image("/home/blackg0l/Desktop/game/pasto.png")
screen.blit(background_image, (0,0))
#--------------------------------#
#Cargamos los sonidos #
#--------------------------------#
global tanqueshot
tanqueshot = sound_file("explode1.wav")
tiro_bugatti = sound_file("explode2.wav")
#-------------------------------#
# Cargamos el carro en pantalla #
#-------------------------------#
bugatti = pygame.sprite.RenderClear()
carro = Carro()
bugatti.add(carro)
#y sus tiro
veyronshot = pygame.sprite.RenderClear()
#-----------------------------#
# iniciamos unos 4 tanques #
#-----------------------------#
tanques = pygame.sprite.RenderClear()
tanques.add(Tanque (150))
tanques.add(Tanque (62))
tanques.add(Tanque (200))
tanques.add(Tanque (95))
global tanksprite
tanksprite = pygame.sprite.RenderClear()
#algo de control de cuadro por segundos
clock = pygame.time.Clock()
contador = 0
while 1:
clock.tick(300)
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if not hasattr(event,'button') and not hasattr(event,'key'):
continue
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
sys.exit()
if event.key == pygame.K_RIGHT:
carro.x_speed = 9
if event.key == pygame.K_LEFT:
carro.x_speed = -9
if event.key == pygame.K_UP:
carro.y_speed = -9
if event.key == pygame.K_DOWN:
carro.y_speed = 9
if event.key == pygame.K_SPACE:
veyronshot.add(Bugattishot(carro.rect.midright))
tiro_bugatti.play()
elif event.type == KEYUP:
if event.key == pygame.K_RIGHT:
carro.x_speed = 0
if event.key == pygame.K_LEFT:
carro.x_speed = 0
if event.key == pygame.K_UP:
carro.y_speed = 0
if event.key == pygame.K_DOWN:
carro.y_speed = 0
#Agregar enemigos
contador += 1
if contador >= 50:
tanques.add(Tanque (63))
contador = 0
# Actualizamos los springs sin mostrarlos en pantalla
carro.update()
veyronshot.update()
tanques.update()
tanksprite.update()
#miramos si un laser choca contra un tanque
for hit in pygame.sprite.groupcollide( tanques, veyronshot, 1, 2):
tiro_bugatti.play()
for hit in pygame.sprite.groupcollide( bugatti, tanksprite, 1, 2):
tiro_bugatti.play()
sys.exit()
#limpiamos la pantalla
bugatti.clear(screen, background_image)
veyronshot.clear(screen, background_image)
tanques.clear(screen, background_image)
tanksprite.clear(screen, background_image)
#dibujamos la pantalla
bugatti.draw( screen )
veyronshot.draw( screen)
tanques.draw(screen)
tanksprite.draw(screen)
pygame.display.flip()
if __name__ == "__main__":
main()