我真的对某些事情感到困惑,我会尽力正确地说出我的问题,希望你能理解。它可能有点长,所以首先要感谢你花时间阅读这篇文章。
我试图创建一个游戏,其名称是"相同"在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天了,但我仍然无法做任何事情。
我不应该使用可变结构
答案 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