2014-03-29 33 views
0

我是新來的Racket語言。我有一個任務,我們必須編寫一個遊戲,擲出兩個骰子,並使用他們的總和來確定一次勝利。當我運行它,它應該說,例如:多個位圖調用不起作用

You threw X and Y which makes a throw of Z. 
(X, Y, and Z are number values) 

但是,對於全部學分必須,所以我嘗試使用每個骰子臉的圖像使用的圖形表示。現在我只想輸出這樣的:

(image of first die) and (image of second die) 

我的代碼看起來是這樣的:

(define (showDice) 
    (bitmap "path_of_first_die_image") 
    (display "and") 
    (bitmap "path_of_second_die_image")) 

當我運行它但只打印了「和」的最後形象,就像這樣:

and (image of second die) 
+0

'bitmap'不是計劃的一部分;也不需要'也不''2htdp/image'。建議刪除Scheme標籤。 – GoZoner

回答

0

在Scheme中,只有define的最後一個值是返回值。 display調用不是返回值。 第一個位圖不顯示在屏幕上,因爲它不是一個返回值,也沒有顯式顯示。 "and"不是返回值,但顯式顯示。 第二個位圖是一個返回值,因此由DrRacket自動顯示。 (其實計劃和Lisp都這樣做,但顯示的圖像是DrRacket的特產)

具有包含三個要素一個返回值,你可以這樣寫:

(define (showDice) 
    (list 
    (bitmap "path_of_first_die_image") 
    'and 
    (bitmap "path_of_second_die_image"))) 

(showDice) 

顯示的三個要素通過DrRacket,但輸出對用戶來說不是很好。 所以如果你想要更多地控制屏幕上顯示值的方式,你可以在屏幕上自己設定值display,不用返回值,也不需要依靠DrRacket捕獲返回值來顯示它們,這裏是你可以做的事情工作示例):

#lang racket 
(require 2htdp/image) 

(define (showDice) 
    (display (bitmap icons/b-run.png)) 
    (display " and ") 
    (display (bitmap icons/stop-16x16.png))) 

(showDice) 

注意的showDice返回值是(display (bitmap icons/stop-16x16.png))的價值,這是沒有的(或者,更準確地說,#<void>),因爲display是定義不返回值。

(另請注意,在方案的功能在所有情況下與字之間的破折號通常命名,所以人們會命名功能show-dice。)

+0

我以一種不同的方式結束了它(我使用了frame%和message%來顯示所有內容),但是非常感謝!我一定會考慮你對下一個的建議。 – Dave

+0

@dave請記住接受Metaxal的回答。 – soegaard