sábado, 14 de noviembre de 2020

marcianitos vs naves

 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