import pygame
import random
WIDTH=800
HEIGHT=600
BLACK=(0,0,0)
WHITE=(255,255,255)
#INICIALIZAR
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
#nombre de ventana
pygame.display.set_caption("aliens vs aviones")
#reloj para controlar
Clock= pygame.time.Clock()
#funcion que permite dibujar texto en la ventana
def draw_text(surface, text, size, x, y):#surface=donde se dibujara el texto
font = pygame.font.SysFont("serif", size)#fuente
text_surface = font.render(text, True, (WHITE))#el lugar donde se pondra el texto
text_rect = text_surface.get_rect()
text_rect.midtop = (x, y)#posicionarlo (x,y)
surface.blit(text_surface, text_rect)#ver pantalla
#clase jugador
class Player(pygame.sprite.Sprite):
#inicializar clase
def __init__(self):
#definimos con super clase (sprite)
super().__init__()
#imagen jugador nave
self.image=pygame.image.load('player.png').convert()
#remover la parte negra de la nave
self.image.set_colorkey(BLACK)
#definimos recta
self.rect= self.image.get_rect()
#pantalla de ancho ala mitad
self.rect.centerx= WIDTH//2
self.rect.bottom=HEIGHT-10
#velocidad con la cual se movera inicializa a cero
self.speed_x=0
#funcion
def update(self):
# velocidad sera igual a cero
self.speed_x=0
#si se presiona alguna tecla keystate
keystate=pygame.key.get_pressed()
#si la tecla presionada es izquierda
if keystate[pygame.K_LEFT]:
#la velocidad se disminuira a 5
self.speed_x=-5
# si la tecla presionada es derecha
if keystate[pygame.K_RIGHT]:
self.speed_x=5
#suma la velocidad
self.rect.x += self.speed_x
#colisiones right es mas ancho que la ventana no permite salir la nave de las orillas
if self.rect.right > WIDTH:
self.rect.right = WIDTH
if self.rect.left < 0:
self.rect.left = 0
def shoot(self):
#creacion de bala y le damos una posicion desde el centro
bullet = Bullet(self.rect.centerx, self.rect.top)
#agregado alos sprits
all_sprites.add(bullet)
#se agrega ala lista
bullets.add(bullet)
#clase alien (invasores)
class Alien(pygame.sprite.Sprite):
#inicializamos la clase
def __init__(self):
#inicializamos la super clase
super().__init__()
#imagen invasores
self.image=pygame.image.load('alienrosa.ico').convert()
#quitamos el fondo de la imagen
self.image.set_colorkey(BLACK)
#creamos la recta de la imagen
self.rect=self.image.get_rect()
#valor de inicio y random que aparezca en cualquier lugar
self.rect.x=random.randrange(WIDTH - self.rect.width)
self.rect.y=random.randrange(-100, -40)
#definimos velocidad(para que cada alien se muestre en velocidad diferente)
self.speedy=random.randrange(1,10)
self.speedx = random.randrange(-5, 5)
#creamos nueva clase update
def update(self):
#velocidad
self.rect.x +=self.speedx
self.rect.y += self.speedy
#si el tope del alien ya revaso el borde de la ventana, se aumenta y si salio por la Der
if self.rect.top > HEIGHT + 10 or self.rect.left < -25 or self.rect.right > WIDTH + 22:
#regresa el alien aleatorio con la velocidad en x y y
self.rect.x = random.randrange(WIDTH - self.rect.width)
self.rect.y = random.randrange(-100, -40)
self.speedy= random.randrange(1, 10)
#laser
class Bullet(pygame.sprite.Sprite):
# inicio y parametros de colicion
def __init__(self, x, y):
# inicializamos super clase
super().__init__()
# imagen de balas o lacer
self.image = pygame.image.load('laser1.png')
# remover le fondo de las bala
self.image.set_colorkey(BLACK)
self.rect = self.image.get_rect()
self.rect.y = y
# centro del objecto
self.rect.centerx = x
# velocidad y negativo porque va para abajo
self.speedy = -10
def update(self):
#hacer que suba en automatico la bala
self.rect.y += self.speedy
#elimanos las balas para que no ocupe mucho espacio
if self.rect.bottom < 0:
#metodo se elimina la instacias de la lista en este caso las balas
self.kill()
#fondo de pantalla
fondo=pygame.image.load('background.png').convert()
#crear un grupo
all_sprites=pygame.sprite.Group()
alien_lista=pygame.sprite.Group()
bullets=pygame.sprite.Group()
#estancia jugador/agragado ala lista
player = Player()
all_sprites.add(player)
#creamos 10 aliens
for i in range(8):
alien= Alien()
all_sprites.add(alien)
alien_lista.add(alien)
#Marcador del juego
score = 0
#bucle principal
running=True
while running:
#velocidad del bucle
Clock.tick(30)
#procesos (eventos)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running=False
#cuando presione la barra espaciadora pueda tirar
elif event.type == pygame.KEYDOWN:
#barra espaciadora
if event.key == pygame.K_SPACE:
#jugador dispare
player.shoot()
# actualiza la pantalla
all_sprites.update()
# Colisiones ALIEN- laser
#variable hits,metodo groupcpllide =checa las coliciones de un grupo y otro
hits = pygame.sprite.groupcollide(alien_lista, bullets, True, True)
#True =desaparesca las balas
for hit in hits:
#aumentara el marcador cada vez que el aliens le toque una bala
score +=10
#creamos obj
alien = Alien()
#sprites
all_sprites.add(alien)
#añade ala lista de aliens
alien_lista.add(alien)
# Colisiones jugador - ALIEN
#variable hits
#comparamos el jugador con el alien y si un alien pega con la nave=verdadero
hits = pygame.sprite.spritecollide(player, alien_lista,True)
if hits:
#si ya pego el metorio se sale del juego
running = False
#vista de fondo con cordenada inical
screen.blit(fondo,[0,0])
#marcador dibujado ,color del marcador,posicion (x,y)
draw_text( screen, str(score), 25, WIDTH // 2, 10)
#dibujar para que aparezca en la pantalla
all_sprites.draw(screen)
# voltea la pantalla, despues de dibujar
pygame.display.flip()
pygame.quit()
No hay comentarios:
Publicar un comentario