12/9の課題について


SI-27,341062H,桜井健一
使用した画像

アプレット

アプレットの説明
Kadai1202でメニュウバーにあった小人の状態変更をボタンに替えました。
アプレットソース
//名前:桜井健一
//学生証番号:341062H
//説明↓
//Kadai1202のアプレット版

//appletを使うため
import java.applet.*;
//AWTを使うので java.awt.*を import する
import java.awt.*;
//イベント駆動関係のクラスを用いるため
import java.awt.event.*;
//ランダム要素に必要,Vectorクラスにも必要
import java.util.*;

//小人クラスの定義
//(x座標,y座標,小人の色,大きさの x成分,大きさの y成分)
class Kobito{
    public int x,y,color,sizex,sizey;
    public Kobito(int x1,int x2,int x3,int x4,int x5){
	x=x1-x4/2;
	y=x2-x5/2;
	color=x3;
	sizex=x4;
	sizey=x5;

    }
}

//KeyListener, MouseListenerを実装したキャンバスの作成
class canvas1 extends Canvas implements MouseListener{
    //現在の小人の状態を表すパラメータ
    int co=0,si=2;
    //Imageクラスの変数imageの宣言
    Image[] image=new Image[4];

    //Kobitoの配列を保持するVectorクラスの変数 kobitoVの宣言
    Vector kobitoV;
    //コンストラクタ  
    public canvas1(){
	super();
	kobitoV=new Vector();
	setSize(400,400);
	//Listenerを関連づける。
	addMouseListener(this);
    }
    //チラツキをなくすための作業あれこれ
    Image offScreenImage;
    Graphics offScreenGraphics;
    public void update(Graphics g){
	if(offScreenImage==null){
	    //オフスクリーンイメージを400x400のサイズで作成
	    offScreenImage=createImage(400,400); 
	    //オフスクリーンイメージに描画するための Graphics オブジェクト
	    offScreenGraphics=offScreenImage.getGraphics();
	}
	//次の画面のイメージを作る.
	paint(offScreenGraphics);
	//イメージを本物のスクリーンに書き込む
	g.drawImage(offScreenImage,0,0,this);
    }
    //描画関連
    public void paint(Graphics g){
	//乱数の元となるオブジェクトを作成
	Random r=new Random();

	//背景の設定
	g.setColor(Color.black);
	g.fillRect(0,0,400,400);
	for (int i=0;i< 150;i++){
	    g.setColor(new Color(i+55,i+55,i+55));
	    g.drawLine(0,i+250,400,i+250);
	}


	//星をランダムに作成
	//画面上部にのみ作成
	g.setColor(Color.yellow);
	for(int i=0;i<=25;i++){
	    //1-400までの乱数を作成
	    int starx=r.nextInt(399)+1;
	    //1-200までの乱数を作成
	    int stary=r.nextInt(199)+1;
	    g.fillOval(starx,stary,2,2);
	}

	//だるま部分
	for(int i=0;i<=35;i++){
	    g.setColor(new Color(i*2+185,i*2+185,i*2+185));
	    g.fillOval(125+i,175+i+i/2,150-i*2,150-i*2);
	}

	//月部分     
	for(int i=0;i<=15;i++){
	    g.setColor(new Color(i*3+200,i*2+220,i*4+160));
	    g.fillOval(160+i,95+i+i/2,80-i*3,80-i*3);
	}


	//リボン部分
	g.setColor(Color.red);
	int[] ribbonx={180,180,200,220,220,200};
	int[] ribbony={190,220,210,220,190,200};
	g.fillPolygon(ribbonx,ribbony,6);

	//棒部分
	g.setColor(Color.green);
	int[] stick1x={160,155,135,140};
	int[] stick1y={210,215,155,150};
	g.fillPolygon(stick1x,stick1y,4);
	int[] stick2x={240,245,265,260};
	g.fillPolygon(stick2x,stick1y,4);

	//サングラス部分
	g.setColor(Color.black);
	int[] sunglassesx={155,140,260,245,220,200,180};
	int[] sunglassesy={125,120,120,125,140,125,140};
	g.fillPolygon(sunglassesx,sunglassesy,7);
	g.setColor(Color.white);
	g.drawPolygon(sunglassesx,sunglassesy,7);

	//手袋部分
	g.setColor(Color.red);
	int[] hand1x={145,149,134,130};
	int[] hand1y={145,157,172,160};
	g.fillPolygon(hand1x,hand1y,4);
	g.fillOval(95,110,54,54);
	int[] hand2x={255,251,266,270};
	g.fillPolygon(hand2x,hand1y,4);
	g.fillOval(251,110,54,54);

	//雪を降らせる。
	//こっちは画面全体
	g.setColor(Color.white);
	for(int i=0;i<=100;i++){
	    //1-400までの乱数を作成
	    int snowx=r.nextInt(399)+1;
	    //1-400までの乱数を作成
	    int snowy=r.nextInt(399)+1;
	    //雪のサイズ決定
	    int snowr=r.nextInt(4)+1;
	    g.fillOval(snowx,snowy,snowr,snowr);
	}

	//小人の表示
	int size=kobitoV.size();
	for(int i=0;i< size;i++){
	    Kobito k=(Kobito)kobitoV.elementAt(i);
	    g.drawImage(image[k.color],k.x,k.y,k.sizex,k.sizey,this);
	}
  
    }

