11/30 課題講評
講評
- 41名が提出
- 多くのプログラムは,マウスの座標にしたがって平行移動するだけだったが,大きさを変えて遠近感を出したりするプログラムもあった.
- オプション課題も6名が提出してくれた.力作ばかりだったが,時間の都合でWWWページでの紹介は省く.
解答例とコメント
// 名前: 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