0

私は多くの問題を抱えている問題に取り組んでいます。問題のコンセプトは、レンガを使ってピラミッドを作ることです。レンガのピラミッド全体が窓の中央に配置されています。レンガを 1 つ、次に 2 つ、次に 3 つまで、ピラミッドの底部を構成する 12 まで描画できますが、すべてのレンガはウィンドウの中央に配置されるのではなく、ウィンドウの左側の左端に配置されます。

getWidth() と getHeight() を使用すると、 (getWidth()-BRICK_WIDTH) / 2; を実行できます。ブリックの x 座標の中心を取得します。そして (getHeight() -BRICK_HEIGHT) / 2; 1 つのレンガの y 座標の中心。唯一の問題は、そのコードを入力する場所がわからないため、すべてのレンガに適用されるため、レンガの各行がウィンドウの中央に配置されることです。

import acm.program.*;
import acm.graphics.*;

public class Pyramid extends GraphicsProgram {
  public void run() {
    double xCoordinate = (getWidth() - BRICKWIDTH) / 2;
    double yCoordinate = (getHeight() - BRICK_HEIGHT / 2);
    for (int i = 0; i < BRICKS_IN_BASE; i++) {
      for (int j = 0; j < i; j++) {
        double x = j * BRICK_WIDTH;
        double y = i * BRICK_HEIGHT;
        GRect square = new GRect(x, y, BRICK_WIDTH, BRICK_HEIGHT);
        add(square);
      }
    }
  }
  private static final int BRICK_WIDTH = 50;
  private static final int BRICK_HEIGHT = 25;
  private static final int BRICKS_IN_BASE = 12;
}
4

2 に答える 2

0

あなたはそのようなことを意味しますか?

    double x = xCoordinate + j * BRICK_WIDTH;
    double y = yCoordinate + i * BRICK_HEIGHT;
于 2012-11-25T10:04:43.757 に答える
0

次のようなことを試してください:

import acm.program.*;
import acm.graphics.*;

public class Pyramid extends GraphicsProgram
{
    public void run()
    {
        // We calculate some values in order to center the pyramid vertically
        int pyramidHeight = BRICKS_IN_BASE * BRICK_HEIGHT;
        double pyramidY = (getHeight() - pyramidHeight) / 2;

        // For each brick layer...
        for (int i=BRICKS_IN_BASE ; i >= 1; i--)
        {
            // We calculate some values in order to center the layer horizontally
            int layerWidth = BRICKWIDTH * i;
            double layerX = (getWidth() - layerWidth) / 2;
            double layerY = pyramidY + (i-1) * BRICK_HEIGHT;

            // For each brick in the layer...
            for(int j=0 ; j<i ; j++)
            {
                GRect square = new GRect(layerX + j*BRICK_WIDTH, layerY, BRICK_WIDTH, BRICK_HEIGHT);
                add(square);
            }
        }
    }

    private static final int BRICK_WIDTH = 50;
    private static final int BRICK_HEIGHT = 25;
    private static final int BRICKS_IN_BASE = 12;
}

この実装では、最初にレイヤーのグローバルな幅を計算し (その中にいくつのレンガがあるかを既に知っているため)、それを使用してレイヤーのグローバルな「開始点」を見つけます。すべての長方形の座標。

于 2012-11-25T10:10:38.133 に答える