• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Javaで四角をつくったのですが・・・)

Javaで四角をつくったのですが・・・

このQ&Aのポイント
  • Javaで四角を作成する方法について
  • 四角を二倍ずつ大きくする方法について
  • 要素を右に進むごとに四角を二倍にする方法

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

とりあえず、顔バージョンにしてみました。 わざわざPointやDimensionを使う必要もないけど、 多少なりとも読みやすくなるかも・ こういう、処理では、基本の処理は相対位置で全て表してやるのが定番です。 import java.applet.Applet; import java.awt.*; /* appletviewer Face.java <APPLET CODE="Face.class" WIDTH="300" HEIGHT="200"></APPLET> */ public class Face extends Applet { public final static Point BasePoint = new Point(10, 20); public final static int FACE_SIZE = 32; //顔の大きさ public final static int GAP = 4; //顔と顔の間の幅 public void paint(Graphics g){ Point pos = new Point(BasePoint); int zoom = 1;//倍率 for(int i = 0; i < 3; i++) { drawFace(g, pos, zoom); pos.translate(FACE_SIZE * zoom + GAP, 0); //描画の基準の位置をずらす zoom *=2; } } void drawFace(Graphics g, Point pos, int zoom){ drawFrame(g, pos, zoom); drawEyeBrow(g, pos, zoom); drawEye(g, pos, zoom); drawNose(g, pos, zoom); drawMouth(g, pos, zoom); } void drawFrame(Graphics g, Point pos, int zoom){ g.drawRect(pos.x, pos.y, FACE_SIZE * zoom, FACE_SIZE * zoom); } void drawEyeBrow(Graphics g, Point pos, int zoom){ Point LPos = new Point(6*zoom , 8*zoom); //左の眉の相対位置 Point RPos = new Point(22*zoom, 8*zoom); //右の眉の相対位置 Dimension size = new Dimension(4*zoom, 0*zoom); //長さ4の真横の眉 LPos.translate(pos.x, pos.y); //基準の位置からの相対位置に移動 g.drawLine(LPos.x , LPos.y, LPos.x+size.width, LPos.y+size.height); RPos.translate(pos.x, pos.y); g.drawLine(RPos.x , RPos.y, RPos.x+size.width, RPos.y+size.height); } void drawEye(Graphics g, Point pos, int zoom){ Point LPos = new Point(6*zoom , 14*zoom); //左の目の相対位置 Point RPos = new Point(22*zoom, 14*zoom); //右の目の相対位置 int size = 4*zoom; //目の大きさ LPos.translate(pos.x, pos.y); //基準の位置からの相対位置に移動 g.fillOval(LPos.x , LPos.y, size, size); RPos.translate(pos.x, pos.y); g.fillOval(RPos.x , RPos.y, size, size); } void drawNose(Graphics g, Point pos, int zoom){ Point NPos = new Point(16*zoom, 18*zoom); //鼻の相対位置 Dimension size = new Dimension(0*zoom, 6*zoom); //長さ6の縦の鼻 NPos.translate(pos.x, pos.y); g.drawLine(NPos.x, NPos.y, NPos.x + size.width, NPos.y + size.height); } void drawMouth(Graphics g, Point pos, int zoom){ Point MPos = new Point(8*zoom, 28*zoom); //口の相対位置 Dimension size = new Dimension(16*zoom, 0*zoom); //長さ16の真横の口 MPos.translate(pos.x, pos.y); g.drawLine(MPos.x, MPos.y, MPos.x + size.width, MPos.y + size.height); } }

bluewing1999
質問者

お礼

ありがとうございます!! まだやってないですが、やってみたいと思います。 というか最強の初心者なので、その分の意味とかわざわざつけてもらいかなりわかりやすくて最高です!! また、わからないことがあったら、BLUEPIXYさん教えてください。必ず点数はあげますので!!

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>この場合 結局何がしたいのか意味がよくとれませんでした 下のどれの意味でしょうか? ・顔を3つ描いて、2倍、4倍とする ・顔を描く ・その他

bluewing1999
質問者

お礼

わざわざありがとうございます! とりあえず回答1の命令は私の思ったとおりにできていました!! その四角の中にただ、目、眉毛、鼻、口などのものを追加するといったものです! そう、この四角は輪郭なのです!! 実は最初からこれをやりたかったのですが、文が収まりきらなくて・・・

すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

こんな感じで良いかと思います。 import java.applet.Applet; import java.awt.*; /* <APPLET CODE="Face.class" WIDTH="300" HEIGHT="200"></APPLET> */ public class Face extends Applet { public final static int xOrg = 10; public final static int yOrg = 20; public final static int SQUARE_BASE_SIZE = 32; //正方形の一辺の基本の長さ public final static int GAP = 4; //正方形と正方形の間の長さ public void paint(Graphics g){ int xPos = xOrg; int zoom = 1; for(int i = 0; i < 3; i++) { drawFace(g, xPos, yOrg, zoom); xPos += SQUARE_BASE_SIZE * zoom + GAP; zoom *=2; } } void drawFace(Graphics g, int xStart, int yStart, int zoom) { g.drawRect(xStart, yStart, SQUARE_BASE_SIZE * zoom, SQUARE_BASE_SIZE * zoom); } }

bluewing1999
質問者

お礼

ありがとうございます。 でも、さらに知りたいことがあって・・・ もしわかったら教えてください!補足にいれておきましたのでみてくれたらうれしいです。

bluewing1999
質問者

補足

ありがとうございます。では私の文で言うとこのような命令を追加するとします。 void drawEyeBrow(Graphics g, int xStart, int yStart) { /// 定義する側 g.drawLine(xStart + 3 * step, yStart + 4 * step, xStart + 5 * step, yStart + 4 * step); g.drawLine(xStart + 11 * step, yStart + 4 * step, xStart + 13 * step, yStart + 4 * step); } void drawEye(Graphics g, int xStart, int yStart) { /// 定義する側 g.fillOval(xStart + 3 * step, yStart + 7 * step, 2 * step, 2 * step); g.fillOval(xStart + 11 * step, yStart + 7 * step, 2 * step, 2 * step); } void drawNose(Graphics g, int xStart, int yStart) { /// 定義する側 g.drawLine(xStart + 8 * step, yStart + 9 * step, xStart + 8 * step, yStart + 12 * step); } void drawMouth(Graphics g, int xStart, int yStart) { /// 定義する側 g.drawLine(xStart + 4 * step, yStart + 14 * step, xStart + 12 * step, yStart + 14 * step); } }//class そうすると、顔ができあがるとおもうのですが、この場合はBLUEPIXYさんの文で行った場合どのようにすればいいのでしょうか?教えてください。

すると、全ての回答が全文表示されます。

関連するQ&A