Scheme言語でロボットを操って得点を競うゲームだそうです。
「報酬」を捕ったらScoreが1加算されます。
「餌」を食ったらEnergyが10?加算されます。
逆に「壁」や「敵」に突っ込んだらShieldが1枚減るようです。
とりあえず乱数で酔歩運動させてみました。
効率は無茶苦茶悪いけど、一応「報酬」や「餌」だけを食べているみたいです。
pythonの前にSchemeを覚えなくてはならなくなりました。
;;; 乱数 ;;;;;;;;;;;;;;
(define obj " ")
; 種 (seed)
(define *seed* 1)
; シードの設定
(define (srand x)
(set! *seed* x))
; 整数の一様乱数
(define (irand)
(set! *seed* (modulo (+ (* 69069 *seed*) 1) #x100000000))
*seed*)
; 実数の一様乱数
(define (random)
(* (/ 1.0 #x100000000) (irand)))
(define (make-number n)
(+ (modulo (quotient (irand) #x10000) n) 1))
;;;;;;;;;;;;;;;;;;;;;;;;
;;; 目前の物体を確認する;;
(define freq '("space" "wall" "baddie" "food" "prize"))
(define (grope-things freq)
(if (null? freq) #f
(if (robot-feel (car freq))
(car freq)
(grope-things (cdr freq))
)
)
)
;;;;;;;;;;;;;;;;;;;;;;;;
;;; 処理の定義 ;;;;;;;;;;
(define (grab-prize)
(robot-grab)
(robot-move 1)
(robot-turn (make-number 4))
)
(define (grab-food)
(robot-grab)
(robot-move 1)
(robot-turn (make-number 4))
)
(define (turn-wall)
(robot-turn (make-number 4))
)
(define (go-space)
(robot-move 1)
(robot-turn (make-number 4))
)
(define (zap-baddie)
(robot-zap)
(robot-move 1)
(robot-turn (make-number 4))
)
;;;;;;;;;;;;;;;;;;;;;;;;
;; メインループ ;;;;;;;;;;
(
define (main-loop)
(set! obj (grope-things freq))
(
cond
( (equal? obj "space") (go-space))
( (equal? obj "wall") (turn-wall))
( (equal? obj "baddie") (zap-baddie))
( (equal? obj "food") (grab-food))
( (equal? obj "prize") (grab-prize))
)
(main-loop))
(robot-turn 1)
(main-loop)
;;;;;;;;;;;;;;;;;;;;;;;;