Advertisement
albertohilal

Clase 10 Ejemplo 3.2.a

Oct 16th, 2017
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.67 KB | None | 0 0
  1. import pygame
  2. import sys
  3. BLANCO = (255, 255, 255)
  4. ROJO = (255, 0, 0)
  5. X = 0
  6. Y = 1
  7. ABAJO = 1
  8. ARRIBA = -1
  9. MEDIDA_PANTALLA = (640, 480)
  10. def Pelota(pantalla, posicion):
  11. pygame.draw.circle(pantalla, ROJO, posicion, 50)
  12.  
  13.  
  14. def DibujarPantalla(pantalla, estado):
  15. Pelota(pantalla, estado["posicion"])
  16.  
  17. '''La actualizacion del estado se torna un poco mas compleja dado que es preciso realizar la
  18. actualizacion de ambos elementos del estado: por un lado actualizar la direccion y por otro
  19. lado actualizar la posicion para que la figura avance en la direccion establecida.'''
  20.  
  21. '''El primer paso en la actualizacion entonces sera evaluar si es necesario realizar el cambio
  22. de direccion. Hay dos momentos para hacerlo: cuando la figura entra en contacto con la
  23. parte inferior de la pantalla y cuando la figura vuelve a la posicion inicial. Fuera de estos dos
  24. casos, la direccion debe permanecer inmutable.'''
  25.  
  26. def actualizarEstado(estado):
  27.  
  28. if estado["posicion"][Y] >= 480 - 50: # Si llega al Borde de pantalla
  29. dir = ARRIBA
  30. elif estado["posicion"][Y] <= 240:
  31. # Si alcanza la posicion inicial
  32. dir = ABAJO
  33. else:
  34. # De lo contrario, continuamos en la misma direccion
  35. dir = estado["direccion"]
  36.  
  37. pos = (estado["posicion"][X], estado["posicion"][Y] + dir)
  38.  
  39. '''El valor 480 corresponde al alto de pantalla.
  40. Dado que la posicion establece el centro de la pelota,
  41. es necesario restarle el radio de la pelota (50)
  42. para que la pelota no traspase el borde inferior de la pantalla.
  43. El valor 240 es la mitad del valor de la altura de pantalla
  44. y tambien es la posicion inicial de la pelota en el eje y.
  45. El segundo paso sera aplicar la actualizacion de la posicion de acuerdo a la direccion de
  46. la pelota:'''
  47. '''Si la direccion es ABAJO, entonces hay que sumarle una unidad a la coordenada y de la
  48. posicion de la pelota. Caso contrario, si la direccion es ARRIBA,
  49. se debe restar una unidad a la coordenada y de la posicion de la pelota.
  50. Este ultimo codigo lo simplicaremos, aprovechando que las constantes ABAJO y ARRIBA
  51. son los numeros 1 y -1'''
  52.  
  53. # Retorno el nuevo estado
  54. return {
  55. "posicion" : pos,
  56. "direccion" : dir
  57. }
  58. def EjecutarCiclo():
  59. estado = {
  60. "posicion": (320, 240),
  61. "direccion": ABAJO
  62. }
  63. pygame.init()
  64. pantalla = pygame.display.set_mode( MEDIDA_PANTALLA )
  65. reloj = pygame.time.Clock()
  66. while True:
  67. estado = actualizarEstado(estado)
  68. pantalla.fill(BLANCO)
  69. DibujarPantalla(pantalla, estado)
  70. pygame.display.flip()
  71. tick = reloj.tick(60)
  72.  
  73. if __name__ == "__main__":
  74. EjecutarCiclo()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement