SlideShare una empresa de Scribd logo
1 de 48
Descargar para leer sin conexión
Algoritmos y Programación




                            Clase 2:
                Repaso PyGame -
                   Recursión


                                       www.unaj.edu.ar
Algoritmos y Programación




                  Temario
                 • Repaso de PyGame
                     – Funciones básicas
                     – Animaciones y Juegos sencillos
                     – Manejo de eventos
                 • Recursión
                     –   Definicion de Recursion.
                     –   Pila de Ejecucion.
                     –   Backtracking
                     –   Recursion infinita.
                     –   Recursion vs Iteracion.


                                                        www.unaj.edu.ar
Algoritmos y Programación




                      Repaso: PyGame




                                       www.unaj.edu.ar
Algoritmos y Programación




                  ¿Qué es PyGame?
                • PyGame es un conjunto de módulos
                  escritos en Python diseñados para escribir
                  juegos en dos dimensiones.
                • Incluye gráficos y bibliotecas de sonido
                    diseñadas para ser utilizadas directamente bajo
                    Python.
                • No es nuevo: desde año 2000...
                • Es portable y libre.
                • Url: http://www.pygame.org/

                                                              www.unaj.edu.ar
Algoritmos y Programación




                  Modulos PyGame
         • Vamos a ver primero algunos módulos para
           realizar gráficos sencillos.
            – Cómo crear una ventana y dibujar luego en ella.
         • PyGame provee varios módulos para representar
           líneas, polígonos, círculos, etc.
         • Para utilizarlos, debemos importar la librería
           PyGame y otras más que serán necesarias:
                      import pygame
                       import pygame
                      import os
                       import os
                      Import sys
                       Import sys
                      from pygame.locals import **
                       from pygame.locals import
                                                      www.unaj.edu.ar
