You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DrRacket的bigbang函数中结合handle-key与on-tick实现蛇移动?

在DrRacket的bigbang中实现贪吃蛇方向移动逻辑

核心是把方向状态存入游戏数据结构,让on-tick触发的next-game根据当前方向计算移动,handle-key只负责修改方向状态,两者配合实现持续移动效果。

1. 调整蛇的数据结构

给蛇的结构体增加dir字段,用符号'up/'down/'left/'right表示当前移动方向:

(define SPEED 10)
; 蛇的结构:x坐标、y坐标、长度、当前方向
(define-struct snake (x y l dir))

2. 实现按键处理函数handle-key

根据按键修改蛇的方向,可选增加“禁止直接反向”的逻辑(符合贪吃蛇常规规则):

(define (handle-key s key)
  (cond
    [(key=? key "left") 
     (if (not (symbol=? (snake-dir s) 'right))
         (make-snake (snake-x s) (snake-y s) (snake-l s) 'left)
         s)] ; 当前向右时,按左键不改变方向
    [(key=? key "right") 
     (if (not (symbol=? (snake-dir s) 'left))
         (make-snake (snake-x s) (snake-y s) (snake-l s) 'right)
         s)]
    [(key=? key "up") 
     (if (not (symbol=? (snake-dir s) 'down))
         (make-snake (snake-x s) (snake-y s) (snake-l s) 'up)
         s)]
    [(key=? key "down") 
     (if (not (symbol=? (snake-dir s) 'up))
         (make-snake (snake-x s) (snake-y s) (snake-l s) 'down)
         s)]
    [else s])) ; 其他按键不改变状态

3. 实现next-game函数

根据当前方向计算蛇的新位置,每次on-tick触发时自动更新:

(define (next-game s)
  (cond
    [(symbol=? (snake-dir s) 'right)
     (make-snake (+ (snake-x s) SPEED) (snake-y s) (snake-l s) 'right)]
    [(symbol=? (snake-dir s) 'left)
     (make-snake (- (snake-x s) SPEED) (snake-y s) (snake-l s) 'left)]
    [(symbol=? (snake-dir s) 'down)
     (make-snake (snake-x s) (+ (snake-y s) SPEED) (snake-l s) 'down)]
    [(symbol=? (snake-dir s) 'up)
     (make-snake (snake-x s) (- (snake-y s) SPEED) (snake-l s) 'up)]))

4. 配置bigbang

初始化蛇时指定初始方向,绑定on-tick和on-key:

; 你需要自己实现draw-snake函数,用于绘制蛇的图形
(define (draw-snake s)
  (rectangle (snake-x s) (snake-y s) 10 10 "solid" "green"))

(bigbang (make-snake 100 100 1 'right)
  [on-tick next-game 0.1] ; 每0.1秒执行一次next-game
  [on-key handle-key]
  [to-draw draw-snake])

逻辑说明

  • handle-key仅修改蛇的方向状态,不直接移动蛇
  • on-tick每隔固定时间调用next-game,根据当前方向计算新位置,实现持续移动
  • 若不需要禁止反向,可删除handle-key中的if判断,直接修改方向

内容的提问来源于stack exchange,提问作者Benz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:45:45