/********************************/ /* ぷよぷよ(ゲーム全体の制御) */ /********************************/ import java.awt.*; import java.applet.*; import java.util.*; public class Game2 extends Applet implements Runnable { int p_x = 0, p_y = 0, row = 12, col = 5; boolean state = true, game = true; Puyo py; int p[][] = new int [row][col]; Random rn; Thread th; /************/ /* 初期設定 */ /************/ public void init() { // 背景色 setBackground(new Color(238, 255, 238)); // ゲームパネルの配置 setLayout(null); py = new Puyo(this); add(py); py.setSize(30*col, 30*row); py.setLocation(10, 10); py.setBackground(Color.white); rn = new Random(); // ピースの選択 select(); // スレッドの生成 th = new Thread(this); th.start(); } /******************/ /* 左右上下の余裕 */ /******************/ public Insets getInsets() { return new Insets(10, 10, 10, 10); } /******************/ /* スレッドの停止 */ /******************/ public void stop() { state = false; } /******************/ /* スレッドの実行 */ /******************/ public void run() { while (state) { try { th.sleep(500); } catch (InterruptedException e) {} // ピースの落下 if (p_y < row-1) { p[p_y+1][p_x] = p[p_y][p_x]; p[p_y+1][p_x+1] = p[p_y][p_x+1]; p[p_y][p_x] = 0; p[p_y][p_x+1] = 0; p_y++; } else select(); // 再描画 py.repaint(); } } /****************/ /* ピースの選択 */ /****************/ void select() { int color; p_y = 0; p_x = (int)(rn.nextDouble() * (col - 1)); if (p_x > col-2) p_x = col - 2; color = (int)(rn.nextDouble() * 4) + 1; if (color > 4) color = 4; p[0][p_x] = color; color = (int)(rn.nextDouble() * 4) + 1; if (color > 4) color = 4; p[0][p_x+1] = color; } } /****************/ /* ゲームパネル */ /****************/ class Puyo extends Panel { Game2 gm; /******************/ /* コンストラクタ */ /******************/ Puyo (Game2 gm_t) { gm = gm_t; } /********/ /* 描画 */ /********/ public void paint (Graphics g) { int i1, i2; // ゲーム中 if (gm.game) { for (i1 = 0; i1 < gm.row; i1++) { for (i2 = 0; i2 < gm.col; i2++) { if (gm.p[i1][i2] > 0) { switch (gm.p[i1][i2]) { case 1: g.setColor(Color.red); break; case 2: g.setColor(Color.pink); break; case 3: g.setColor(Color.green); break; case 4: g.setColor(Color.blue); break; } g.fillRect(i2*30, i1*30, 30, 30); } } } } // ゲームオーバー else { Font f = new Font("TimesRoman", Font.BOLD, 40); g.setFont(f); g.drawString("Game", 20, 200); g.drawString("Over!", 25, 250); gm.state = false; } } }