import java.awt.*; import javax.swing.*; public class Ex8_2 extends JPanel { Flag f1 = new Flag(Color.WHITE, Color.RED, 50, 50, 100); Person p1 = new Person(Color.RED, 200, 210, 20); Pacman k1 = new Pacman(Color.YELLOW, 320, 130, 200); Bus b1 = new Bus(Color.BLUE, 100, 150, 200); public void paintComponent(Graphics g) { b1.draw(g); f1.draw(g); p1.draw(g); k1.draw(g); g.setColor(Color.BLACK); g.drawString("待って〜", 220, 330); g.setFont(new Font("HGS行書体", Font.BOLD, 30)); g.drawString("おらおらぁ", 350, 350); } public static void main(String[] args) { JFrame app = new JFrame(); app.add(new Ex8_2()); app.setSize(600, 500); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); app.setVisible(true); } static class Flag { // 旗クラス Flag Color col1, col2; // 色設定用 int x, y, wid, hei; // 旗の外枠用(x,y)座標, 幅wid, 高さhei public Flag(Color C1, Color C2, int X, int Y, int W) { // コンストラクタ col1 = C1; col2 = C2; x = X; y = Y; wid = W; hei = (int)(W*2/3); } public void draw(Graphics g) { // 描画メソッド g.setColor(col1); // 旗の枠色設定 g.fillRect(x, y, wid, hei); // 旗の枠描画 g.setColor(col2); // 旗の内円色設定 g.fillOval(x+wid/3, y+hei/2-wid/6, wid/3, wid/3); // 旗内の円描画 } } static class Person { // 人クラス Color col; int[] xp = new int[24]; // 人の体をつくる x座標用配列 int[] yp = new int[24]; // 人の体をつくる y座標用配列 int x, y, wid; public Person(Color C1, int X, int Y, int W) { // コンストラクタ col = C1; x = X; y = Y; wid = W; xp[0] = xp[1] = x; xp[4] = xp[5] = xp[22] = xp[23] = (x+wid); xp[2] = xp[3] = xp[6] = xp[7] = xp[20] = xp[21] = (x+2*wid); xp[8] = xp[9] = xp[12] = xp[13] = xp[18] = xp[19] = (x+3*wid); xp[10] = xp[11] = xp[14] = xp[15] = (x+4*wid); xp[16] = xp[17] = (x+5*wid); yp[0] = yp[19] = yp[20] = yp[23] = y; yp[17] = yp[18] = yp[21] = yp[22] = (y+wid); yp[1] = yp[2] = yp[13] = yp[14] = (y+2*wid); yp[3] = yp[4] = yp[11] = yp[12] = yp[15] = yp[16] = (y+3*wid); yp[7] = yp[8] = (y+4*wid); yp[5] = yp[6] = yp[9] = yp[10] = (y+5*wid); } public void draw(Graphics g) { // 描画メソッド g.setColor(col); // 体の色設定 g.fillPolygon(xp, yp, 24); // 体描画 g.setColor(Color.WHITE); // 目の色設定 g.fillOval(x+(int)(2.1*wid), y+(int)(0.1*wid), wid/2, wid/2); // 目 } } static class Pacman { Color col; int x, y, size; int[] xp = new int[3]; // 口用x座標 int[] yp = new int[3]; // 口用y座標 public Pacman(Color C1, int X, int Y, int S) { // コンストラクタ col = C1; x = X; y = Y; size = S; xp[0] = xp[1] = (x-1); xp[2] = (x+size/2); yp[0] = y+size/3; yp[1] = y+2*size/3; yp[2] = y+size/2; } public void draw(Graphics g) { // 描画メソッド g.setColor(col); // 体の色設定 g.fillOval(x, y, size, size); // 体の描画 g.setColor(Color.BLACK); // 目の色設定 g.fillOval(x+size/4, y+size/4, size/6, size/6); // 目 g.setColor(Color.WHITE); // 口の色設定 g.fillPolygon(xp, yp, 3); // 口 } } static class Bus { // Busクラス Color col; // バスの車体の色 int x, y, ss; // バスの位置(x,y)左上座標, 全長ss public Bus(Color C1, int X, int Y, int SS) { // コンストラクタ col = C1; x = X; y = Y; ss = SS; } public void draw(Graphics g) { // 描画メソッド g.setColor(col); // 車体の色設定 g.fillRect(x, y, ss, (int)(ss/3)); // 車体描画 g.setColor(Color.lightGray); // 運転席窓の色設定 g.fillRect(x+(int)(ss/16), y+(int)(ss/16), (int)(ss/6), (int)(ss/7)); // 運転席窓描画 g.setColor(Color.BLACK); // タイヤの色設定 g.fillOval(x+(int)(ss/8), y+(int)(13*ss/48), (int)(ss/8), (int)(ss/8)); // タイヤ描画(前輪) g.fillOval(x+(int)(5*ss/8), y+(int)(13*ss/48), (int)(ss/8), (int)(ss/8)); // タイヤ描画(後輪1) g.fillOval(x+(int)(6*ss/8), y+(int)(13*ss/48), (int)(ss/8), (int)(ss/8)); // タイヤ描画(後輪2) } } }