前へ 一覧 次へ
第二課 盤面を初期化しよう!

今回使うもの
・二次元配列
・#define
あと、自分で関数を定義します。
分からない人は調べてくださいね。

さて、盤面を初期化しよう、とは言うものの、
まだ盤面を定義していません。さっさと決めてしまいましょう。

・大きさは8*8マス
・状態は、何もなし(0)・黒(1)・白(2)の3種類

盤面はchar型の二次元配列でとることにします。
一次元配列でもできますが、多分二次元のほうが分かりやすいので。
この配列の盤面と対応させて、その場所に0が入っていれば何もなし、
1なら黒のコマが、2なら白のコマが入っていることにします。
盤面はグローバルで宣言しておくと簡単です。
二次元配列の要素と盤面の対応は↓のようになります。

見ての通り、左側の[]の数字が行を、右側の[]の数字が列を表しています。

肝心の初期化ですが、for文でぐるぐると回しながら0を代入していって、
最後に中心に黒と白を入れるだけです。
0,1,2など数字がそのままあっては見づらいので、
実際には以下のようにdefineしておくと後々便利です。

//盤面の大きさ
#define BOARDSIZE 8

//状態を定義
#define NONE 0
#define BLACK 1
#define WHITE 2

//盤面
char board[BOARDSIZE][BOARDSIZE];

//初期化関数
void setBoard(void)
{
	int i;
	
	for(i = 0 ; i < BOARDSIZE*BOARDSIZE ; ++i){
		board[i/BOARDSIZE][i%BOARDSIZE] = NONE;
	}
	board[BOARDSIZE/2 - 1][BOARDSIZE/2] = BLACK; //[3][4]
	board[BOARDSIZE/2][BOARDSIZE/2 - 1] = BLACK; //[4][3]
	board[BOARDSIZE/2][BOARDSIZE/2] = WHITE;     //[4][4]
	board[BOARDSIZE/2 - 1][BOARDSIZE/2 - 1] = WHITE; //[3][3]
	
}


一応、
for(i = 0 ; i < BOARDSIZE*BOARDSIZE ; ++i){
	board[i/BOARDSIZE][i%BOARDSIZE] = NONE;
}
について説明します。
今、BOARDSIZEは8なので、このループはiが0から63で実行されます。
iは整数型なので、除算をした時の小数点以下は切り捨てです。よって、
・i/BOARDSIZEの変化 0,0,0,0,0,0,0,0,1,1,1,1,……,6,7,7,7,7,7,7,7,7
・i%BOARDSIZEの変化 0,1,2,3,4,5,6,7,0,1,2,3,……,7,0,1,2,3,4,5,6,7
となり、全てのマスが一度0で初期化されていることになります。
これで、初期化は終了です。




第三課へ
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送