《程序设计方法(第二版)》第三章 习题47

本文介绍如何使用Scheme编程创建一个互动程序,通过键盘操作调整角色的开心值,并利用`render`函数实现快乐值影响元素长度。关键点在于定义`tockhs`、`pethske`和`renderhs`函数,以及整体的程序流程。
摘要由CSDN通过智能技术生成

        这个作业的关键点就是在设定一个函数可以接受键盘的"up"和"donw"键,这个键可以调整开心值,然后设定这个"render"函数,可以根据开心值调整长度,这样就可以了。


(require 2htdp/image)
(require 2htdp/universe)


(define BACKGROUND (empty-scene 100 20))

(check-expect (tock 100) 99.9)
(check-expect (tock 50) 49.9)
(check-expect (tock 0) 0)

;;tock
; HapinessState -> HappinessState
;随着时间增加快乐减少
(define (tock hs)
  (cond
    [(> hs 0) (- hs .1)]
    [else 0]))

(check-expect (pet 100 "down") 100)
(check-expect (pet 50 "down") 60)
(check-expect (pet 0 "down") 0)
(check-expect (pet 100 "up") 100)
(check-expect (pet 30 "up") 40)
(check-expect (pet 0 "up") 0)

;;pet
; HappinessState String -> HappinessState
;上箭头快乐值+1/5,下箭头快乐值+1/3
(define (pet hs ke)
  (cond
    [(= hs 100) 100]
    [(= hs 0) 0]
    [else (cond
    [(string=? ke "down") (+ hs (/ hs 5))]
    [(string=? ke "up") (+ hs (/ hs 3))])]))

;;render
(check-expect (render 0) (place-image/align (rectangle 0 20 "solid" "red") 0 0 "left" "top" BACKGROUND)) 
(check-expect (render 50) (place-image/align (rectangle 50 20 "solid" "red") 0 0 "left" "top" BACKGROUND)) 
(check-expect (render 100) (place-image/align (rectangle 100 20 "solid" "red") 0 0 "left" "top" BACKGROUND))

(define (render hs)
  (place-image/align (rectangle hs 20 "solid" "red") 0 0 "left" "top" BACKGROUND))
;;stop-when
; HappinessState -> End of Program
; 当快乐值为0时程序终止

;;main
; HappinessState -> HappinessState
; 以快乐值为100开始

(define (gauge-prog hs)
  (big-bang 100
    [on-tick tock]
    [on-draw render]
    [on-key pet]
    [stop-when zero?]))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橡胶张小说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值