到达define-struct中的特定项

时间:2013-12-17 19:39:00

标签: scheme racket

我真的对某些事情感到困惑,我会尽力正确地说出我的问题,希望你能理解。它可能有点长,所以首先要感谢你花时间阅读这篇文章。

我试图创建一个游戏,其名称是"相同"在Racket 5.0.2版本中。

以下是对游戏的解释:http://download.racket-lang.org/docs/5.0.2/html/games/same.html?q=games

我用磁盘创建了一个表并绘制它:

a: width
b: height
r: radius

    (define (color x)  ///for random colors
      (cond [(< (random x) 100) 'blue]
            [(< (random x) 200) 'purple]
            [(< (random x) 300) 'yellow]
            [(< (random x) 400) 'red]
            [else 'green]))

    (define-struct top (coord color))
    (define (row x y)
      (if (> x (- a r)) empty
          (cons (make-top (make-posn x y)(color 500)) (row (+ x (* 2 r)) y))))

    (define (draw-row L)
      (if (empty? L) #f
          (and
            (draw-solid-disk (top-coord (first L)) r (top-color (first L)))
            (draw-row (rest L)))))

    (define (board x y)
      (if (> y (- b r)) empty
          (cons (row x y) (board x (+ y (* 2 r))))))

    (for-each draw-row (board 20 20))

所以我有200个随机颜色的磁盘......(每行有20个磁盘)

我最大的问题是:

1)要删除磁盘,播放器将输入特定的行和列。我是否有条件进行各种选择?

if line=1 and column=1, delete this disk and its same colored adjacent disks
if line=5 and column=7, delete that disk and its same colored adjacent disks

我希望你有一些更容易的替代方法,因为它看起来极具挑战性。

2)如何比较许多列表中的磁盘颜色?告诉我的问题很难,但我会尝试。

    (define table (board 20 20))      
    (define row1 (list-ref table 0))
    (list-ref row1 0)

它将返回:

(make-top (make-posn 20 20) 'yellow)

如何在此处获得&#39;黄色?如果我到达,我怎么能将它与其他颜色进行比较?

任何想法都会很棒!我已经考虑了这些问题2天了,但我仍然无法做任何事情。

我不应该使用可变结构

1 个答案:

答案 0 :(得分:3)

结构带有内置访问器:

> (define my-top (make-top (make-posn 20 20) 'yellow))
> (top-color my-top)
'yellow
> (top-coord my-top)
(make-posn 20 20)
> (top? my-top)
true