gnurobots

Scheme言語でロボットを操って得点を競うゲームだそうです。

f:id:S_E_Hyphen:20170408162321p:plain

「報酬」を捕ったら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)
;;;;;;;;;;;;;;;;;;;;;;;;