Sample6
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
public class Sample6 extends Applet implements Runnable, MouseListener {
Dimension size;
Image bkg;
Graphics bf;
Thread thd = null;
int bx[] = {60, 180, 300}, by[] = {70, 170, 270}, cnt, x, y;
boolean flg = false; // もぐら出現フラグ
boolean hit = false; // もぐらたたき成功フラグ
String msg;
Random rnd;
public void init() { // 初期化処理
size = getSize();
bkg = createImage(size.width, size.height);
bf = bkg.getGraphics();
msg = "";
cnt = 0; x = 0; y = 0;
thd = new Thread(this);
thd.start();
rnd = new Random();
addMouseListener(this); // マウスイベントを自クラスで受け取る宣言
}
public void paint(Graphics g) { // 描画処理
bf.setColor(getBackground());
bf.fillRect(0,0,size.width, size.height);
bf.setFont(new Font("Dialog", Font.PLAIN, 20));
bf.setColor(Color.red);
bf.drawString(msg, 10, 25);
bf.setColor(Color.green); // 背景:芝生
bf.fillRect(0, 30, 400, 370);
bf.setColor(Color.black); // 背景:穴
bf.fillOval( 50, 100, 70, 30);
bf.fillOval(170, 100, 70, 30);
bf.fillOval(290, 100, 70, 30);
bf.fillOval( 50, 200, 70, 30);
bf.fillOval(170, 200, 70, 30);
bf.fillOval(290, 200, 70, 30);
bf.fillOval( 50, 300, 70, 30);
bf.fillOval(170, 300, 70, 30);
bf.fillOval(290, 300, 70, 30);
if (cnt >= 10) { // 10匹退治したらゲーム終了
bf.setColor(Color.magenta);
bf.drawString("Congratulations!", 100, 200);
} else {
if (flg == true && hit == false) { // モグラ出現 & まだたたいてない
x = bx[rnd.nextInt(3)]; // モグラ出現位置 x座標(ランダム)
y = by[rnd.nextInt(3)]; // モグラ出現位置 y座標(ランダム)
bf.setColor(Color.yellow); // モグラ:体
bf.fillRoundRect(x, y, 50, 55, 30, 30);
bf.setColor(Color.black);
bf.fillOval(x+15, y+12, 10, 15); // モグラ:左目
bf.fillOval(x+35, y+10, 10, 15); // モグラ:右目
bf.setColor(Color.red);
bf.fillOval(x+30, y+30, 12, 10); // モグラ:鼻
} else if (flg == true && hit == true) { // モグラ出現 & たたくの成功
bf.setColor(Color.yellow); // モグラ:体
bf.fillRoundRect(x, y, 50, 55, 30, 30);
bf.setColor(Color.black);
bf.drawLine(x+10, y+10, x+40, y+25); // モグラ:左目(バッテン)
bf.drawLine(x+10, y+25, x+40, y+10); // モグラ:右目(バッテン)
bf.setColor(Color.red);
bf.fillOval(x+30, y+30, 12, 10); // モグラ:鼻
}
}
g.drawImage(bkg, 0, 0, this);
}
public void run() {
while (cnt < 10) { // 10匹退治するまでループ
double tmp = rnd.nextDouble();
if (tmp < 0.3) { // 30%の確率でモグラ出現
flg = true; // モグラ出現フラグON(true)
} else {
flg = false; // モグラ出現フラグOFF(false)
}
if (hit == true) { // たたくのに成功していたら…
hit = false; // ヒット成功フラグをOFFに
}
try {
thd.sleep(1000);
} catch (InterruptedException e) {
}
repaint();
}
repaint();
}
public void mouseClicked(MouseEvent e) { // マウスクリック時の処理
Point pt = e.getPoint(); // マウスクリック位置取得
if (flg == true && hit == false && x <= pt.x && pt.x <= x+50 && y <= pt.y && pt.y <= y+50) {
cnt++;
msg = "Hit! : " + cnt + "匹退治! 残り" + (10-cnt) + "匹";
hit = true; // モグラたたき成功フラグON(true)
}
repaint();
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
}