2013-12-13 73 views
2

我試圖在Racket 5.0.2版本中創建名稱爲「Same」的遊戲。Racket中的繪圖臺/板

下面是遊戲的說明: 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))))) 

所以,我已經有了一個頂行包含20個磁盤隨機顏色。但是我需要20行10列的200個磁盤。所以我創建了一個這樣的板子:

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

但是我畫不出來。我試圖創建一個函數爲「繪製行」,但我得到了錯誤。

所以我的問題是:我該如何畫這個板子?

+0

你得到了哪個錯誤?你需要哪些圖書館? –

+0

我嘗試了很多東西,並得到了一堆錯誤...你可以在下面看到其中的一個。 無論如何,我爲每行調用了「draw-row」函數10次,現在我想要200個磁盤。但是,我不認爲這是做這件事的最好方法。順便說一下,我正在使用「draw.rkt」教程。 – sedooe

回答

1

可以繪製成一排,和一個電路板只是一個行的列表,所以我希望

(define (draw-board b) 
    (for-each draw-row b)) 

只是工作。

基於您的評論,我希望一個例子來工作:

(draw-board (board 10 10)) 

它確實對我來說,至少。

+0

「b」是這裏的行列表,對嗎?所以我叫這個功能: (畫板(20 20行)) 但我再次出現錯誤。 --->第一:期望非空列表;給::(make-top 20 20)'red) – sedooe

+0

'draw-row'使用'empty','first'和'rest',所以它需要一個列表。但是,'make-top'返回一個新的結構,而不是一個列表。看起來'draw-row'正在傳遞一個'top'而不是一個listOf'top'。 –

+0

感謝這個偉大的解決方案。 還有一件事,我是新來的,如果我對這個項目有更多的問題,我應該詢問這個主題還是創建一個新的問題? – sedooe