冬の寒い夜、ふりしきる雪の中に雪だるまが一つ。 夜空には妖艶な輝きを放つ月が描かれています。 夜空をクリックすると流れ星がふりそそぎ、 地面をクリックすると雪だるまが現れます。
//友澤孝規 340646E 雪だるまと月の絵です。
//夜空をマウスでクリックすると、星が流れてきます。
//地面をマウスでクリックすると、雪だるまが現れます。
// アプレットを使うためjava.applet.*をimportする
import java.applet.*;
// AWTを使うので java.awt.*を import する
import java.awt.*;
// イベント駆動関係のクラスを用いるためjava.awt.event.*をimportする
import java.awt.event.*;
//Vectorクラスを用いるため java.util.*をimportする
import java.util.*;
//星のクラスを定義する
class Star{
//星の場所をintで保持する
public int place_x,place_y;
//Starのコンストラクタをつくる
public Star(int x1,int y1){
place_x=x1;
place_y=y1;}
}
//画像をいれるためのクラスを定義する
class DrawImage extends Canvas{
Image image1,image2;//画像のための変数を定義
//コンストラクタをつくる
DrawImage(){
super();
}
}
// アプレットはpublicである必要がある
public class Kadai1209 extends Applet implements KeyListener, MouseListener, MouseMotionListener,ActionListener {
//変数の定義
Vector starArray;
Button button;
Random r= new Random();
String message="";
//インスタンス化する
DrawImage frame = new DrawImage();
//コンストラクタをつくる
//publicである必要がある
public Kadai1209(){
addKeyListener(this);
addMouseListener(this);
addMouseMotionListener(this);
starArray=new Vector();
//配置を決める
setLayout(new FlowLayout());
// 「Theme」というラベルを持つボタンを作り,window中に配置
add(button= new Button("Theme"));
button.addActionListener(this);
}
public void init(){
//フレームのサイズをきめてつくる
frame.image1=getImage(getCodeBase(),"star.png");
frame.image2=getImage(getCodeBase(),"snowman.png");
frame.setSize(400,400);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e){
System.out.println(e);
Object source=e.getSource();
if(source instanceof Button){
String label=e.getActionCommand();
// 押されたボタンのラベルが"Theme"かどうかのチェック
if(label.equals("Theme")){
message="winter in the dark";
repaint();//再表示する
}
}
}
//画面のちらつきをなくす
Image offScreenImage;
Graphics offScreenGraphics;
public void update(Graphics g){
if(offScreenImage==null){
offScreenImage=createImage(600,400);
// オフスクリーンイメージを600x400のサイズで作成
offScreenGraphics=offScreenImage.getGraphics();
// オフスクリーンイメージに描画するための Graphics オブジェクト
}
paint(offScreenGraphics); // 次の画面のイメージを作る.
g.drawImage(offScreenImage,0,0,this);
// イメージを本物のスクリーンに書き込む
}
// インスタンス変数にしたがって描画するコードを書く
public void paint(Graphics g){
int i;
g.setColor(Color.black);
g.fillRect(0,0,400,200);
g.setColor(Color.blue);
g.fillRect(0,200,400,250);
g.setColor(new Color(230,230,230));
g.fillRect(0,250,400,400);
g.setColor(Color.red);
g.fillArc(260,60,60,60,0,360);
g.setColor(Color.white);
g.fillArc(100,190,70,70,0,360);
g.fillArc(100,250,100,100,0,360);
g.setColor(Color.blue);
g.fillArc(130,220,10,10,0,360);
g.fillArc(150,210,10,10,0,360);
g.setColor(Color.black);
g.drawLine(190,280,220,250);
g.drawLine(110,300,75,290);
g.setColor(Color.red);
g.fillArc(150,270,10,10,0,360);
g.fillArc(155,290,10,10,0,360);
g.fillArc(160,310,10,10,0,360);
int size=starArray.size();
for(i=0;i250&(l.place_x>200||l.place_x<70 ))
g.drawImage(frame.image2,l.place_x,l.place_y,30,30,this);
}
for(int j=0;j<400;j++){
int snow_x=r.nextInt(400);
int snow_y=r.nextInt(400);
int snow_r=r.nextInt(6)+1;
g.setColor(Color.white);
g.fillOval(snow_x,snow_y,snow_r,snow_r);
}
g.setColor(Color.black);
g.drawString(message,250,300);
}
public void keyPressed(KeyEvent e){}
public void keyReleased(KeyEvent e){}
public void keyTyped(KeyEvent e){}
// MouseListenerを実装するためのメソッド
public void mousePressed(MouseEvent e){
// 押された時のマウスカーソルの位置を得る
int mx=e.getX(),my=e.getY();
// デバッグ用の表示
System.out.println("mousePressed("+e+","+mx+","+my+")");
//星の場所を登録
starArray.addElement(new Star(mx,my));
// 再表示をおこなう
repaint();
}
public void mouseReleased(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseDragged(MouseEvent e){}
public void mouseMoved(MouseEvent e){}
}