2012-01-09 2 views
4

だから私はHow To Designプログラム第2版の第1章を読むつもりです。私はかなり良い進歩を遂げたと信じています。しかし、グリッドに別のグラフィックを追加する "提案"があります。試してみるたびにエラーが出ます。この時点で、私は立ち往生しています。以下はコードとエラーです。関数本体で2つの関数呼び出しを行うことができないのはなぜですか?

注:ROCKETイメージは第1章にあります。これをコピーしてIDEに貼り付けます。

注:「提案」は:ロケットがシーンの底部よりも10ピクセル高い平らな岩盤に着陸するようにプログラムを変更するにはどうすればよいですか?景色を変えることを忘れないでください。

HTDP Chapter 1

ここで動作するコードです。

(define BOARDWIDTH 200) 
(define BOARDHEIGHT 200) 
(define STARTPOSITION 50) 
(define BOARDBKGR "blue") 
(define GAMEBOARD (empty-scene BOARDWIDTH BOARDHEIGHT BOARDBKGR)) 

(define ROCKET .) 
(define UFO (overlay (circle 10 "solid" "red") 
        (rectangle 40 4 "solid" "green"))) 
(define FLATBED (rectangle 60 10 "outline" "black")) 
(define (SPACESHIP option) 
    (cond 
    [(= option 1) ROCKET] 
    [(= option 2) UFO])) 
(define SHOWNSHIP (SPACESHIP 1)) 

(define V 20) ;Velocity 
(define A 1) ;Acceleration 

(define (distance t) ;t = Time 
    (- (* V t) (* 1/2 A (sqr t)))) 

(define SPACESHIP-BOTTOM (- BOARDHEIGHT (/ (image-height SHOWNSHIP) 2))) 

(define (render-shownship x y) 
    (place-image SHOWNSHIP x y GAMEBOARD)) 

(define (create-rocket-scene.v7 t) 
    (cond 
    [(<= (distance t) SPACESHIP-BOTTOM) 
    (render-shownship STARTPOSITION (distance t))] 
    [(> (distance t) SPACESHIP-BOTTOM) 
    (render-shownship STARTPOSITION SPACESHIP-BOTTOM)])) 

ここでは動作しないコードです:

(define BOARDWIDTH 200) 
(define BOARDHEIGHT 200) 
(define STARTPOSITION 50) 
(define BOARDBKGR "blue") 
(define GAMEBOARD (empty-scene BOARDWIDTH BOARDHEIGHT BOARDBKGR)) 

(define ROCKET .) 
(define UFO (overlay (circle 10 "solid" "red") 
        (rectangle 40 4 "solid" "green"))) 
(define FLATBED (rectangle 60 10 "outline" "black")) 
(define (SPACESHIP option) 
    (cond 
    [(= option 1) ROCKET] 
    [(= option 2) UFO])) 
(define SHOWNSHIP (SPACESHIP 1)) 

(define V 20) ;Velocity 
(define A 1) ;Acceleration 

(define (distance t) ;t = Time 
    (- (* V t) (* 1/2 A (sqr t)))) 

(define SPACESHIP-BOTTOM (- BOARDHEIGHT (/ (image-height SHOWNSHIP) 2))) 

(define (render-shownship x y) 
    (place-image SHOWNSHIP x y GAMEBOARD) 
    (place-image FLATBED STARTPOSITION 195 GAMEBOARD)) ;offender 

(define (create-rocket-scene.v7 t) 
    (cond 
    [(<= (distance t) SPACESHIP-BOTTOM) 
    (render-shownship STARTPOSITION (distance t))] 
    [(> (distance t) SPACESHIP-BOTTOM) 
    (render-shownship STARTPOSITION SPACESHIP-BOTTOM)])) 

そして、私が手にエラーがある:

は定義:関数本体のための唯一の表現を期待しますが、 を見つけました1余分部分

答えて

4

place-image alw aysは、配置されるイメージ、x座標とy座標、イメージを配置するシーン(背景)の4つの引数をとります。あなたのコードの問題は、式(place-image FLATBED STARTPOSITION 195)place-imageに3つの入力しか提供していないことです。

したがって、少しバックアップしてください。最初の式は、何がを生成しますか? (place-image SHOWNSHIP x y GAMEBOARD)は、それを搭載したゲームボードシーンを生成します。正しいですか?今すぐの上にあるのシーンは、さらにFLATBEDにしたいと思っています。したがって、プレース画像関数の呼び出しを順序付ける代わりに、とすることを検討してください。つまり、欠けている部分は、(place-image FLATBED STARTPOSITION 195 ____)にありますか?どんなシーンであなたはFLATBEDを置いていいですか? (ヒント:私はちょうど上記に答えました)。その表現はどのような表現を生み出しますか? (ヒント:あなたはすでにその式を持っています)。

あなたのアイデアを理解していれば、あなたが(代わりにあなたがしようとしているとして、それらを配列決定の)あなたが関数呼び出しを構成するか、巣、現場に複数の画像を配置することを参照してください。

(place-image img1 x1 y1 (place-image img2 x2 y2 ...)) 
+0

すごいです!あなたのヒントはそのトリックをしました。私の答えは次のとおりです。((宇宙船-BOTTOMを定義する - BOARDHEIGHT (/(像高SHOWNSHIP)2) (/(像高FLATBED)2))) (定義(レンダリングshownshipのXYを) (place-イメージフラットベッドスタジオ195 (場所イメージショーネイションxyゲームボーイ))) – dotnetN00b

+0

これに解決策を隠してください。これは宿題の問題であり、ソリューションがまさにそこにあったなら、問題のポイントは損なわれるでしょう。 – dyoo

+0

そうは思わない。私がやっていたことは本の演習でさえありません。あなたはリンクを見ましたか?また、これは自習/学習です。私はクラスを取っていません。しかし、司会者が私の答えをスポイラータグに入れたいと思ったら。どうぞ。 – dotnetN00b

関連する問題