11/30 課題講評


問題(雪だるま)


講評


解答例とコメント

// 名前: XXXXX
// 学生証番号:XXXXX
// 説明  少し雲がかった夜空にきらめく星と満月の下に、子供が作って残し他であろうかまくらと一緒に雪だるまがたたずんでいます。さらに背景には山があります。そんな雪だるまを書きました。また雪だるまが空を飛ばないようにカーソルとの位置と空の大きさを工夫しました。


  // AWTを使うので java.awt.*を import する
import java.awt.*;
  // イベント駆動関係のクラスを用いるため
import java.awt.event.*;

  // 独立したウィンドウを開くので,Frameクラスのサブクラスにする
class Yukidaruma extends Frame implements KeyListener,MouseListener{
    // 表示する際に必要なインスタンス変数を宣言しておく
    int mx=100,my=100;

    public Yukidaruma(String title){
        super(title);
        // GUI部品と,Event Listenerを関連づける
        addKeyListener(this);
        addMouseListener(this);
    }
    // KeyListenerを実装するためのメソッド
    public void keyPressed(KeyEvent e){
        int key=e.getKeyChar();
        System.out.println("keyPressed("+e+","+key+")");
        if(key=='q') System.exit(0);
    }
    // 要らないイベントに対応するメソッドも中身は空で書いておく必要がある.
    public void keyReleased(KeyEvent e){}
    public void keyTyped(KeyEvent e){}
    // MouseListenerを実装するためのメソッド
    public void mousePressed(MouseEvent e){
        // 押された時のマウスカーソルの位置を得る
        mx=e.getX();
        my=e.getY();
        // 再表示をおこなう
        repaint();
    }
    // 要らないイベントに対応するメソッドも中身は空で書いておく必要がある.
    public void mouseReleased(MouseEvent e){}
    public void mouseExited(MouseEvent e){}
    public void mouseEntered(MouseEvent e){}
    public void mouseClicked(MouseEvent e){}

    public static void main(String[] args){
        Yukidaruma frame=new Yukidaruma("Yukidaruma");
        frame.setSize(400,400);
        frame.setVisible(true);    
    }
    public void paint(Graphics g){
        // インスタンス変数にしたがって描画するコードを書く
        //使う色を水色に変更する
	g.setColor(Color.white);
	//(0,0)から幅400高さ400の長方形を塗りつぶす
        g.fillRect(0,0,400,400);
	//使う色を白色に変更する
        g.setColor(new Color(0,100,200));
	g.fillRect(0,0,400,175);
	g.setColor(Color.green);
	g.fillArc(300,170,50,45,0,50);
	g.fillArc(310,170,50,45,0,50);
	g.fillArc(350,170,50,45,0,50);
	g.fillArc(330,170,50,45,0,50);
	g.fillArc(295,160,50,45,0,50);
	g.fillArc(305,160,50,45,0,50);
	g.fillArc(345,160,50,45,0,50);
	g.fillArc(325,160,50,45,0,50);
	g.setColor(Color.black);
        g.drawOval(mx+100,my+49,100,100);
	g.drawOval(mx+120,my,50,50);
	g.drawArc(40,260,150,180,0,180);
	g.setColor(Color.gray);
	g.fillArc(70,305,80,85,0,180);
	g.fillRoundRect(42,52,40,15,10,10);
	g.drawRoundRect(mx+130,my+140,35,10,5,5);
	g.drawRoundRect(mx+95,my+140,35,10,5,5);
	g.setColor(Color.orange);
	g.drawLine(mx+100,my+85,mx+70,my+120);
	g.setColor(Color.white);
	g.fillOval(mx+100,my+49,99,99);
	g.fillOval(mx+120,my,49,49);
	g.setColor(Color.yellow);
	g.fillOval(30,32,30,30);
	int[] xs0={320,340,325,330,335};
	int[] ys0={40,40,60,30,60};
	g.fillPolygon(xs0,ys0,5);
	int[] xs1={340,360,345,350,355};
	int[] ys1={60,60,80,50,80};
	g.fillPolygon(xs1,ys1,5);
	g.setColor(Color.gray);
	g.fillRoundRect(37,47,40,15,10,10);
	g.setColor(Color.orange);
	g.fillArc(mx+120,my+25,20,10,0,30);
	g.drawLine(mx+160,my+85,mx+180,my+120);
	g.fillRoundRect(mx+130,my+140,34,9,5,5);
	g.fillRoundRect(mx+95,my+140,34,9,5,5);
	g.setColor(Color.pink);
	g.fillRoundRect(mx+130,my+40,31,10,5,5);
	g.setColor(Color.black);
	g.fillOval(mx+125,my+20,3,3);
	g.fillOval(mx+145,my+20,3,3);
	g.fillOval(mx+135,my+70,5,5);
	g.fillOval(mx+135,my+80,5,5);
	g.setColor(Color.red);
	g.fillArc(mx+105,my-10,50,30,0,55);

    }
}

