0

すべてがより管理しやすいように、一部の (見苦しい) コードを関数に変換しようとしています。しかし、私は問題、現在のコードに来ました:

    int red = card.getColor().getRed();
    int green = card.getColor().getGreen();
    int blue = card.getColor().getBlue();
    Color color = new Color(red, green, blue);

    int width;
    int height;
    int xOffset;
    int yOffset;
    int border;

    //Whole card
    width = CARD_DIMENSION.width;
    height = CARD_DIMENSION.height;
    xOffset = 0;
    yOffset = 0;
    border = 5;
    for (int x = 0; x < width; x++) {
        for (int y = 0; y < height; y++) {
            int dx = Math.min(x, width - 1 - x);
            int dy = Math.min(y, height - 1 - y);
            if (dx < border || dy < border) {
                g2d.setColor(new Color(red, green, blue, 255 - Math.min(dx, dy)));
            }
            else {
                g2d.setColor(new Color(red, green, blue, 192 - Math.min(dx, dy)));
            }
            g2d.drawLine(x + xOffset, y + yOffset, x + xOffset, y + yOffset);
        }
    }

新しい長方形を描画するたびに、これをコピーする必要があります。一見、関数に入れるのは難しくありませんが、これらの行は次のとおりです。

            if (dx < border || dy < border) {
                g2d.setColor(new Color(red, green, blue, 255 - Math.min(dx, dy)));
            }
            else {
                g2d.setColor(new Color(red, green, blue, 192 - Math.min(dx, dy)));
            }

私はそこでdxとdyを使用しているので、彼らはそれを難し​​くしています。

これで、匿名の内部クラスで使用し、2 つの関数をオーバーライドする提案されたソリューションを思いつきました。

private abstract class CustomRectangle {
    protected final int width;
    protected final int height;
    protected final int xOffset;
    protected final int yOffset;
    protected final int borderSize;

    public CustomRectangle(final int width, final int height, final int xOffset, final int yOffset, final int borderSize) {
        this.width = width;
        this.height = height;
        this.xOffset = xOffset;
        this.yOffset = yOffset;
        this.borderSize = borderSize;
    }

    abstract void inBorder();

    abstract void outBorder();

    public void draw(Graphics2D g2d) {
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                int dx = Math.min(x, width - 1 - x);
                int dy = Math.min(y, height - 1 - y);
                if (dx < borderSize || dy < borderSize) {
                    inBorder();
                }
                else {
                    outBorder();
                }
                g2d.drawLine(x + xOffset, y + yOffset, x + xOffset, y + yOffset);
            }
        }
    }
}

しかし、dx と dy (for ループへの 2 つのローカル変数) を使用して数式を入れるのは、不可能ではないにしても難しいのではないかと心配しています。

基本的に同じことを行う複数のコードブロックを持つことは受け入れられないため、一般的な問題または私自身のアプローチについて誰かが提案をしてくれれば幸いです。

よろしく。

4

0 に答える 0