martes, 1 de noviembre de 2011

Eventos, errores y excepciones

Ya había hecho una entrada mostrando los diferentes eventos que contenía mi videojuego. Un evento es una acción que realiza algún sujeto o usuario. En este caso es mi personaje medieval llamado "monito"


Eventos

Los movimientos que realiza son: hacia arriba, hacia abajo, hacia la izquierda y hacia la derecha. A continuación muestro el pedazo de código donde utilizo los eventos del monito.

                    if event.key == pygame.K_LEFT:
                        monito.move_ip(-10,0)
                    if event.key == pygame.K_RIGHT:
                        monito.move_ip(10,0)
                    if event.key == pygame.K_UP:
                        monito.move_ip(0,-10)
                    if event.key == pygame.K_DOWN:
                        monito.move_ip(0,10)

Podemos ver que en pygame a los eventos de cada tecla los llama "event.key" y a continuación especificamos cuál tecla queremos que al oprimirse, realice una acción determinada. Por ejemplo, el primer evento que especifiqué es con el botón de la flecha direccional izquierdo, y se mueve hacia a la derecha (los números son las coordenadas que queremos que se mueva nuevamente).

if event.type == pygame.QUIT:

Este evento lo que nos indica es que se cerrará la ventana.


Errores y Excepciones

Las excepciones son errores que se detectan y se avisa que existe algún altercado a la hora de hacer la ejecución o compilación del programa.

En mi caso, la excepción que tengo es que en dado caso que se llegara a borrar o a cambiar de lugar la imagen de mi monito, avisara en la terminal que dicho archivo ha sido removido o borrado del directorio:


try:
    a = archivo("monito.png")
except:
    print "La imagen ha sido removida o borrada del directorio"
 
 
*Pendiente de elaborar la tabla...*

Patrón de diseño.

Los patrones de diseño son soluciones que ya han sido antes utilizadas para muchas otras cosas y se ha demostrado que realmente funcionan.

El patrón de diseño que yo vi y se acopla a lo que estoy elaborando es el patrón Strategy

Este patrón declara una interfaz en común para los algoritmos que se presenten. Es decir, mi interfaz será el bosque que tengo como escenario, donde se encuentra mi monito, los fierros que recogerá y algunos obstáculos que tendrá.

Este pedazo de código llama a mi escenario (que es la interfaz común)

fondo= pygame.image.load("escenario.png")

Este otro contiene a mi monito (que es uno de los que realizarán los algoritmos)


monito= pygame.image.load("monito1.png")


Estas son las acciones que realiza mi monito:

                    if event.key == pygame.K_LEFT:
                        monito.move_ip(-10,0)
                    if event.key == pygame.K_RIGHT:
                        monito.move_ip(10,0)
                    if event.key == pygame.K_UP:
                        monito.move_ip(0,-10)
                    if event.key == pygame.K_DOWN:
                        monito.move_ip(0,10)


Los algoritmos, vienen siendo todas las acciones que logra hacer mi monito, como moverse a la izquierda, a la derecha, abajo, y hacia arriba.


Este código nos muestra el patrón Strategy en el lenguaje de programación Python.

class StrategyExample :

    def __init__(self, func=None) :
        if func :
             self.execute = func

    def execute(self) :
        print "Original execution"

def executeReplacement1() :
        print "Strategy 1"

def executeReplacement2() :
         print "Strategy 2"
if __name__ == "__main__" :

    strat0 = StrategyExample()
    strat1 = StrategyExample(executeReplacement1)
    strat2 = StrategyExample(executeReplacement2)

    strat0.execute()
    strat1.execute()
    strat2.execute()


A continuación un diagrama del esquleto del patrón de diseño "Strategy" (No me pertenece)




Fuentes: http://www.ingenierosoftware.com/analisisydiseno/patrones-diseno.php
http://lobyte.blogspot.com/2011/01/patron-estrategia.html

http://stackoverflow.com/questions/963965/how-is-this-strategy-pattern-written-in-python-the-sample-in-wikipedia