がんばって,可愛い雪だるまを書いてくれましたね(田中)
// 名前:XXXXX
// 学生証番号:XXXXXX
  


  // AWTを使うので java.awt.*を import する
import java.awt.*;
  // イベント駆動関係のクラスを用いるため
import java.awt.event.*;

  // 独立したウィンドウを開くので,Frameクラスのサブクラスにする
class Yukidaruma extends Frame implements KeyListener,MouseListener{
    // 表示する際に必要なインスタンス変数を宣言しておく
    int mx=300,my=200;

    public Yukidaruma(String title){
        super(title);
        // GUI部品と,Event Listenerを関連づける
        addKeyListener(this);
        addMouseListener(this);
    }
    // KeyListenerを実装するためのメソッド
    public void keyPressed(KeyEvent e){
        int key=e.getKeyChar();
        System.out.println("keyPressed("+e+","+key+")");
        if(key=='q') System.exit(0);
    }
    // 要らないイベントに対応するメソッドも中身は空で書いておく必要がある.
    public void keyReleased(KeyEvent e){}
    public void keyTyped(KeyEvent e){}
    // MouseListenerを実装するためのメソッド
    public void mousePressed(MouseEvent e){
        // 押された時のマウスカーソルの位置を得る
        mx=e.getX();
        my=e.getY();
        // 再表示をおこなう
        repaint();
    }
    // 要らないイベントに対応するメソッドも中身は空で書いておく必要がある.
    public void mouseReleased(MouseEvent e){}
    public void mouseExited(MouseEvent e){}
    public void mouseEntered(MouseEvent e){}
    public void mouseClicked(MouseEvent e){}

    public static void main(String[] args){
        Yukidaruma frame=new Yukidaruma("Yukidaruma");
        frame.setSize(600,500);
        frame.setVisible(true);    
    }
    public void paint(Graphics g){
        // インスタンス変数にしたがって描画するコードを書く
        Color myblack=new Color(50,50,50);
        g.setColor(myblack);
        g.fillRect(0,0,600,500);
        g.setColor(new Color(230,230,230));
        g.fillRect(0,350,600,150);
        g.setColor(Color.yellow);
        g.fillOval(50,50,60,60);        
        g.setColor(myblack);
	g.fillOval(20,20,80,80);
       
	g.translate(mx-50,my-50);
        g.setColor(Color.black);
        g.drawOval(-2,-2,104,104);
	g.drawOval(-42,88,184,184);
        g.setColor(Color.white);
        g.fillOval(0,0,100,100);
        g.fillOval(-40,90,180,180);
        g.setColor(Color.orange);
        g.fillArc(50,40,70,60,150,20);
        g.setColor(Color.blue);
        g.fillOval(25,35,10,10);
        g.fillOval(75,35,10,10);
        g.setColor(myblack);
        g.fillOval(28,36,5,8);
        g.fillOval(78,36,5,8);
        g.setColor(Color.red);
        g.fillOval(53,130,10,10);
        g.fillOval(53,155,10,10);
        g.fillOval(53,180,10,10);
       
        g.setFont(new Font("Centry",Font.BOLD,25));
        if(my<=130){
            g.setColor(Color.cyan);
	    g.drawString("I'M FLYING!",100,10);
            g.setColor(new Color(230,150,150));
            g.fillArc(35,72,40,15,180,180);
        }
        else{
            g.setColor(Color.green);
            g.drawString("HELLO!",100,10);
        }
    }
}

translateで座標系を移動するなど,講義で教えていないことも使ってうまく書いていますね(田中).
// 名前:XXXX
// 学生証番号:XXXXXX
// 説明  


  // AWTを使うので java.awt.*を import する
import java.awt.*;
  // イベント駆動関係のクラスを用いるため
import java.awt.event.*;

  // 独立したウィンドウを開くので,Frameクラスのサブクラスにする
class Yukidaruma extends Frame implements KeyListener,MouseListener{
    // 表示する際に必要なインスタンス変数を宣言しておく
    int mx=100,my=100;

