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);
}
}
}