23JON
@23JON (23 JON)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

初期座標、速さ、長さ、ジグザグの長さをすべて決めるプログラム

Q&A

タイトルに書いたように、
以下2つのプログラム
①初期座標、速さ、長さ
②初期座標、ジグザグの長さ、長さ
を組み合わせて、初期座標、速さ、長さ、ジグザグの長さをすべて決めるプログラムを作成できるのでは、と思ったのですが、どうしたらいいのかがわかりません。

public class TurtleTriangleX extends TurtleRemoCon {
    private int speed, length;
    private int movedLength;  // これまで動いた距離

    /** tが (x0, y0) から, speedの速さで移動し,1辺の長さがlenの三角形を描く */
    public TurtleTriangleX(Turtle t, int x0, int y0, int speed, int len) {
    super(t);

    this.speed = speed;
    this.length = len;

    movedLength = 0;
    t.move(x0, y0);
    t.penDown();
    }

    /** 1ステップ描く */
    public void step() {
    // speed分だけ進める
    t.go(speed);

    // これまで動いた長さにspeedを足す
    movedLength += speed;

    // 一辺の長さ(length)以上動いてたら,向きを変える
    if (movedLength >= length) {
        t.rotate(240);
        movedLength = 0; // リセット
    }
    }

    /** テスト用mainメソッド */
    public static void main(String[] args) {
    Turtle t1 = new Turtle();
    TurtleTriangleX tri1 = new TurtleTriangleX(t1, 100, 200, 10, 30);

    Turtle t2 = new Turtle();
    t2.setColor(java.awt.Color.GREEN);
    TurtleTriangleX tri2 = new TurtleTriangleX(t2, 50, 240, 30, 100);

    while (true) {
        tri1.step();
        tri2.step();
    }
    }
}

public class ZigZagTurtle extends Turtle {
    protected int zzlen,speed,length,movedLength;  
    protected java.awt.Color zigColor = java.awt.Color.RED;
    protected java.awt.Color zagColor = java.awt.Color.BLUE;

    public ZigZagTurtle() {
       super();
       zzlen = 10; // デフォルトの刻み幅
    }

    /**  ジグザグの長さを設定してオブジェクトを作る */
    public ZigZagTurtle(int zzlen) {
       super();
       this.zzlen = zzlen;
    }

    /** ジグザグの長さを設定する */
    public void setZZLength(int zzlen) {
       this.zzlen = zzlen;
    }


    /** ジグの色を設定する */
    public void setZigColor(java.awt.Color c) {
       zigColor = c;
    }

    /** ザグの色を設定する */
    public void setZagColor(java.awt.Color c) {
       zagColor = c;
    }

    /** ジグザグに長さlengthだけ進む */
    public void go(int length) {
       rotate(60);
       while (true) {
        zig();
        // この時点で本来の進行方向の直線上にいる
        length -= zzlen;    // 真っ直ぐ進んだ距離を引く
        if (length <= 0) {  // 本来の進行方向にlength進んだら
        rotate(60);     // 本来の向きに戻す
        break;
       }

        zag();
        // この時点で本来の進行方向の直線上にいる
        length -= zzlen;   // 真っ直ぐ進んだ距離を引く
        if (length<=0) {  // 本来の進行方向にlength進んだら
        rotate(-60);  // 本来の向きに戻す
        break;
       }
     }
    }

    /** ジグザグのジグを描く */
    protected void zig() {
       setColor(zigColor);
       super.go(zzlen);
       rotate(-120);
       super.go(zzlen);
    }

    /** ジグザグのザグを描く */
    protected void zag() {
       setColor(zagColor);
       super.go(zzlen);
       rotate(120);
       super.go(zzlen);
    }


    /** テスト用のmainメソッド */
    public static void main(String[] args) {
       ZigZagTurtle zzt = new ZigZagTurtle();

    // 三角形を描く
       zzt.move(75,200);
       zzt.penDown();
    // ジグザクの色を変える
        while(true){
          zzt.setZZLength(6);
          zzt.setZigColor(java.awt.Color.PINK); // シアン
          zzt.setZagColor(java.awt.Color.CYAN); // ピンク
          zzt.go(72);
          zzt.rotate(240);
      }
    }
} 

どうしたらいいのですか。もしお分かりいただけるのであれば、ご指摘よろしくお願いします。
(ちなみに、今回書きたいプログラムは、ジグザグの長さが6、長さ72、速さ24、初期座標(75,200)のプログラムです。)

0

1Answer

回答ではないのですが、インデントを揃えたほうが何かしら返事がきやすいかなと思います。
(もしかしたら以前別の質問で同じように答えたかもしれませんが……)

インデントが揃ってないだけでとても読みにくくなりコードを追うのが大変になりますし、バグの原因にもなります。
回答者が皆ソースをコピーして手元で確認するわけではないのでパッとみで読みやすいとアドバイスがしやすいです。
VisualStudio CodeのようなエディターやIDEを使用すると簡単に自動調整することができます。

またソースを載せる時に

```
class Hoge {
    void fuga() { doSomething(); }
}
```

のように書いていると思いますがこれを

```java
class Hoge {
    void fuga() { doSomething(); }
}
```

のように言語名を指定すると

class Hoge {
    void fuga() { doSomething(); }
}

こんな感じでシンタックスハイライトが効いて読みやすくなります。

1Like

Your answer might help someone💌