    public Yukidaruma(String title){
        super(title);
        // GUI部品と,Event Listenerを関連づける
        addKeyListener(this);
        addMouseListener(this);
    }
    // KeyListenerを実装するためのメソッド
    public void keyPressed(KeyEvent e){
        int key=e.getKeyChar();
        System.out.println("keyPressed("+e+","+key+")");
        if(key=='q') System.exit(0);
    }
    // 要らないイベントに対応するメソッドも中身は空で書いておく必要がある.
    public void keyReleased(KeyEvent e){}
    public void keyTyped(KeyEvent e){}
    // MouseListenerを実装するためのメソッド
    public void mousePressed(MouseEvent e){
        // 押された時のマウスカーソルの位置を得る
        mx=e.getX();
        my=e.getY();
        // 再表示をおこなう
        repaint();
    }
    // 要らないイベントに対応するメソッドも中身は空で書いておく必要がある.
    public void mouseReleased(MouseEvent e){}
    public void mouseExited(MouseEvent e){}
    public void mouseEntered(MouseEvent e){}
    public void mouseClicked(MouseEvent e){}

    public static void main(String[] args){
        Yukidaruma frame=new Yukidaruma("Yukidaruma");
        frame.setSize(400,400);
        frame.setVisible(true);    
    }
    public void paint(Graphics g){
        // インスタンス変数にしたがって描画するコードを書く
        g.setColor(new Color(0,0,100));
        g.fillRect(0,0,400,400);
        g.setColor(new Color(220,190,190));
        g.fillRect(0,200,400,200);
        g.fillRect(120,0,280,200);
        int[] xs6={90,120,120};
        int[] ys6={0,0,40};
        g.fillPolygon(xs6,ys6,3);
        g.setColor(Color.yellow);
        g.fillOval(0,20,95,95);
        g.setColor(Color.black);
        g.fillRect(0,200,120,5);
        g.fillRect(115,40,5,160);
        g.fillRect(20,0,5,200);
        g.fillRect(0,40,120,5);
        g.fillRect(0,120,120,5);
        int[] xs5={115,117,90,85};
        int[] ys5={40,40,0,0};
        g.fillPolygon(xs5,ys5,4); 
        g.setColor(new Color(0,100,0));
        int[] xs7={400,340,310,330,260,290,220,400};
        int[] ys7={0,0,50,50,160,160,280,280};
        g.fillPolygon(xs7,ys7,8); 
        g.setColor(new Color(220,0,0));
        g.fillOval(300,140,10,10);
        g.fillOval(330,220,10,10);
        g.fillOval(380,180,10,10);
        g.fillOval(350,60,10,10);
        g.fillOval(355,143,10,10);
        g.setColor(new Color(160,160,0));
        g.fillOval(270,230,10,10);
        g.fillOval(340,200,10,10);
        g.fillOval(380,70,10,10);
        g.fillOval(325,132,10,10);
        g.setColor(Color.white);
        g.fillOval(mx,my,100,100);
        g.fillOval(mx-25,my+75,150,150);
        g.setColor(Color.black);
        g.fillOval(mx+27,my+30,10,10);
        g.fillOval(mx+63,my+30,10,10);
        g.setColor(new Color(200,100,0));
        int[] xs0={mx,mx-10,mx-60,mx-50};
        int[] ys0={my+140,my+150,my+100,my+90};
        g.fillPolygon(xs0,ys0,4);
        int[] xs1={mx+100,mx+110,mx+160,mx+150};
        int[] ys1={my+140,my+150,my+100,my+90};
        g.fillPolygon(xs1,ys1,4);
        g.setColor(new Color(150,150,200));
        g.fillRoundRect(mx+145,my+50,20,80,10,10);
        g.fillRoundRect(mx-65,my+50,20,80,10,10);
        g.fillRoundRect(mx+125,my+35,60,20,10,10);
        int[] xs2={mx+155,mx+145,mx+165};
        int[] ys2={my-10,my+38,my+38};
        g.fillPolygon(xs2,ys2,3);
        int[] xs3={mx+185,mx+185,mx+165};
        int[] ys3={my-10,my+38,my+38};
        g.fillPolygon(xs3,ys3,3);
        int[] xs4={mx+125,mx+125,mx+145};
        int[] ys4={my-10,my+38,my+38};
        g.fillPolygon(xs4,ys4,3);
        g.fillArc(mx-95,my-10,60,170,0,90);
        g.setColor(new Color(150,50,0));
        g.fillRect(0,320,400,100); 
    }
}
ちゃんと月と雪だるまが描けています。基本図形の組み合わせで、なかなか凝ったものが描けていると思います。(成毛)

その他の雪だるま達


g441173.png

g441176.png

g520119.png

g530017.png

g530263.png

g530403.png

g540001.png

g540055.png

g540057.png

g540061.png

g540128.png

g540171.png

g540175.png

g540182.png

g540214.png

g540231.png

g540287.png

g540335.png

g540384.png

g540389.png

g540438.png

g540439.png

g540482.png

g540501.png

g540505.png

g540511.png

g540517.png

g540521.png

g540525.png

g540554.png

g540705.png

g540713.png

g541005.png

g541137.png

g541156.png

g541198.png

g541199.png

g550339.png