//============================================================================= // UpperHand.java // Copyright(c) 1998 Satoshi Kobayashi, All rights reserved. //============================================================================= import java.applet.*; import java.awt.*; //============================================================================= // class UpperHand // Applet UpperHand を定義するクラス。 //============================================================================= public class UpperHand extends Applet { //----------------------------------------------------------------------------- // クラス変数定義 //----------------------------------------------------------------------------- // バージョン表示用文字列 private final static String version = "UpperHand Game 1.1a8"; // 著作権表示文字列 private final static String copyright = "Copyright(c) 1998 Satoshi Kobayashi, All rights reserved."; // 使用する色のインデックス public final static int BG_COLOR = 0; // 背景色 public final static int FG_COLOR = 1; // 前景色 public final static int NUTRAL_COLOR = 2; // 中立の玉の色 public final static int FIRST_COLOR = 3; // 先手の玉の色 public final static int SECOND_COLOR = 4; // 後手の玉の色 // 使用する色の定義 public final static Color color[] = { Color.lightGray, Color.black, Color.green.darker(), Color.blue, Color.red }; //----------------------------------------------------------------------------- // インスタンス変数定義 //----------------------------------------------------------------------------- // ゲーム盤 private UpperHandGame game; // プレーヤー private UpperHandPlayer player[] = new UpperHandPlayer[2]; // ゲーム盤を表示するコンポーネント private UpperHandBoardView boardView; // プレーヤーを表示するコンポーネント private UpperHandPlayerView playerView[] = new UpperHandPlayerView[2]; // 持ち玉を表示するコンポーネント private UpperHandBallView ballView[] = new UpperHandBallView[2]; //----------------------------------------------------------------------------- // メソッド定義 //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // public void init() // Appletの初期化処理を行う。 //----------------------------------------------------------------------------- public void init() { // ゲーム盤を新規に作成し、初期化する。 game = new UpperHandGame(); game.init(); // 背景色を設定する。 setBackground(UpperHand.color[UpperHand.BG_COLOR]); // コンポーネントを作成する。 createComponent(); // コンポーネントを配置する。 layoutComponent(); // ゲームを開始する。 startGame(); } //----------------------------------------------------------------------------- // private void createComponent() // コンポーネントを作成する。 //----------------------------------------------------------------------------- private void createComponent() { // すべてのコンポーネントを取り除く。 removeAll(); // ゲーム盤を表示するコンポーネントを作成する。 boardView = new UpperHandBoardView(game, this); for (int p = UpperHandGame.FIRST; p <= UpperHandGame.SECOND; p++) { // プレーヤーを表示するコンポーネントを作成する。 playerView[p] = new UpperHandPlayerView(game, p); // 持ち玉を表示するコンポーネントを作成する。 ballView[p] = new UpperHandBallView(game, p); } } //----------------------------------------------------------------------------- // private void layoutComponent() // コンポーネントを配置する。 //----------------------------------------------------------------------------- private void layoutComponent() { GridBagLayout layout = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); // レイアウトマネージャを設定する。 setLayout(layout); // ゲーム盤を表示するコンポーネントを配置する。 c.gridheight = GridBagConstraints.REMAINDER; c.fill = GridBagConstraints.NONE; layout.setConstraints(boardView, c); add(boardView); // 以降のコンポーネントの配置方法を設定する。 c.gridheight = 1; c.gridwidth = GridBagConstraints.REMAINDER; c.anchor = GridBagConstraints.NORTH; // 先手のプレーヤーを表示するコンポーネントを配置する。 c.fill = GridBagConstraints.HORIZONTAL; layout.setConstraints(playerView[UpperHandGame.FIRST], c); add(playerView[UpperHandGame.FIRST]); // 先手の持ち玉を表示するコンポーネントを配置する。 c.fill = GridBagConstraints.NONE; layout.setConstraints(ballView[UpperHandGame.FIRST], c); add(ballView[UpperHandGame.FIRST]); // 後手のプレーヤーを表示するコンポーネントを配置する。 c.fill = GridBagConstraints.HORIZONTAL; layout.setConstraints(playerView[UpperHandGame.SECOND], c); add(playerView[UpperHandGame.SECOND]); // 後手の持ち玉を表示するコンポーネントを配置する。 c.fill = GridBagConstraints.NONE; layout.setConstraints(ballView[UpperHandGame.SECOND], c); add(ballView[UpperHandGame.SECOND]); } //----------------------------------------------------------------------------- // public void start() // Appletのページに移動したときの処理を行う。 //----------------------------------------------------------------------------- public void start() { } //----------------------------------------------------------------------------- // public void stop() // Appletのページから離れるときの処理を行う。 //----------------------------------------------------------------------------- public void stop() { } //----------------------------------------------------------------------------- // public void destroy() // Appletを破棄するときの処理を行う。 //----------------------------------------------------------------------------- public void destroy() { } //----------------------------------------------------------------------------- // public String getAppletInfo() // Appletのバージョン、著作件表示を返す。 //----------------------------------------------------------------------------- public String getAppletInfo() { return version + " " + copyright; } //----------------------------------------------------------------------------- // public boolean mouseDown(Event evt, int x, int y) // マウスのボタンが押されたときの処理を行う。 //----------------------------------------------------------------------------- public boolean mouseDown(Event evt, int x, int y) { if (game.isFinish()) { // ゲームが終了している場合 startGame(); // 新しいゲームを始める。 } return true; } //----------------------------------------------------------------------------- // public boolean mouseEnter(Event evt, int x, int y) // マウスがApplet内に入ったときの処理を行う。 //----------------------------------------------------------------------------- public boolean mouseEnter(Event evt, int x, int y) { // Appletの情報をステータスバーに表示する。 showStatus(getAppletInfo()); return true; } //----------------------------------------------------------------------------- // public void startGame() // ゲームを開始する。 //----------------------------------------------------------------------------- public void startGame() { // プレーヤーを初期化する。 initPlayer(); // ゲームを初期化する。 game.init(); // 次の一手に進む。 nextMove(); } //----------------------------------------------------------------------------- // public void makeMove(int p) // 位置pに着手する。 //----------------------------------------------------------------------------- public void makeMove(int p) { // 着手する。 game.makeMove(p); if (game.isFinish()) { // ゲームが終わったとき return; // 何もしない。 } else { nextMove(); // 次の一手に進む。 } } //----------------------------------------------------------------------------- // private void initPlayer() // コンピュータのプレーヤーを生成し、コンピュータが後手、先手の順になるよ // うに手番を決める。 //----------------------------------------------------------------------------- private void initPlayer() { // プレーヤーを初期化する。 if (player[UpperHandGame.SECOND] != null) { // 後手がコンピュータの場合 // 先手をコンピュータ、後手を人間に設定する。 player[UpperHandGame.FIRST] = new UpperHandPlayer(); player[UpperHandGame.SECOND] = null; // プレーヤーの名前を設定する。 playerView[UpperHandGame.FIRST].playerName("Duke"); playerView[UpperHandGame.SECOND].playerName("You"); } else { // 先手を人間、後手をコンピュータに設定する。 player[UpperHandGame.FIRST] = null; player[UpperHandGame.SECOND] = new UpperHandPlayer(); // プレーヤーの名前を設定する。 playerView[UpperHandGame.FIRST].playerName("You"); playerView[UpperHandGame.SECOND].playerName("Duke"); } } //----------------------------------------------------------------------------- // private void nextMove() // 次の一手に進む。 // 次のプレーヤーがコンピュータのときは、次に一手をコンピュータに選択 // させ、着手する。次のプレーヤーが人間のときは何もせずにリターンし、 // マウスの入力を待つ。 //----------------------------------------------------------------------------- private void nextMove() { int p = game.nextPlayer(); if (player[p] != null) { // 次のプレーヤーがコンピュータのとき // 次の一手をコンピュータに選択させ、着手する。 makeMove(player[p].selectMove(game)); } } }