オセロ盤を作る
まず手始めにオセロ盤を描くところまで作ります。
オセロ盤の構造
盤面の構成は下の図のようになってます。
オセロ盤は2次元のint型並列で表現します。
// 盤面 private int[][] board = new int[MASU][MASU];
盤面に入る数字は何もないとき0、黒い石があるとき1、白い石があるとき-1としています(今の段階では石はないので0だけです。プログラム中で0 とか1とかいう数字を使うのは好ましくないので定数で定義しています。
// 空白 private static final int BLANK = 0;
盤面を初期化しているのがinitBoard()です。
private void initBoard() { for (int y = 0; y < MASU; y++) { for (int x = 0; x < MASU; x++) { board[y][x] = BLANK; } } }
まだ石は打ってないので全部BLANKで初期化しています。盤面を描画するのはdrawBoard()です。
private void drawBoard(Graphics g) { // マスを塗りつぶす g.setColor(new Color(0, 128, 128)); g.fillRect(0, 0, WIDTH, HEIGHT); for (int y = 0; y < MASU; y++) { for (int x = 0; x < MASU; x++) { // マス枠を描画する g.setColor(Color.BLACK); g.drawRect(x * GS, y * GS, GS, GS); } } }
盤面全体を緑色で塗りつぶしています。オセロ盤というと緑色がすぐ浮かぶんですがどうなんでしょうね?その後のforループではマスの枠を黒色で描いています。マスの枠を描く処理はけっこうよく使うような気がします。覚えておくと便利です。
追記(2005/5/8)
もっと効率よくマス枠を描く処理をSAWさんに指摘してもらいました。
g.setColor(Color.black); // 縦線を引く for(int i = 1; i < MASU; i++) { g.drawLine(i*GS, 0, i*GS, HEIGHT); } // 横線を引く for(int i = 1; i < MASU; i++) { g.drawLine(0, i*GS, WIDTH, i*GS); } // 外枠を引く g.drawRect(0, 0, WIDTH, HEIGHT);
よく見ると私の方法はかなり無駄があるなぁ。forループの中でsetColor()やる必要ないじゃん・・・forの外で1回やっとけばよかった。シリーズ物は間違いが後の回まで続くのでやっかいです・・・