とりあえず、顔バージョンにしてみました。
わざわざ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);
}
}
お礼
ありがとうございます!! まだやってないですが、やってみたいと思います。 というか最強の初心者なので、その分の意味とかわざわざつけてもらいかなりわかりやすくて最高です!! また、わからないことがあったら、BLUEPIXYさん教えてください。必ず点数はあげますので!!