/************************/ /* シューティングゲーム */ /************************/ import java.awt.*; import java.applet.*; import java.util.*; public class Game1 extends Applet implements Runnable { boolean state = true, game = true; int xt, yt, vx, vy, x, y, r = 25, sp = 5, target = 0; Thread th; Dimension d; Random rn; public void init() { // 背景色 setBackground(new Color(238, 255, 238)); // 初期設定 d = getSize(); x = d.width / 2 - 10; y = d.height - 20; rn = new Random(); // スレッドの生成 th = new Thread(this); th.start(); } public Insets getInsets() { return new Insets(0, 0, 0, 0); } public void stop() { state = false; } public void run() { double ang; while (state) { try { th.sleep(33); } catch (InterruptedException e) {} // ターゲットの移動と消滅 if (target == 1) { xt += vx; yt += vy; if (xt < -2*r || xt > d.width || yt > d.height) target = 0; } // ターゲットの生成 else if (target == 0){ target = 1; xt = (int)((d.width - 2 * r) * rn.nextDouble()); yt = -r; ang = 0.5 * Math.PI * rn.nextDouble() + 0.25 * Math.PI; vx = (int)(sp * Math.cos(ang)); vy = (int)(sp * Math.sin(ang)); } // 再描画 repaint(); } } public void paint (Graphics g) { // ゲーム中 if (game) { // 砲台の表示 g.fill3DRect(x, y, 20, 20, true); // ターゲットの表示 g.setColor(Color.green); g.fillOval(xt, yt, 50, 50); } // ゲームオーバ else { Font f = new Font("TimesRoman", Font.BOLD, 50); g.setFont(f); g.drawString("Game Over", d.width/2-130, d.height/2); } } }