hugoruscitti/pilas

View on GitHub
pilasengine/ejemplos/vaca_voladora.py

Summary

Maintainability
F
3 days
Test Coverage
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# El juego de la vaca voladora
#
# Creado por Hugo Ruscitti y Walter Velazquez durante
# un taller en las oficinas de huayra linux.
#
# El código detallado y el material del taller se puede
# descagar desde:
#
#          https://github.com/hugoruscitti/la-vaca-voladora
#          https://speakerdeck.com/hugoruscitti/la-vaca-voladora

import random
import pilasengine


class Estado:

    def __init__(self, vaca):
        self.vaca = vaca
        self.iniciar()

    def iniciar(self):
        pass



class Ingresando(Estado):

    def iniciar(self):
        self.vaca.definir_animacion([3, 4])
        self.contador = 0
        self.vaca.x = -380
        self.vaca.x = [-170], 0.5

    def actualizar(self):
        self.contador += 1

        if self.contador > 50:
            self.vaca.estado = Volando(self.vaca)

class Volando(Estado):

    def iniciar(self):
        self.vaca.definir_animacion([3, 4])

    def actualizar(self):
        velocidad = 5

        if pilas.escena.control.arriba:
            self.vaca.y += velocidad
        elif pilas.escena.control.abajo:
            self.vaca.y -= velocidad

        if self.vaca.y > 210:
            self.vaca.y = 210
        elif self.vaca.y < -210:
            self.vaca.y = -210


class Perdiendo(Estado):

    def iniciar(self):
        self.vaca.definir_animacion([0])
        self.vaca.centro = ('centro', 'centro')
        self.velocidad = -2

    def actualizar(self):
        self.vaca.rotacion += 7
        self.vaca.escala += 0.01
        self.vaca.x -= self.velocidad
        self.velocidad += 0.2
        self.vaca.y -= 1


class Vaca(pilasengine.actores.Actor):

    def iniciar(self):
        grilla = pilas.imagenes.cargar_grilla('vaca_voladora/sprites.png', 5, 1)
        self.imagen = grilla
        self.definir_animacion([0])
        self.centro = (140, 59)
        self.radio_de_colision = 40
        self.x = -170
        self.estado = Ingresando(self)
        self.contador = 0

    def definir_animacion(self, cuadros):
        self.paso = 0
        self.contador = 0
        self.cuadros = cuadros

    def actualizar(self):
        self.estado.actualizar()
        self.actualizar_animacion()

    def actualizar_animacion(self):
        self.contador += 0.2

        if (self.contador > 1):
            self.contador = 0
            self.paso += 1

            if self.paso >= len(self.cuadros):
                self.paso = 0

        self.imagen.definir_cuadro(self.cuadros[self.paso])

    def perder(self):
        self.estado = Perdiendo(self)
        t = pilas.actores.Texto("Has perdido ...")
        t.escala = 0
        t.escala = [1], 0.5

class Enemigo(pilasengine.actores.Bomba):

    def iniciar(self):
        pilasengine.actores.Bomba.iniciar(self)
        self.izquierda = 320
        self.y = random.randint(-210, 210)

    def actualizar(self):
        self.x -= 5
        pilasengine.actores.Bomba.actualizar(self)

class Item(pilasengine.actores.Actor):

    def iniciar(self):
        self.imagen = 'estrella.png'
        self.escala = 0.5
        self.izquierda = 320
        self.y = random.randint(-210, 210)

    def actualizar(self):
        self.izquierda -= 5

        if self.derecha < -320:
            self.eliminar()


class Nube(pilasengine.actores.Actor):

    def iniciar(self):
        velocidad = random.randint(2, 10)
        self.velocidad = velocidad
        self.escala = velocidad / 10.0
        self.transparencia = velocidad * 6
        self.z = - (velocidad -5)
        self.x = random.randint(-320, 320)
        self.y = random.randint(-210, 210)

        rutas_imagenes_nubes = [
                'vaca_voladora/nube1.png',
                'vaca_voladora/nube2.png',
        ]
        self.imagen = random.choice(rutas_imagenes_nubes)

    def actualizar(self):
        self.x -= self.velocidad

        if self.derecha < -320:
            self.reiniciar_posicion()

    def reiniciar_posicion(self):
        self.izquierda = 320
        self.y = random.randint(-210, 210)


pilas = pilasengine.iniciar(capturar_errores=False)

fondo = pilas.fondos.Fondo('vaca_voladora/nubes.png')
puntos = pilas.actores.Puntaje(x=-290, y=210)
vaca = Vaca(pilas)
items = []
enemigos = []

def crear_item():
    un_item = Item(pilas)
    items.append(un_item)
    return True

pilas.tareas.agregar(2, crear_item)


def cuanto_toca_item(v, i):
    i.eliminar()
    puntos.aumentar(10)
    puntos.escala = 2
    puntos.escala = [1], 0.2
    puntos.rotacion = random.randint(30, 60)
    puntos.rotacion = [0], 0.2

pilas.colisiones.agregar(vaca, items, cuanto_toca_item)


def crear_enemigo():
    un_enemigo = Enemigo(pilas)
    enemigos.append(un_enemigo)
    return True

pilas.tareas.agregar(3.3, crear_enemigo)


def cuanto_toca_enemigo(vaca, enemigo):
    vaca.perder()
    enemigo.eliminar()

pilas.colisiones.agregar(vaca, enemigos, cuanto_toca_enemigo)


for x in range(7):
    Nube(pilas)

pilas.ejecutar()