Posted by raCkz0r on Thu 10 Jan 23:02
report abuse | View followups from elyom | download | new post
- #--------------------------------------------------------------------------------------#
- # 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()
Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.