Algoritmos y Programación




                  Inicialización
         • Luego de importar las librerías, hay que inicializar
           el módulo:
                    pygame.init()
                    pygame.init()

         • ¿Abrimos una ventana?

              ventana = pygame.display.set_mode((ancho,alto))
               ventana = pygame.display.set_mode((ancho,alto))
              pygame.display.set_caption(‘TítuloVentana')
               pygame.display.set_caption(‘TítuloVentana')




                                                                 www.unaj.edu.ar
Algoritmos y Programación




                  Ventanas




                             www.unaj.edu.ar
Algoritmos y Programación




                  El módulo Draw
   • Permite trabajar con las siguientes formas:
             rect polygon circle
              rect polygon circle       ellipse arc
                                        ellipse arc
             line lines
              line lines        aaline
                                 aaline     aalines
                                             aalines
   • Los dibujos se realizan sobre una superficie y todas las
     funciones de dibujo se limitan al área de recorte para esa
     superficie.
   • Generalmente las funciones contienen un argumento width que
     representa el tamaño del borde del dibujo. Si tiene valor 0, la
     función pintará la figura entera como sólida.
   • La mayoría de las funciones aceptan un argumento color, que
     en general es una terna o tupla RGB.
                                                             www.unaj.edu.ar
Algoritmos y Programación




                  ¿Y estas funciones?
         • ¿Se acuerdan?
            – copy(): Realizamos una copia de la superficie. En
              este caso, de la ventana

            – blit(): Nos permite representar un objeto sobre
              una superficie.
         • ¿Para qué las usábamos?




                                                        www.unaj.edu.ar
Algoritmos y Programación

                Imagenes en PyGame
           Cargando imágenes ...
           • pygame.image.load(filename): return Surface
           • pygame.image.save(Surface, filename): return None




                                                            www.unaj.edu.ar
Algoritmos y Programación

                ¿Nos vamos al espacio?




                                         www.unaj.edu.ar
Algoritmos y Programación

                Eventos




                            El manejo de
                            eventos está
                            sólo aquí (QUI
                              www.unaj.edu.ar
Algoritmos y Programación




                  Manejo de Eventos
 import pygame, sys, os
 from pygame.locals import *
 .
 .
 .
 .


 while True:
   events=pygame.event.get()

    for event in events:          Este bucle sencillo ejecuta el
       if event.type == QUIT:     programa hasta que el evento
           pygame.quit()          QUIT se produzca.
           sys.exit()
                                                       www.unaj.edu.ar
Algoritmos y Programación




                  Manejo de Eventos
       Existe un módulo especial para manejar eventos.
       Los eventos se manejan a través de una cola de
       eventos.
       Se manejan como objetos que contienen un tipo de
       evento y un conjunto de datos de sólo lectura.
       Funciones get y poll: Obtienen eventos de la cola y
       los elimina.
             •   pygame.event.get(): return EventList
             •   pygame.event.poll(): return Event


                                                        www.unaj.edu.ar
Algoritmos y Programación




                  Manejo de Eventos
            Event.type:
      Eventos relacionados al mouse:
        MOUSEMOTION – MOUSEBUTTONUP – MOUSEBUTTONDOWN -
      Eventos relacionados al teclado:
        KEYDOWN – KEYUP
      Eventos relacionados al Joystick
        JOYAXISMOTION – JOYBALLMOTION – JOYHATMOTION -
        JOYBUTTONUP - JOYBUTTONDOWN
      Eventos generales
        QUIT – ACTIVEEVENT - VIDEORESIZE - VIDEOEXPOSE
      Se pueden generar eventos definidos por el usuario.


                                                   www.unaj.edu.ar
Algoritmos y Programación

                ¿Nos vamos al espacio?(parte II)
                             Establecemos la sup a mover

                                          En nuestro caso, el que
                                          delimita al cohete
                              Obtenemos los eventos de la cola de
                              eventos


                              event.type:KEYDOWN / KEYUP / etc
                              event.key: código tecla

                                     Muestro las imágenes y
                                     actualizo el rectángulo que
                                     contiene al cohete




                                                            www.unaj.edu.ar
Algoritmos y Programación

                Resumiendo   Evento            atributos
                             QUIT              none
Resumiendo...
                             ACTIVEEVENT       gain, state
  pygame.event.get() o       KEYDOWN           unicode, key, mod
pygame.event.poll()          KEYUP             key, mod
en un loop ....              MOUSEMOTION       pos, rel, buttons
  event.type                 MOUSEBUTTONUP     pos, button
  Dependiendo del            MOUSEBUTTONDOWN   pos, button
  evento:                    JOYAXISMOTION     joy, axis, value
                             JOYBALLMOTION     joy, ball, rel

                             JOYHATMOTION      joy, hat, value

                             JOYBUTTONUP       joy, button
                             JOYBUTTONDOWN     joy, button

                             VIDEORESIZE       size
                             VIDEOEXPOSE       none

                             USEREVENT         code
                                                         www.unaj.edu.ar
Algoritmos y Programación

                ¿Llegamos a la luna?
         Textos ...
          fuente=pygame.font.SysFont(None, 48)
          texto=fuente.render(' Llegaste! ', True, (255,255,255), (255,0,0)))




                                                                      www.unaj.edu.ar
Algoritmos y Programación




                            Recursion




                                        www.unaj.edu.ar
Algoritmos y Programación




                  Conceptos
         • La recursión es una técnica de programación muy
           poderosa, en la cual una función realiza llamadas
           a misma en pos de resolver un problema.

         • Razones para su uso:
              – Problemas “casi” irresolubles con las estructuras iterativas.
              – Soluciones elegantes.
              – Soluciones más simples.




                                                                        www.unaj.edu.ar
Algoritmos y Programación




                  Identificación de casos
         • En las funciones recursivas bien definidas se
           puede identificar dos elementos:
            – Caso Base: Se da cuando el calculo es tan
              simple que se puede resolver directamente sin
              necesidad de hacer una llamada recursiva.
            – Caso Recursivo: aquí la función realiza
              algunas operaciones con las que se reduce la
              complejidad del problema y luego realiza un
              llamado a si misma.


                                                      www.unaj.edu.ar
Algoritmos y Programación




                  Comenzando...

         • Codificar una función que tome un parámetro
           numérico y que cuente hacia atrás comenzando
           desde el numero ingresado.




                                                   www.unaj.edu.ar
Algoritmos y Programación




                  Resolución en Python


                                        Caso Base: Cuando el
                                        parametro es 0, la función
                                        imprime “Fin!” y termina.




                              Caso Recursivo: Cuando el parametro
                              distinto de 0, la función imprime el
                              parametro y vuelve a invocar a la función
                              con el parametro disminuido en 1.

                                                              www.unaj.edu.ar
Algoritmos y Programación




                  Ejecución




                            Resultado de ejecutar la función recursiva
                            enviandole como parametro el numero 3.



                                                                         www.unaj.edu.ar
Algoritmos y Programación




      Pila de Ejecución


                            Imprime 3 en la consola y
                            realiza un llamado
                            recursivo con n-1=3-1=2




                            cuenta_atras

                            n=3


                                                        www.unaj.edu.ar
Algoritmos y Programación




      Pila de Ejecución
                            Imprime 2 en la consola
                            y realiza un llamado
                            recursivo con n-1=2-1=1


                               cuenta_atras

                               n=2



                               cuenta_atras

                               n=3



                                                      www.unaj.edu.ar
Algoritmos y Programación




      Pila de Ejecución
                      cuenta_atras

           Imprime 1 en la consola   n=1
           y realiza un llamado
           recursivo con n-1=1-1=0

                                     cuenta_atras

                                     n=2



                                     cuenta_atras

                                     n=3



                                                    www.unaj.edu.ar
Algoritmos y Programación                                cuenta_atras

                                                         n=0


      Pila de Ejecución
                                                         cuenta_atras

                  Imprime “Fin!” y termina la funcion.   n=1



                                                         cuenta_atras

                                                         n=2



                                                         cuenta_atras

                                                         n=3


                                                                        www.unaj.edu.ar
Algoritmos y Programación                      cuenta_atras

                                               n=0


      Pila de Ejecución
                                               cuenta_atras
         Cuando concluye el llamado
                •
         recursivo la ejecucion se retoma en
         este punto                            n=1
                •

                                               cuenta_atras

                                               n=2



                                               cuenta_atras

                                               n=3


                                                              www.unaj.edu.ar
Algoritmos y Programación




      Pila de Ejecución
                •
                •




                            Finaliza la ejecución del programa.




                                                            www.unaj.edu.ar
Algoritmos y Programación




                  Backtracking
         • El backtracking (ó vuelta atrás) es una estrategia
           para solucionar problemas utilizando algoritmos
           recursivos.

         • El backtracking va construyendo soluciones
           parciales a medida que progresa la ejecución del
           algoritmo recursivo. Estas soluciones parciales van
           construyendo una solución completa.



                                                        www.unaj.edu.ar
Algoritmos y Programación




                  Backtracking
         • El algoritmo tiene éxito si, procediendo de esta
           forma, se puede encontrar una solución.
              – En este caso el algoritmo puede bien detenerse (si solo
                se necesita una solución) o bien seguir buscando
                soluciones alternativas (si se necesitan todas).
         • Por otra parte, el algoritmo falla si en alguna etapa
           la solución parcial construida hasta el momento no
           se puede completar.
              – En tal caso, el recorrido vuelve atrás eliminando sobre la
                marcha los elementos que se hubieran añadido en cada
                etapa.

                                                                  www.unaj.edu.ar
Algoritmos y Programación




                  Ejemplo con backtracking

         • Codificar una función que tome una lista de
           números y retorne una tupla en la cual contenga
           en la primera posición el promedio y en la segunda
           los números de la lista mayores al promedio.




                                                      www.unaj.edu.ar
Algoritmos y Programación
                            mayores_al_promedio   mayores_al_promedio
Ejemplo con backtracking
               lista=[]                           lista=[4]
                            suma_total=10         suma_total=6
                            cantidad=4            cantidad=3


                                                  mayores_al_promedio
                                                  lista=[3,4]
                                                  suma_total=3
                                                  cantidad=2


                                                  mayores_al_promedio
                                                  lista=[2,3,4]
                                                  suma_total=1
                                                  cantidad=1


                                                  mayores_al_promedio
                                                  lista=[1,2,3,4]
                                                  suma_total=0
                                                  cantidad=0
                                                                    www.unaj.edu.ar
Algoritmos y Programación
                                mayores_al_promedio   mayores_al_promedio
Ejemplo con backtracking
               lista=[]                               lista=[4]
         Retorna una tupla con el suma_total=10
                                  promedio            suma_total=6
         y una lista vacia.       cantidad=4          cantidad=3


                                                      mayores_al_promedio
                                                      lista=[3,4]
                                                      suma_total=3
                                                      cantidad=2


                                                      mayores_al_promedio
                                                      lista=[2,3,4]
                                                      suma_total=1
                                                      cantidad=1


                                                      mayores_al_promedio
                                                      lista=[1,2,3,4]
                                                      suma_total=0
                                                      cantidad=0
                                                                        www.unaj.edu.ar
Algoritmos y Programación
                                       mayores_al_promedio
Ejemplo con backtracking               lista=[4]
                                       suma_total=6
                                       cantidad=3

Cuando concluye el llamado             mayores_al_promedio
recursivo la ejecucion se retoma en
                                       lista=[3,4]
este punto
                                       suma_total=3
                                       cantidad=2


                                       mayores_al_promedio
                                       lista=[2,3,4]
   Retorna una tupla con el promedio   suma_total=1
   y la lista [4].                     cantidad=1


                                       mayores_al_promedio
                                       lista=[1,2,3,4]
                                       suma_total=0
                                       cantidad=0
                                                         www.unaj.edu.ar
Algoritmos y Programación


Ejemplo con backtracking

Cuando concluye el llamado             mayores_al_promedio
recursivo la ejecucion se retoma en
                                       lista=[3,4]
este punto
                                       suma_total=3
                                       cantidad=2


                                       mayores_al_promedio
                                       lista=[2,3,4]
   Retorna una tupla con el promedio   suma_total=1
   y la lista [4].
              [4,3].                   cantidad=1


                                       mayores_al_promedio
                                       lista=[1,2,3,4]
                                       suma_total=0
                                       cantidad=0
                                                         www.unaj.edu.ar
Algoritmos y Programación


Ejemplo con backtracking

Cuando concluye el llamado
recursivo la ejecucion se retoma en
este punto



                                       mayores_al_promedio
                                       lista=[2,3,4]
   Retorna una tupla con el promedio   suma_total=1
   y la lista [4].
              [4,3].                   cantidad=1


                                       mayores_al_promedio
                                       lista=[1,2,3,4]
                                       suma_total=0
                                       cantidad=0
                                                         www.unaj.edu.ar
Algoritmos y Programación


Ejemplo con backtracking

Cuando concluye el llamado
recursivo la ejecucion se retoma en
este punto




   Retorna una tupla con el promedio
   y la lista [4].
              [4,3].


                                       mayores_al_promedio
                                       lista=[1,2,3,4]
                                       suma_total=0
                                       cantidad=0
                                                         www.unaj.edu.ar
Algoritmos y Programación


Ejemplo con backtracking




                            Finaliza el programa e imprime
                            como resultado (2, [4,3])

                                                    www.unaj.edu.ar
Algoritmos y Programación




                  Recursividad infinita
         • Si una función recursiva no alcanza nunca el caso
           base, seguirá haciendo llamadas recursivas para
           siempre y nunca terminaría. Esta circunstancia se
           conoce como recursion infinita.

         • Un programa con recursividad infinita no se
           ejecuta realmente para siempre. Python informara
           con un mensaje de error cuando se alcance el
           nivel máximo de recursividad.


                                                      www.unaj.edu.ar
Algoritmos y Programación



                  Ejemplos
                               Ejemplo de una función que al no
                               definir un caso base y ser
              def recurre():   invocada, esta no finaliza nunca.
               recurre()




                                   En este caso se llama a la función
                                   con un dato en el parametro que
                                   hace que nunca se alcance el caso
                                   base.
                                                                   www.unaj.edu.ar
Algoritmos y Programación




                  Calculando el factorial
         • Se necesita un función en Python para calcular el
           numero factorial de un numero pasado por
           parámetro.
         • La definición matemática del factorial es la
           siguiente:




                                                       www.unaj.edu.ar
Algoritmos y Programación




                  Alternativas
         • Existen dos alternativas para resolver el problema
           del calculo del factorial:
            – Codificar una función iterativa.
            – Codificar una función recursiva.




                                                       www.unaj.edu.ar
Algoritmos y Programación




                  Versiones del Factorial


                 Versión Iterativa   Versión Recursiva




                                                         www.unaj.edu.ar
Algoritmos y Programación




                  Comparación
         • Ahora si comparamos las dos alternativas:
            – ambas están basadas en una estructura de
              control.
            – ambas involucran repetición.
            – ambas incluyen una condición para terminar.
            – Si no se tiene cuidado en ambas se puede
              incurrir en un loop infinito.




                                                      www.unaj.edu.ar
Algoritmos y Programación




                  ¿Recursión o Iteración?
         • Ventajas de la Recursión ya conocidas:
            – Soluciones simples, claras.
            – Soluciones elegantes.
            – Soluciones a problemas complejos.




                                                    www.unaj.edu.ar
Algoritmos y Programación




                  ¿Recursión o Iteración?
   • Desventajas de la Recursión: INEFICIENCIA
      – Sobrecarga asociada con las llamadas recursivas,
        una llamada puede generar un gran numero de
        llamadas recursivas.(factorial_recursivo(n) genera n
        llamadas recursivas)
   • ¿La claridad compensa la sobrecarga?
   • El valor de la recursividad reside en el hecho de que
     se puede usar para resolver problemas sin fácil
     solución iterativa.


                                                     www.unaj.edu.ar

Más contenido relacionado

Similar a PyGame y recursión

Explicacion de pygame para python de la UTN de Argentina
Explicacion de pygame para python de la UTN de ArgentinaExplicacion de pygame para python de la UTN de Argentina
Explicacion de pygame para python de la UTN de Argentinaalvarogabrielmedici
 
Primeros pasos con Python: Manipulando imágenes ⟷
Primeros pasos con Python: Manipulando imágenes ⟷Primeros pasos con Python: Manipulando imágenes ⟷
Primeros pasos con Python: Manipulando imágenes ⟷Rodolfo Ferro
 
Curso de Scratch Día 1 (CPETIG)
Curso de Scratch Día 1 (CPETIG)Curso de Scratch Día 1 (CPETIG)
Curso de Scratch Día 1 (CPETIG)Programamos
 
Tutorial monkey-jam
Tutorial monkey-jamTutorial monkey-jam
Tutorial monkey-jamTaller PNFP
 
Optimización de Contenido Flash para Móviles
Optimización de Contenido Flash para MóvilesOptimización de Contenido Flash para Móviles
Optimización de Contenido Flash para MóvilesEdgar Parada
 
Programación de Videojuegos con Python y Pilas (VII)
Programación de Videojuegos con Python y Pilas (VII)Programación de Videojuegos con Python y Pilas (VII)
Programación de Videojuegos con Python y Pilas (VII)Fernando Salamero
 
Introducción a swing. taller de programación 2016
Introducción a swing. taller de programación 2016Introducción a swing. taller de programación 2016
Introducción a swing. taller de programación 2016angeles104
 
Analisis de magnitudes fisicas
Analisis de magnitudes fisicasAnalisis de magnitudes fisicas
Analisis de magnitudes fisicasyeikel
 
Analisis de magnitudes fisicas
Analisis de magnitudes fisicasAnalisis de magnitudes fisicas
Analisis de magnitudes fisicasyeikel
 
Interfaces Usuario 3
Interfaces Usuario 3Interfaces Usuario 3
Interfaces Usuario 3Milaly
 

Similar a PyGame y recursión (20)

Intro pygamev2
Intro pygamev2Intro pygamev2
Intro pygamev2
 
Intro PygameCapitulo 3
Intro PygameCapitulo 3Intro PygameCapitulo 3
Intro PygameCapitulo 3
 
Programación con Pygame I
Programación con Pygame IProgramación con Pygame I
Programación con Pygame I
 
Trabajo de programacion grafica
Trabajo de programacion graficaTrabajo de programacion grafica
Trabajo de programacion grafica
 
Explicacion de pygame para python de la UTN de Argentina
Explicacion de pygame para python de la UTN de ArgentinaExplicacion de pygame para python de la UTN de Argentina
Explicacion de pygame para python de la UTN de Argentina
 
Primeros pasos en pyqt
Primeros pasos en pyqtPrimeros pasos en pyqt
Primeros pasos en pyqt
 
Primeros pasos con Python: Manipulando imágenes ⟷
Primeros pasos con Python: Manipulando imágenes ⟷Primeros pasos con Python: Manipulando imágenes ⟷
Primeros pasos con Python: Manipulando imágenes ⟷
 
Introduccion a awt
Introduccion a awtIntroduccion a awt
Introduccion a awt
 
Curso de Scratch Día 1 (CPETIG)
Curso de Scratch Día 1 (CPETIG)Curso de Scratch Día 1 (CPETIG)
Curso de Scratch Día 1 (CPETIG)
 
Tutorial monkey-jam
Tutorial monkey-jamTutorial monkey-jam
Tutorial monkey-jam
 
Optimización de Contenido Flash para Móviles
Optimización de Contenido Flash para MóvilesOptimización de Contenido Flash para Móviles
Optimización de Contenido Flash para Móviles
 
Primeros Pasos en PyQt4
Primeros Pasos en PyQt4Primeros Pasos en PyQt4
Primeros Pasos en PyQt4
 
Programación de Videojuegos con Python y Pilas (VII)
Programación de Videojuegos con Python y Pilas (VII)Programación de Videojuegos con Python y Pilas (VII)
Programación de Videojuegos con Python y Pilas (VII)
 
Introducción a swing. taller de programación 2016
Introducción a swing. taller de programación 2016Introducción a swing. taller de programación 2016
Introducción a swing. taller de programación 2016
 
Analisis de magnitudes fisicas
Analisis de magnitudes fisicasAnalisis de magnitudes fisicas
Analisis de magnitudes fisicas
 
Analisis de magnitudes fisicas
Analisis de magnitudes fisicasAnalisis de magnitudes fisicas
Analisis de magnitudes fisicas
 
Unity
UnityUnity
Unity
 
Interfaces Usuario 3
Interfaces Usuario 3Interfaces Usuario 3
Interfaces Usuario 3
 
Programación con Pygame IX
Programación con Pygame IXProgramación con Pygame IX
Programación con Pygame IX
 
Intro Pygame Capitulo 2
Intro Pygame Capitulo 2Intro Pygame Capitulo 2
Intro Pygame Capitulo 2
 

Más de Jorge Gamez

Más de Jorge Gamez (19)

Python i
Python iPython i
Python i
 
Clase 6 excepciones
Clase 6   excepcionesClase 6   excepciones
Clase 6 excepciones
 
Practica repaso 4 5 2da
Practica repaso 4 5 2daPractica repaso 4 5 2da
Practica repaso 4 5 2da
 
Practica repaso 1 3-2
Practica repaso 1 3-2Practica repaso 1 3-2
Practica repaso 1 3-2
 
Practica repaso pilas y colas con archivos
Practica repaso pilas y colas   con archivosPractica repaso pilas y colas   con archivos
Practica repaso pilas y colas con archivos
 
Practica repaso pilas y colas
Practica repaso pilas y colasPractica repaso pilas y colas
Practica repaso pilas y colas
 
Practica 5
Practica  5Practica  5
Practica 5
 
Practica 4
Practica  4Practica  4
Practica 4
 
Practica 3
Practica  3Practica  3
Practica 3
 
Practica 2
Practica  2Practica  2
Practica 2
 
Practica 1
Practica  1Practica  1
Practica 1
 
Practica repaso 1 3-2
Practica repaso 1 3-2Practica repaso 1 3-2
Practica repaso 1 3-2
 
Clase5
Clase5Clase5
Clase5
 
Clase4
Clase4Clase4
Clase4
 
Clase3
Clase3Clase3
Clase3
 
Clase1
Clase1Clase1
Clase1
 
Clase archivos
Clase   archivosClase   archivos
Clase archivos
 
2 da clase la ingeniería
2 da clase  la ingeniería2 da clase  la ingeniería
2 da clase la ingeniería
 
Presentación clase 3
Presentación clase 3Presentación clase 3
Presentación clase 3
 

PyGame y recursión

  • 1. Algoritmos y Programación Clase 2: Repaso PyGame - Recursión www.unaj.edu.ar
  • 2. Algoritmos y Programación Temario • Repaso de PyGame – Funciones básicas – Animaciones y Juegos sencillos – Manejo de eventos • Recursión – Definicion de Recursion. – Pila de Ejecucion. – Backtracking – Recursion infinita. – Recursion vs Iteracion. www.unaj.edu.ar
  • 3. Algoritmos y Programación Repaso: PyGame www.unaj.edu.ar
  • 4. Algoritmos y Programación ¿Qué es PyGame? • PyGame es un conjunto de módulos escritos en Python diseñados para escribir juegos en dos dimensiones. • Incluye gráficos y bibliotecas de sonido diseñadas para ser utilizadas directamente bajo Python. • No es nuevo: desde año 2000... • Es portable y libre. • Url: http://www.pygame.org/ www.unaj.edu.ar
  • 5. Algoritmos y Programación Modulos PyGame • Vamos a ver primero algunos módulos para realizar gráficos sencillos. – Cómo crear una ventana y dibujar luego en ella. • PyGame provee varios módulos para representar líneas, polígonos, círculos, etc. • Para utilizarlos, debemos importar la librería PyGame y otras más que serán necesarias: import pygame import pygame import os import os Import sys Import sys from pygame.locals import ** from pygame.locals import www.unaj.edu.ar
  • 6. Algoritmos y Programación Inicialización • Luego de importar las librerías, hay que inicializar el módulo: pygame.init() pygame.init() • ¿Abrimos una ventana? ventana = pygame.display.set_mode((ancho,alto)) ventana = pygame.display.set_mode((ancho,alto)) pygame.display.set_caption(‘TítuloVentana') pygame.display.set_caption(‘TítuloVentana') www.unaj.edu.ar
  • 7. Algoritmos y Programación Ventanas www.unaj.edu.ar
  • 8. Algoritmos y Programación El módulo Draw • Permite trabajar con las siguientes formas: rect polygon circle rect polygon circle ellipse arc ellipse arc line lines line lines aaline aaline aalines aalines • Los dibujos se realizan sobre una superficie y todas las funciones de dibujo se limitan al área de recorte para esa superficie. • Generalmente las funciones contienen un argumento width que representa el tamaño del borde del dibujo. Si tiene valor 0, la función pintará la figura entera como sólida. • La mayoría de las funciones aceptan un argumento color, que en general es una terna o tupla RGB. www.unaj.edu.ar
  • 9. Algoritmos y Programación ¿Y estas funciones? • ¿Se acuerdan? – copy(): Realizamos una copia de la superficie. En este caso, de la ventana – blit(): Nos permite representar un objeto sobre una superficie. • ¿Para qué las usábamos? www.unaj.edu.ar
  • 10. Algoritmos y Programación Imagenes en PyGame Cargando imágenes ... • pygame.image.load(filename): return Surface • pygame.image.save(Surface, filename): return None www.unaj.edu.ar
  • 11. Algoritmos y Programación ¿Nos vamos al espacio? www.unaj.edu.ar
  • 12. Algoritmos y Programación Eventos El manejo de eventos está sólo aquí (QUI www.unaj.edu.ar
  • 13. Algoritmos y Programación Manejo de Eventos import pygame, sys, os from pygame.locals import * . . . . while True: events=pygame.event.get() for event in events: Este bucle sencillo ejecuta el if event.type == QUIT: programa hasta que el evento pygame.quit() QUIT se produzca. sys.exit() www.unaj.edu.ar
  • 14. Algoritmos y Programación Manejo de Eventos Existe un módulo especial para manejar eventos. Los eventos se manejan a través de una cola de eventos. Se manejan como objetos que contienen un tipo de evento y un conjunto de datos de sólo lectura. Funciones get y poll: Obtienen eventos de la cola y los elimina. • pygame.event.get(): return EventList • pygame.event.poll(): return Event www.unaj.edu.ar
  • 15. Algoritmos y Programación Manejo de Eventos Event.type: Eventos relacionados al mouse: MOUSEMOTION – MOUSEBUTTONUP – MOUSEBUTTONDOWN - Eventos relacionados al teclado: KEYDOWN – KEYUP Eventos relacionados al Joystick JOYAXISMOTION – JOYBALLMOTION – JOYHATMOTION - JOYBUTTONUP - JOYBUTTONDOWN Eventos generales QUIT – ACTIVEEVENT - VIDEORESIZE - VIDEOEXPOSE Se pueden generar eventos definidos por el usuario. www.unaj.edu.ar
  • 16. Algoritmos y Programación ¿Nos vamos al espacio?(parte II) Establecemos la sup a mover En nuestro caso, el que delimita al cohete Obtenemos los eventos de la cola de eventos event.type:KEYDOWN / KEYUP / etc event.key: código tecla Muestro las imágenes y actualizo el rectángulo que contiene al cohete www.unaj.edu.ar
  • 17. Algoritmos y Programación Resumiendo Evento atributos QUIT none Resumiendo... ACTIVEEVENT gain, state pygame.event.get() o KEYDOWN unicode, key, mod pygame.event.poll() KEYUP key, mod en un loop .... MOUSEMOTION pos, rel, buttons event.type MOUSEBUTTONUP pos, button Dependiendo del MOUSEBUTTONDOWN pos, button evento: JOYAXISMOTION joy, axis, value JOYBALLMOTION joy, ball, rel JOYHATMOTION joy, hat, value JOYBUTTONUP joy, button JOYBUTTONDOWN joy, button VIDEORESIZE size VIDEOEXPOSE none USEREVENT code www.unaj.edu.ar
  • 18. Algoritmos y Programación ¿Llegamos a la luna? Textos ... fuente=pygame.font.SysFont(None, 48) texto=fuente.render(' Llegaste! ', True, (255,255,255), (255,0,0))) www.unaj.edu.ar
  • 19. Algoritmos y Programación Recursion www.unaj.edu.ar
  • 20. Algoritmos y Programación Conceptos • La recursión es una técnica de programación muy poderosa, en la cual una función realiza llamadas a misma en pos de resolver un problema. • Razones para su uso: – Problemas “casi” irresolubles con las estructuras iterativas. – Soluciones elegantes. – Soluciones más simples. www.unaj.edu.ar
  • 21. Algoritmos y Programación Identificación de casos • En las funciones recursivas bien definidas se puede identificar dos elementos: – Caso Base: Se da cuando el calculo es tan simple que se puede resolver directamente sin necesidad de hacer una llamada recursiva. – Caso Recursivo: aquí la función realiza algunas operaciones con las que se reduce la complejidad del problema y luego realiza un llamado a si misma. www.unaj.edu.ar
  • 22. Algoritmos y Programación Comenzando... • Codificar una función que tome un parámetro numérico y que cuente hacia atrás comenzando desde el numero ingresado. www.unaj.edu.ar
  • 23. Algoritmos y Programación Resolución en Python Caso Base: Cuando el parametro es 0, la función imprime “Fin!” y termina. Caso Recursivo: Cuando el parametro distinto de 0, la función imprime el parametro y vuelve a invocar a la función con el parametro disminuido en 1. www.unaj.edu.ar
  • 24. Algoritmos y Programación Ejecución Resultado de ejecutar la función recursiva enviandole como parametro el numero 3. www.unaj.edu.ar
  • 25. Algoritmos y Programación Pila de Ejecución Imprime 3 en la consola y realiza un llamado recursivo con n-1=3-1=2 cuenta_atras n=3 www.unaj.edu.ar
  • 26. Algoritmos y Programación Pila de Ejecución Imprime 2 en la consola y realiza un llamado recursivo con n-1=2-1=1 cuenta_atras n=2 cuenta_atras n=3 www.unaj.edu.ar
  • 27. Algoritmos y Programación Pila de Ejecución cuenta_atras Imprime 1 en la consola n=1 y realiza un llamado recursivo con n-1=1-1=0 cuenta_atras n=2 cuenta_atras n=3 www.unaj.edu.ar
  • 28. Algoritmos y Programación cuenta_atras n=0 Pila de Ejecución cuenta_atras Imprime “Fin!” y termina la funcion. n=1 cuenta_atras n=2 cuenta_atras n=3 www.unaj.edu.ar
  • 29. Algoritmos y Programación cuenta_atras n=0 Pila de Ejecución cuenta_atras Cuando concluye el llamado • recursivo la ejecucion se retoma en este punto n=1 • cuenta_atras n=2 cuenta_atras n=3 www.unaj.edu.ar
  • 30. Algoritmos y Programación Pila de Ejecución • • Finaliza la ejecución del programa. www.unaj.edu.ar
  • 31. Algoritmos y Programación Backtracking • El backtracking (ó vuelta atrás) es una estrategia para solucionar problemas utilizando algoritmos recursivos. • El backtracking va construyendo soluciones parciales a medida que progresa la ejecución del algoritmo recursivo. Estas soluciones parciales van construyendo una solución completa. www.unaj.edu.ar
  • 32. Algoritmos y Programación Backtracking • El algoritmo tiene éxito si, procediendo de esta forma, se puede encontrar una solución. – En este caso el algoritmo puede bien detenerse (si solo se necesita una solución) o bien seguir buscando soluciones alternativas (si se necesitan todas). • Por otra parte, el algoritmo falla si en alguna etapa la solución parcial construida hasta el momento no se puede completar. – En tal caso, el recorrido vuelve atrás eliminando sobre la marcha los elementos que se hubieran añadido en cada etapa. www.unaj.edu.ar
  • 33. Algoritmos y Programación Ejemplo con backtracking • Codificar una función que tome una lista de números y retorne una tupla en la cual contenga en la primera posición el promedio y en la segunda los números de la lista mayores al promedio. www.unaj.edu.ar
  • 34. Algoritmos y Programación mayores_al_promedio mayores_al_promedio Ejemplo con backtracking lista=[] lista=[4] suma_total=10 suma_total=6 cantidad=4 cantidad=3 mayores_al_promedio lista=[3,4] suma_total=3 cantidad=2 mayores_al_promedio lista=[2,3,4] suma_total=1 cantidad=1 mayores_al_promedio lista=[1,2,3,4] suma_total=0 cantidad=0 www.unaj.edu.ar
  • 35. Algoritmos y Programación mayores_al_promedio mayores_al_promedio Ejemplo con backtracking lista=[] lista=[4] Retorna una tupla con el suma_total=10 promedio suma_total=6 y una lista vacia. cantidad=4 cantidad=3 mayores_al_promedio lista=[3,4] suma_total=3 cantidad=2 mayores_al_promedio lista=[2,3,4] suma_total=1 cantidad=1 mayores_al_promedio lista=[1,2,3,4] suma_total=0 cantidad=0 www.unaj.edu.ar
  • 36. Algoritmos y Programación mayores_al_promedio Ejemplo con backtracking lista=[4] suma_total=6 cantidad=3 Cuando concluye el llamado mayores_al_promedio recursivo la ejecucion se retoma en lista=[3,4] este punto suma_total=3 cantidad=2 mayores_al_promedio lista=[2,3,4] Retorna una tupla con el promedio suma_total=1 y la lista [4]. cantidad=1 mayores_al_promedio lista=[1,2,3,4] suma_total=0 cantidad=0 www.unaj.edu.ar
  • 37. Algoritmos y Programación Ejemplo con backtracking Cuando concluye el llamado mayores_al_promedio recursivo la ejecucion se retoma en lista=[3,4] este punto suma_total=3 cantidad=2 mayores_al_promedio lista=[2,3,4] Retorna una tupla con el promedio suma_total=1 y la lista [4]. [4,3]. cantidad=1 mayores_al_promedio lista=[1,2,3,4] suma_total=0 cantidad=0 www.unaj.edu.ar
  • 38. Algoritmos y Programación Ejemplo con backtracking Cuando concluye el llamado recursivo la ejecucion se retoma en este punto mayores_al_promedio lista=[2,3,4] Retorna una tupla con el promedio suma_total=1 y la lista [4]. [4,3]. cantidad=1 mayores_al_promedio lista=[1,2,3,4] suma_total=0 cantidad=0 www.unaj.edu.ar
  • 39. Algoritmos y Programación Ejemplo con backtracking Cuando concluye el llamado recursivo la ejecucion se retoma en este punto Retorna una tupla con el promedio y la lista [4]. [4,3]. mayores_al_promedio lista=[1,2,3,4] suma_total=0 cantidad=0 www.unaj.edu.ar
  • 40. Algoritmos y Programación Ejemplo con backtracking Finaliza el programa e imprime como resultado (2, [4,3]) www.unaj.edu.ar
  • 41. Algoritmos y Programación Recursividad infinita • Si una función recursiva no alcanza nunca el caso base, seguirá haciendo llamadas recursivas para siempre y nunca terminaría. Esta circunstancia se conoce como recursion infinita. • Un programa con recursividad infinita no se ejecuta realmente para siempre. Python informara con un mensaje de error cuando se alcance el nivel máximo de recursividad. www.unaj.edu.ar
  • 42. Algoritmos y Programación Ejemplos Ejemplo de una función que al no definir un caso base y ser def recurre(): invocada, esta no finaliza nunca. recurre() En este caso se llama a la función con un dato en el parametro que hace que nunca se alcance el caso base. www.unaj.edu.ar
  • 43. Algoritmos y Programación Calculando el factorial • Se necesita un función en Python para calcular el numero factorial de un numero pasado por parámetro. • La definición matemática del factorial es la siguiente: www.unaj.edu.ar
  • 44. Algoritmos y Programación Alternativas • Existen dos alternativas para resolver el problema del calculo del factorial: – Codificar una función iterativa. – Codificar una función recursiva. www.unaj.edu.ar
  • 45. Algoritmos y Programación Versiones del Factorial Versión Iterativa Versión Recursiva www.unaj.edu.ar
  • 46. Algoritmos y Programación Comparación • Ahora si comparamos las dos alternativas: – ambas están basadas en una estructura de control. – ambas involucran repetición. – ambas incluyen una condición para terminar. – Si no se tiene cuidado en ambas se puede incurrir en un loop infinito. www.unaj.edu.ar
  • 47. Algoritmos y Programación ¿Recursión o Iteración? • Ventajas de la Recursión ya conocidas: – Soluciones simples, claras. – Soluciones elegantes. – Soluciones a problemas complejos. www.unaj.edu.ar
  • 48. Algoritmos y Programación ¿Recursión o Iteración? • Desventajas de la Recursión: INEFICIENCIA – Sobrecarga asociada con las llamadas recursivas, una llamada puede generar un gran numero de llamadas recursivas.(factorial_recursivo(n) genera n llamadas recursivas) • ¿La claridad compensa la sobrecarga? • El valor de la recursividad reside en el hecho de que se puede usar para resolver problemas sin fácil solución iterativa. www.unaj.edu.ar