    //MouseListenerを実装するためのメソッド
    public void mousePressed(MouseEvent e){
	//押された時のマウスカーソルの位置を得る
	int mx=e.getX(),my=e.getY();
	//デバッグ用の表示
	System.out.println("mousePressed("+e+","+mx+","+my+")");
	kobitoV.addElement(new Kobito(mx,my,co,si*20,si*25));
	//再表示をおこなう
	repaint();
    }
    public void mouseReleased(MouseEvent e){}
    public void mouseClicked(MouseEvent e){}
    public void mouseEntered(MouseEvent e){}
    public void mouseExited(MouseEvent e){}


    //Deleteボタンが押された時の処理
    public void deletekobito(){
	int size;
	if((size=kobitoV.size())>0){
	    kobitoV.removeElementAt(size-1);
	    repaint();
	}
    }
    //Resetボタンが押された時の処理
    public void resetcanvas(){
	kobitoV.removeAllElements();
	repaint();
    }
    //色の変更
    public int changecolor(int m){
	System.err.println("changeColor("+m+")");
	co=m;
	return co;
    }
    //サイズの変更
    public int changesize(int m){
	si=m;
	return si;
    }
    //イメージ呼び出し
    public void GETImage(Image m1,Image m2,Image m3,Image m4){
	image[0]=m1;
	image[1]=m2;
	image[2]=m3;
	image[3]=m4;
    }
}


// アプレットはpublicである必要
public class Kadai1209 extends Applet implements ActionListener{
    Image[] m=new Image[4];
    canvas1 c=new canvas1();

    Button deleteButton,resetButton;
    Button colorBlueButton,colorRedButton,colorGreenButton,colorYellowButton;
    Button size20x25Button,size40x50Button,size60x75Button,size80x100Button;
    //コンストラクタは書かない.アプレット作成時に initが呼ばれる.
    //メニューバーは使えない
    public void init(){
	m[0]=getImage(getCodeBase(),"kobito2.png");
	m[1]=getImage(getCodeBase(),"kobito2b.png");
	m[2]=getImage(getCodeBase(),"kobito2g.png");
	m[3]=getImage(getCodeBase(),"kobito2y.png");
   	c.GETImage(m[0],m[1],m[2],m[3]);
	//パネル(ボタンなどを配置するための入れ物)部分を作成する.
	Panel panel=new Panel();
	panel.setLayout(new FlowLayout());
	Panel panel2=new Panel();
	panel2.setLayout(new FlowLayout());

	panel.add(deleteButton=new Button("Delete"));
	deleteButton.addActionListener(this);
	panel.add(resetButton=new Button("Reset"));
	resetButton.addActionListener(this);

	panel2.add(colorRedButton=new Button("Red"));
	colorRedButton.addActionListener(this);
	panel2.add(colorBlueButton=new Button("Blue"));
	colorBlueButton.addActionListener(this);
	panel2.add(colorGreenButton=new Button("Green"));
	colorGreenButton.addActionListener(this);
	panel2.add(colorYellowButton=new Button("Yellow"));
	colorYellowButton.addActionListener(this);

	panel2.add(size20x25Button=new Button("x0.5"));
	size20x25Button.addActionListener(this);
	panel2.add(size40x50Button=new Button("Normal"));
	size40x50Button.addActionListener(this);
	panel2.add(size60x75Button=new Button("x1.5"));
	size60x75Button.addActionListener(this);
	panel2.add(size80x100Button=new Button("x2.0"));
	size80x100Button.addActionListener(this);

	//BorderLayoutを用いる.
	setLayout(new BorderLayout());
	//上部に Panel
	add(panel,"North");
	//中部に cを配置する.
	add(c,"Center");
	//下部に panel2
	add(panel2,"South");

	//部品をおさめるのに適当と思われるサイズにする.
	setSize(getPreferredSize());
	setVisible(true);
    }
    public void actionPerformed(ActionEvent e){
	System.out.println(e);
	Object source=e.getSource();
	//Deleteボタンが押された時
	if(source.equals(deleteButton)){
	    c.deletekobito();
	}
	//Resetボタンが押された時
	else if(source.equals(resetButton)){
	    c.resetcanvas();
	}

	//colorRedButtonボタンが押されたとき
	else if(source.equals(colorRedButton)){
	    c.changecolor(0);
	}
	//colorBlueButtonボタンが押されたとき
	else if(source.equals(colorBlueButton)){
	    c.changecolor(1);
	}
	//colorGreenButtonボタンが押されたとき
	else if(source.equals(colorGreenButton)){
	    c.changecolor(2);
	}
	//colorYellowButtonボタンが押されたとき
	else if(source.equals(colorYellowButton)){
	    c.changecolor(3);
	}
	//size20x25Buttonボタンが押されたとき
	else if(source.equals(size20x25Button)){
	    c.changesize(1);
	}
	//size40x50Buttonボタンが押されたとき
	else if(source.equals(size40x50Button)){
	    c.changesize(2);
	}
	//size60x75Buttonボタンが押されたとき
	else if(source.equals(size60x75Button)){
	    c.changesize(3);
	}
	//size80x100Buttonボタンが押されたとき
	else if(source.equals(size80x100Button)){
	    c.changesize(4);
	}

    }

}