Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;; Integrantes: ... (Nombre y Num. Legajo).
- (require "extras.rkt")
- (require 2htdp/image)
- (require 2htdp/universe)
- ;; Definiciones principales:
- ;; ========================
- (define LABERINTO (bitmap "laberinto.png")) ;...
- (define FANTASMA (bitmap "fantasma.png"))
- (define JUGADOR (circle 10 "solid" "blue"))
- (define OBJETIVO (star 15 "solid" "yellow"))
- (define ALTO (image-height LABERINTO))
- (define ANCHO (image-width LABERINTO))
- (define CENTRO (make-posn (/ ANCHO 2) (/ ALTO 2)))
- (define POS-INICIAL (make-posn 15 35))
- (define POS-OBJETIVO (make-posn 930 460))
- (define COLOR-FONDO "red")
- (define DELTA-MOV 10)
- (define TIMER-INICIAL 5000)
- (define VIDAS-INICIAL 3)
- ;; Estado global del programa:
- ;; ==========================
- (define-struct estado [Posj Posf Vidas Timer])
- ; estado es (make-estado posn posn Image)
- ; Posj es un posn que representa la posición en el plano del jugador
- ; Posf es un posn que representa la posición del fantasma
- ; Vidas es la cantidad de intentos que tiene el jugador antes de perder
- ; Timer es el tiempo que falta antes de que el jugador pierda
- ;; actualizar-timer : Number Estado -> Estado
- ;; ..................................
- ;; actualizar-vidas : Number Estado -> Estado
- ;; ..................................
- ;; actualizar-fantasma : Posn Estado -> Estado
- ;; ..................................
- ;; actualizar-jugador : Posn Estado -> Estado
- ;; ..................................
- ;; Imprimir en la pantalla:
- ;; =======================
- ;; dibujar-imagen : Imagen Posn Imagen -> Imagen
- ; ...
- (define (dibujar-imagen Im1 Pos Im2) (place-image Im1 (posn-x Pos) (posn-y Pos) Im2))
- ;; dibujar-laberinto : Imagen -> Imagen
- ; ...
- (define (dibujar-laberinto Im1) (dibujar-imagen LABERINTO CENTRO Im1))
- ;; dibujar-jugador : Estado Imagen -> Imagen
- ;; ..................................
- (define (dibujar-jugador S Im1) (dibujar-imagen JUGADOR (estado-Posj S) Im1))
- ;; dibujar-objetivo : Imagen -> Imagen
- ;; ..................................
- (define (dibujar-objetivo Im1) (dibujar-imagen OBJETIVO POS-OBJETIVO Im1))
- ;; dibujar-timer : Estado Imagen -> Imagen
- ;; ..................................
- ;; dibujar-vidas : Estado Imagen -> Imagen
- ;; ..................................
- ;; dibujar-texto : String Imagen -> Imagen
- ;; ..................................
- ;; dibujar-fantasma : Estado Imagen -> Imagen
- ;; ..................................
- (define (dibujar-fantasma S Im1) (dibujar-imagen FANTASMA (estado-Posf S) Im1))
- ;; fondo : Color -> Imagen
- ;; ..................................
- (define (fondo C) (empty-scene ANCHO ALTO C))
- ;; imprimir : Estado Color -> Imagen
- ;; ..................................
- (define (imprimir S C) (dibujar-jugador S (dibujar-objetivo (dibujar-laberinto (fondo C) ) ) ) )
- ;; grafica : Estado -> Imagen
- ;; ..................................
- (define (grafica S) (imprimir S COLOR-FONDO) )
- ;; Mover objetos:
- ;; =============
- ;; move-up : Posn Number -> Posn
- ;; ..................................
- (define (move-up Pos N) (make-posn (posn-x Pos) (- (posn-y Pos) N)))
- ;; move-down : Posn Number -> Posn
- ;; ..................................
- (define (move-down Pos N) (make-posn (posn-x Pos) (+ (posn-y Pos) N)))
- ;; move-left : Posn Number -> Posn
- ;; ..................................
- (define (move-left Pos N) (make-posn (- (posn-x Pos) N) (posn-y Pos) ))
- ;; move-right : Posn Number -> Posn
- ;; ..................................
- (define (move-right Pos N) (make-posn (+ (posn-x Pos) N) (posn-y Pos) ))
- ;; mover-fantasma : Posn -> Posn
- ;; ..................................
- ;; Posiciones:
- ;; ==========
- ;; dentro-escena? : Posn Imagen -> Boolean
- ;; ..................................
- (define (dentro-escena? Pos Im1) (cond [(< (- (posn-x Pos) (/ (image-width Im1) 2)) 0) #f]
- [(> (+ (posn-x Pos) (/ (image-width Im1) 2)) ANCHO) #f]
- [(< (- (posn-y Pos) (/ (image-height Im1) 2)) 0) #f]
- [(> (+ (posn-y Pos) (/ (image-height Im1) 2)) ALTO) #f]
- [else #t]) )
- ;; posible-pos? : Posn Imagen -> Boolean
- ;; ..................................
- (define (posible-pos? Pos Im1) ( if (and (dentro-escena? Pos Im1) (not (interseca? Pos Im1 CENTRO LABERINTO))) #t #f ) )
- ;; Eventos del teclado:
- ;; ===================
- ;; manejador-tecla : Estado Tecla -> Estado
- ;; ..................................
- (define (manejador-tecla S Key) (cond [(string=? Key "left") (if (posible-pos? (move-left (estado-Posj S) DELTA-MOV) JUGADOR) (make-estado (move-left (estado-Posj S) DELTA-MOV) (estado-Posf S) (estado-Vidas S) (estado-Timer S)) S)]
- [(string=? Key "right") (if (posible-pos? (move-right (estado-Posj S) DELTA-MOV) JUGADOR) (make-estado (move-right (estado-Posj S) DELTA-MOV) (estado-Posf S) (estado-Vidas S) (estado-Timer S)) S)]
- [(string=? Key "up") (if (posible-pos? (move-up (estado-Posj S) DELTA-MOV) JUGADOR) (make-estado (move-up (estado-Posj S) DELTA-MOV) (estado-Posf S) (estado-Vidas S) (estado-Timer S)) S)]
- [(string=? Key "down") (if (posible-pos? (move-down (estado-Posj S) DELTA-MOV) JUGADOR) (make-estado (move-down (estado-Posj S) DELTA-MOV) (estado-Posf S) (estado-Vidas S) (estado-Timer S)) S)]
- [else S]) )
- ;; Otros handlers:
- ;; ==============
- ;; manejador-tick : Estado -> Estado
- ;; ..................................
- ;; Condiciones de Terminación:
- ;; ==========================
- ;; interseca-fantasma? : Estado -> Boolean
- ;; ..................................
- ;; objetivo? : Estado -> Boolean
- ;; ..................................
- ;; fin? : Estado -> Boolean
- ;; ..................................
- ;; estado-inicial : Estado
- ;; ..................................
- (define estado-inicial (make-estado POS-INICIAL (make-posn 50 50) VIDAS-INICIAL TIMER-INICIAL))
- (big-bang estado-inicial
- [to-draw grafica]
- [on-key manejador-tecla]
- ;; [on-tick manejador-tick]
- ;; [stop-when fin?]
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement