Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;; The first three lines of this file were inserted by DrRacket. They record metadata
- ;; about the language level of this file in a form that our tools can easily process.
- #reader(lib "htdp-beginner-reader.ss" "lang")((modname bigbang2) (read-case-sensitive #t) (teachpacks ((lib "image.rkt" "teachpack" "2htdp") (lib "batch-io.rkt" "teachpack" "2htdp") (lib "universe.rkt" "teachpack" "2htdp"))) (htdp-settings #(#t constructor repeating-decimal #f #t none #f ((lib "image.rkt" "teachpack" "2htdp") (lib "batch-io.rkt" "teachpack" "2htdp") (lib "universe.rkt" "teachpack" "2htdp")) #f)))
- ; bigbang2.rkt
- ; Ejemplo de expresiones big-bang.
- ; Este programa debe ejecutarse en el siguiente contexto:
- ;; Lenguaje: Estudiante principiante. Paquetes de enseñanza: 2hdtp/image y universe
- ;; Si no hay ningún lenguaje y paquete cargado, descomentar las siguientes líneas:
- ;;;#lang racket
- ;;;(require 2htdp/image)
- ;;;(require 2htdp/universe)
- ; El estado del sistema será un número, que representa la longitud del radio de un círculo azul,
- ; a dibujarse en el centro de una escena.
- (define ALTO 300)
- (define ANCHO 300)
- (define RADIO 30)
- (define DELTA 25)
- (define INICIAL (/ ALTO 2))
- ; pantalla : Number -> Image
- ; transforma el estado del sistema en una imagen a mostrar a través de la cláusula to-draw
- (define (pantalla n)
- (place-image (circle RADIO "solid" "orange") (/ ALTO 2) n (empty-scene ANCHO ALTO)))
- ; incrementar : Number -> Number
- ; suma uno a su argumento
- (define (incrementar n) (if (= n (/ ALTO 2)) 0 (+ n 1)))
- ; decrementar : Number -> Number
- ; Devuelve el predecesor de un número positivo. Si el número es 0, devuelve 100.
- (define (decrementar n) (if (= n 0) 100 (- n 1)))
- (define (tecla n k) (cond
- ((key=? k " ") INICIAL)
- ((and (key=? k "down") (<= n (- ALTO RADIO))) (+ n DELTA))
- ((and (key=? k "up") (>= n RADIO)) (- n DELTA))
- ((number? (string->number k)) (* (string->number k) 10) )
- (else n)))
- (define (mouse-handler n x y event) (cond [(string=? event "button-down") y]
- [else n]))
- ; la siguiente expresión big-bang incorpora un manejador de eventos, asociado al paso del tiempo.
- (big-bang INICIAL ; estado inicial del sistema
- [to-draw pantalla]
- [on-key tecla]
- [on-mouse mouse-handler]
- ;[on-tick incrementar]
- )
- ; to-draw: al principio, y luego de manejar cualquier evento,
- ; se invoca la función pantalla pasando como argumento el valor del estado actual
- ; on-tick: Manejador de eventos. Cada vez que el reloj de la computadora avance uno (es decir, cuando se produce el evento "tick"),
- ; invocar a la función decrementar.
- ; El resultado de esta función será el nuevo estado del sistema.
- ; Recuerde que luego de invocar a cualquier manejador de eventos (decrementar en este caso), se invoca a la función pantalla.
- ; PRESIONE ejecutar y vea qué sucede. Ahora reemplace el manejador del evento on-tick por la función incrementar y ejecute nuevamente.
- ; EJERCICIO: Invente tres preguntas del estilo "Qué pasa si..." e implemente las respuestas en DrRacket.
- ; Algunos ejemplos: "Qué pasa si hago que decrementar reste uno siempre, aun cuando su argumento es 0"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement