0

コードのトラブルシューティングに助けが必要です。私は最初のJavaクラスを取っているので、かなり基本的です。基本的に、switch ステートメントを使用して一連の 3 つの家を描画する必要がありますが、各家は別の場所に別の壁の色で描画されます。その下には、私が延々と遊んできたコードがあります。

public class Neighborhood extends Applet {
public void paint (Graphics page) { 
    int xOffset = 50; 
    int yOffset = 0; 
    Color houseColor = Color.yellow; 

switch (houseColor) { 
case 0: houseColor = Color.red; 
case 1: houseColor = Color.blue; 
case 2: houseColor = Color.green; 




  Polygon poly = new Polygon();                // Roof Polygon
  poly.addPoint (50,90);
  poly.addPoint (150, 50);
  poly.addPoint (250, 90);
  page.setColor (new Color(218,165,32));      // Custom brown color
  page.fillPolygon (poly);

  page.setColor (Color.black);  
  page.drawLine (50, 90, 150, 50);     // Roof outline
  page.drawLine (150, 50, 250, 90);

  page.setColor (Color.green);            
  page.fillRect (50, 90, 200, 100);  // House base with houseColor
  page.setColor (Color.black);  
  page.drawRect (50, 90, 200, 100);  // House outline

  page.setColor (Color.black);
  page.fillRect (75, 110, 30, 25);   // Window 1
  page.fillRect (190, 110, 30, 25);  // Window 2    

  page.setColor (Color.white);
  page.drawLine (75, 123, 105, 123);   // Window Frame 1
  page.drawLine (89, 110, 89, 134);
  page.fillRect (70, 110, 5, 25);      // Shutter 1
  page.fillRect (105, 110, 5, 25);     // Shutter 2

  page.drawLine (75+115, 123, 105+115, 123);   // Window Frame 2
  page.drawLine (89+115, 110, 89+115, 134);
  page.fillRect (70+115, 110, 5, 25);     // Shutter 3
  page.fillRect (105+115, 110, 5, 25);     // Shutter 4

  page.setColor (Color.red);
  page.fillRect (130, 150, 35, 40);  // Door

  page.setColor (Color.blue);           
  page.fillOval (155, 170, 4, 4);    // Door knob
}
}}

それはかなり簡単で、やり取りしたり、クレイジーなことをしたりする必要はありません。私はこのコードを動作させるために約 100 万回変更しましたが、より良い目で見る時が来たことに気付きました。どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

0

まず、break ステートメントを忘れていることです。

switch (houseColor) { 
  case 0: houseColor = Color.red; break;
  case 1: houseColor = Color.blue; break;
  case 2: houseColor = Color.green; break;

休憩がない場合は、次のステートメントにフォールスルーします。また、色を使用していません。それは意図的なものですか?

3 つの家を描きたい場合は、次のようにします。

private void drawHouses() {
    // make an array of colors
    Color[] colors = new Color[] { Color.RED, Color.BLUE, Color.GREEN };

    // loop through the colors
    for(int i = 0 ; i < colors.length; i ++ ) {
       // use the index of the loop for the position of the house and for the current color.
       drawHouse(i * 50, 100, colors[i]);
    }
}

private void drawHouse(int x, int y, Color color) {
    // draw house here

}

また、現在、ハードコードされた値を使用しています。それは問題ありませんが、x および y パラメータをそれぞれ x 軸と y 軸に追加する必要があります。たとえば、100、150、50 × 50 の正方形を描画する場合、100 を x (100+x) ずつ、150 を y (150+y) ずつインクリメントする必要があります。

于 2013-07-08T19:57:12.280 に答える