Scheme 太空船游戏计划

Scheme 太空船游戏计划,scheme,racket,Scheme,Racket,下面的方案代码是关于一个太空船的游戏,现在它不考虑太空船燃料耗尽的情况,这就是我正在尝试做的。下面是代码: ;; 这是问题集——月球着陆器的代码 (define (update ship-state fuel-burn-rate) (make-ship-state (+ (height ship-state) (* (velocity ship-state) dt)) ; height (+ (velocity ship-state) (* (- (*

下面的方案代码是关于一个太空船的游戏,现在它不考虑太空船燃料耗尽的情况,这就是我正在尝试做的。下面是代码:
;; 这是问题集——月球着陆器的代码

(define (update ship-state fuel-burn-rate)  
 (make-ship-state  
   (+ (height ship-state) (* (velocity ship-state) dt)) ; height  
   (+ (velocity ship-state)  
      (* (- (* engine-strength fuel-burn-rate) gravity)  
         dt))                                           ; velocity  
   (cond (<= (fuel 0)  
        ((write-line "no fuel left")   
          'game-over)  
         (else  
           (- (fuel ship-state) (* fuel-burn-rate dt))))))       ; fuel  

(define (lander-loop ship-state)  
  (show-ship-state ship-state)  
  (if (landed? ship-state)  
  (end-game ship-state)  
  (lander-loop (update ship-state (get-burn-rate)))))  

(define (show-ship-state ship-state)  
  (write-line   
    (list 'height (height ship-state)  
          'velocity (velocity ship-state)  
          'fuel (fuel ship-state))))  

(define (landed? ship-state)  
  (<= (height ship-state) 0))  

(define (end-game ship-state)  
  (let ((final-velocity (velocity ship-state)))  
       (write-line final-velocity)  
       (cond ((>= final-velocity safe-velocity)  
               (write-line "good landing")  
               'game-over)  
             (else  
               (write-line "you crashed!")  
               'game-over))))  

(define (get-burn-rate)  
  (if (= (player-input) burn-key)  
      1  
      0))  

(define (play) (lander-loop (initial-ship-state)))  

(define (initial-ship-state)  
  (make-ship-state 50       ; 50 km high  
                   0        ; not moving (0 km/sec)  
                   20))     ; 20 kg of fuel left  

(define dt 1)               ; 1 second interval of simulation  

(define gravity 0.5)        ; 0.5 km/sec/sec  

(define safe-velocity -0.5) ; 0.5 km/sec or faster is a crash  

(define engine-strength 1)  ; 1 kilonewton-second  

(define (player-input)  
  (char->integer (prompt-for-command-char " action: ")))  

(define burn-key 32)   ;space key  

(define (make-ship-state height velocity fuel)  
  (list 'HEIGHT   height  
        'VELOCITY velocity  
        'FUEL     fuel))  

(define (height state) (second state))  
(define (velocity state) (fourth state))  
(define (fuel state) (sixth state))  

(define (second l) (cadr l))  
(define (fourth l) (cadr (cddr l)))  
(define (sixth l) (cadr (cddr (cddr l))))  

; Users of DrScheme or DrRacket: add these for compatibility with MIT Scheme...  
(define (write-line x)  
  (display x)  
  (newline))  

(define (prompt-for-command-char prompt)  
  (display prompt)  
  (read-char))  
(define (update ship-state fuel-burn-rate)  
  (make-ship-state  
   (+ (height ship-state) (* (velocity ship-state) dt)) ; height  
   (+ (velocity ship-state)  
      (* (- (* engine-strength fuel-burn-rate) gravity)  
         dt))                                           ; velocity  
   (cond (<= (fuel 0)  
        ((write-line "no fuel left")   
          'game-over)  
         (else  
           (- (fuel ship-state) (* fuel-burn-rate dt))))))  
(定义(更新船舶状态燃料燃烧率)
(a)使船舶状态
(+(高度船舶状态)(*(速度船舶状态)dt));高度
(+(速度船舶状态)
(*(((*发动机强度燃油燃烧率)重力)
速度
(cond(整数(提示输入命令字符“action:”))
(定义刻录键32);空格键
(定义(使船舶状态为高度-速度-燃油)
(列表高度)
“速度
(燃料)
(定义(高度状态)(第二状态))
(定义(速度状态)(第四状态))
(定义(燃料状态)(第六状态))
(定义(第二个l)(cadr l))
(定义(第四个l)(cadr(cddr l)))
(定义(第六个l)(cadr(cddr(cddr l)))
;DrScheme或DrRacket的用户:添加这些以与MIT Scheme兼容。。。
(定义(写入第x行)
(显示器x)
(新行)
(定义(命令字符提示提示)
(显示提示)
(读字符)
为了修改它,我修改了“更新”过程,所以现在有一个条件语句:

(define (update ship-state fuel-burn-rate)  
  (make-ship-state  
   (+ (height ship-state) (* (velocity ship-state) dt)) ; height  
   (+ (velocity ship-state)  
      (* (- (* engine-strength fuel-burn-rate) gravity)  
         dt))                                           ; velocity  
   (cond (<= (fuel 0)  
        ((write-line "no fuel left")   
          'game-over)  
         (else  
           (- (fuel ship-state) (* fuel-burn-rate dt))))))  
(定义(更新船舶状态燃料燃烧率)
(a)使船舶状态
(+(高度船舶状态)(*(速度船舶状态)dt));高度
(+(速度船舶状态)
(*(((*发动机强度燃油燃烧率)重力)
速度

(cond(您需要将您的条件添加到
着陆器循环
过程中。这是代码的一部分,用于检查游戏是否已完成每个循环

(define (update ship-state fuel-burn-rate)  
  (make-ship-state  
   (+ (height ship-state) (* (velocity ship-state) dt)) ; height  
   (+ (velocity ship-state)  
      (* (- (* engine-strength fuel-burn-rate) gravity)  
         dt))                                           ; velocity  
   (cond (<= (fuel 0)  
        ((write-line "no fuel left")   
          'game-over)  
         (else  
           (- (fuel ship-state) (* fuel-burn-rate dt))))))  
(define (lander-loop ship-state)  
  (show-ship-state ship-state)
  (if (or (landed? ship-state) (<= (fuel ship-state) 0))
    (end-game ship-state)
    (lander-loop (update ship-state (get-burn-rate)))))
(定义(着陆器回路船舶状态)
(显示船舶状态船舶状态)
(如果(或(已着陆?船舶状态)(