Advertisement
juaniisuar

Untitled

May 1st, 2016
376
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.10 KB | None | 0 0
  1. (define ANCHO 600) ; ancho de la escena donde se encuentra la mosca
  2. (define ALTO 600) ; alto de la escena donde se encuentra la mosca
  3. (define DELTA 60) ; cantidad de movimiento de la mosca en cada paso
  4.  
  5. ; El estado del sistema será un par de numeros que representan la coordenada x e y de una mosca, respectivamente
  6. ; Estado inicial del sistema:
  7. (define Inicio (make-posn (/ ANCHO 2) (/ ALTO 2)))
  8.  
  9. (define radiomosca 20) ; radio del circulo que representa a la mosca
  10. (define GAMMA radiomosca) ; distancia aceptada para atrpar a la mosca
  11. (define mosca (circle radiomosca "solid" "black")) ; gráfico de la mosca
  12. (define ESTADO-FINAL (make-posn -100 -100)) ; estado imposible de llegar normalmente donde consideraremos terminado el juego
  13.  
  14. ; pantalla : make-posn -> Image
  15. ; transforma el estado del sistema en una imagen a mostrar a través de la cláusula to-draw
  16. ; la imagen se muestra dado el par, o muestra un texto si llegamos a ESTADO-FINAL
  17. (define (pantalla p) (if (end? p) (text "MOSCA ATRAPADA" 56 "Green") (place-image mosca (posn-x p) (posn-y p) (empty-scene ANCHO ALTO)) ) )
  18.  
  19. ; elegir-random : A B -> A or B
  20. ; tomando dos valores cualesquiera, la función devuelve alguno de esos dos valores, aleatoriamente
  21. (define (elegir-random a b) (if (= (random 2) 0) a b))
  22.  
  23. ; tecla : make-posn Key -> make-posn
  24. ; transforma el estado del sistema en otro donde la mosca se ha movido DELTA unidades
  25. ; la dirección del movimiento está dada por la dirección de Key
  26. ; el movimiento sólo se efectúa si realizándolo la mosca no se escapa de la pantalla visible
  27. (define (tecla I k) (cond ((key=? k "left") (if (>= (- (posn-x I) DELTA) radiomosca) (make-posn (- (posn-x I) DELTA) (posn-y I)) I))
  28. ((key=? k "right") (if (<= (+ (posn-x I) DELTA) (- ANCHO radiomosca)) (make-posn (+ (posn-x I) DELTA) (posn-y I)) I) )
  29. ((key=? k "up") (if (>= (- (posn-y I) DELTA) radiomosca) (make-posn (posn-x I) (- (posn-y I) DELTA)) I))
  30. ((key=? k "down") (if (<= (+ (posn-y I) DELTA) (- ALTO radiomosca)) (make-posn (posn-x I) (+ (posn-y I) DELTA)) I))
  31. (else I)
  32. ))
  33.  
  34. ; mousehandler : make-posn Number Number -> make-posn
  35. ; transforma el estado del sistema en ESTADO-FINAL si clickeamos dentro del rango aceptable para ganar el juego dada la constante GAMMA
  36. ; de otro modo el estado del sistema se mantiene
  37. (define (mousehandler I x y event) (cond ((string=? event "button-down") (if (or (<= (abs (- (posn-x I) x)) GAMMA) (<= (abs (- (posn-y I) y)) GAMMA)) ESTADO-FINAL I ))
  38. (else I)
  39. ))
  40.  
  41. ; randmov : make-posn -> make-posn
  42. ; transforma el estado del sistema en otro donde la mosca se mueva en dirección elegida aleatoriamente
  43. (define (randmov I) (if (elegir-random #t #f) I ;#t -> quedarse, #f -> moverse
  44. (if (elegir-random #t #f) ;#t -> moverse vertical, #f -> moverse horizontal
  45. (if (elegir-random #t #f) ;#t -> moverse arriba, #f -> moverse abajo
  46. (tecla I "up") (tecla I "down"))
  47. (if (elegir-random #t #f) ;#t -> moverse izquierda, #f -> moverse derecha
  48. (tecla I "left") (tecla I "right")))))
  49.  
  50. ; randmov : make-posn -> Boolean
  51. ; comprueba si el juego ha termiado cuando el estado del sistema equivale a ESTADO-FINAL
  52. (define (end? I) (if (= (posn-x I) (posn-x ESTADO-FINAL)) #t #f))
  53.  
  54. ; Expresión big-bang que responde al mouse, incorporando además una condición para terminar la ejecución del programa
  55. ; Inicialmente, se invoca a la función pantalla con el estado inicial.
  56. ; Luego, por cada tick del reloj, la mosca se mueve aleatoriamente
  57. ; El controlador de eventos del mouse chequea si hemos clickeado a la mosca dentro del rango aceptable GAMMA
  58. ; Finalmente paramos cuando nuestra función end? retorna verdadero
  59. (big-bang Inicio
  60. (to-draw pantalla)
  61. (on-tick randmov)
  62. (on-mouse mousehandler)
  63. (stop-when end?)
  64. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement