次のファイルを、c:\usr\c\20141024に保存し、「全て展開」する。
/*
* オセロ盤プログラム (version 1 : 2014/10/24)
* 盤面の設計
* 「結果」の表示を先ず、確かめたい
* 盤面の初期化
* 盤面の表示 (内容のみ)
*/
#include <stdio.h>
int main(int argc, char *argv[]) {
/* ボードを作る */
/* ボードは、8x8 の要素からなる */
/* ボードの一つの要素には 空、黒、白のいずかが入る */
/* 空 ' ' , 白 'o', 黒 '*' -> 一文字 */
char board[8][8];
int tate; /* 縦の添字 */
int yoko; /* 横の添字 */
/* ゲーム盤の初期化 */
/* とりあえず、全部 ' ' にして、後から真ん中の4つを置く */
/* とりあえず、全部空白 */
for ( tate = 0; tate < 8; tate++ ) {
for ( yoko = 0; yoko < 8; yoko++ ) {
board[tate][yoko] = ' '; /* 全ての場所を空白に */
}
}
/* 真ん中の 4 つだけ特別処理 */
board[3][3] = 'o'; /* D4 なので白 */
board[4][4] = 'o'; /* E5 なので白 */
board[3][4] = '*'; /* D5 なので黒 */
board[4][3] = '*'; /* E4 なので黒 */
/* ボードの内容を出力する */
/* 8x8 の内容を全て出力(標準出力)すればよい */
/* 配列の出力 -> for 文でやればよい */
/* 二次元配列なので、二重ループになる */
/*
\yoko 0 1 2 3 4 5 6 7
tate 0 ----->
1 |
2 v
3
4
5
6
7
*/
for ( tate = 0; tate < 8; tate++ ) {
for ( yoko = 0; yoko < 8; yoko++ ) {
printf ( "%c", board[tate][yoko] );
}
printf ( "\n" );
}
return 0;
}
/*
* オセロ盤プログラム (version 2 : 2014/10/24)
* 盤面の設計
* 「結果」の表示を先ず、確かめたい
* 盤面の初期化
* 盤面の表示 (枠を付ける)
*/
#include <stdio.h>
int main(int argc, char *argv[]) {
/* ボードを作る */
/* ボードは、8x8 の要素からなる */
/* ボードの一つの要素には 空、黒、白のいずかが入る */
/* 空 ' ' , 白 'o', 黒 '*' -> 一文字 */
char board[8][8];
int tate; /* 縦の添字 */
int yoko; /* 横の添字 */
/* ゲーム盤の初期化 */
/* とりあえず、全部 ' ' にして、後から真ん中の4つを置く */
/* とりあえず、全部空白 */
for ( tate = 0; tate < 8; tate++ ) {
for ( yoko = 0; yoko < 8; yoko++ ) {
board[tate][yoko] = ' '; /* 全ての場所を空白に */
}
}
/* 真ん中の 4 つだけ特別処理 */
board[3][3] = 'o'; /* D4 なので白 */
board[4][4] = 'o'; /* E5 なので白 */
board[3][4] = '*'; /* D5 なので黒 */
board[4][3] = '*'; /* E4 なので黒 */
/* ボードの内容を出力する */
/* 8x8 の内容を全て出力(標準出力)すればよい */
/* 配列の出力 -> for 文でやればよい */
/* 二次元配列なので、二重ループになる */
/*
\yoko 0 1 2 3 4 5 6 7
tate 0 ----->
1 |
2 v
3
4
5
6
7
*/
printf ( "+-+-+-+-+-+-+-+-+\n" ); /* 上の枠 */
for ( tate = 0; tate < 8; tate++ ) {
printf ( "|" ); /* 左の、この行の枠 */
for ( yoko = 0; yoko < 8; yoko++ ) {
printf ( "%c", board[tate][yoko] );
printf ( "|" ); /* コマとコマの間の枠 */
/*
+-+ <-
|*|
+-+ <-
^ ^
| |
*/
}
printf ( "\n" ); /* 改行 */
printf ( "+-+-+-+-+-+-+-+-+\n" ); /* 間の枠 */
}
return 0;
}
/*
* オセロ盤プログラム (version 3 : 2014/10/24)
* 盤面の設計
* 「結果」の表示を先ず、確かめたい
* 盤面の初期化
* 盤面の表示 (枠やコマを漢字の記号を使った)
*/
#include <stdio.h>
int main(int argc, char *argv[]) {
/* ボードを作る */
/* ボードは、8x8 の要素からなる */
/* ボードの一つの要素には 空、黒、白のいずかが入る */
/* 空 ' ' , 白 'o', 黒 '*' -> 一文字 */
char board[8][8];
int tate; /* 縦の添字 */
int yoko; /* 横の添字 */
/* ゲーム盤の初期化 */
/* とりあえず、全部 ' ' にして、後から真ん中の4つを置く */
/* とりあえず、全部空白 */
for ( tate = 0; tate < 8; tate++ ) {
for ( yoko = 0; yoko < 8; yoko++ ) {
board[tate][yoko] = ' '; /* 全ての場所を空白に */
}
}
/* 真ん中の 4 つだけ特別処理 */
board[3][3] = 'o'; /* D4 なので白 */
board[4][4] = 'o'; /* E5 なので白 */
board[3][4] = '*'; /* D5 なので黒 */
board[4][3] = '*'; /* E4 なので黒 */
/* ボードの内容を出力する */
/* 8x8 の内容を全て出力(標準出力)すればよい */
/* 配列の出力 -> for 文でやればよい */
/* 二次元配列なので、二重ループになる */
/*
\yoko 0 1 2 3 4 5 6 7
tate 0 ----->
1 |
2 v
3
4
5
6
7
*/
printf ( "┏━┳━┳━┳━┳━┳━┳━┳━┓\n" );
for ( tate = 0; tate < 8; tate++ ) {
printf ( "┃" ); /* 左の、この行の枠 */
for ( yoko = 0; yoko < 8; yoko++ ) {
if ( board[tate][yoko] == ' ') { /* 空き */
printf ( " " );
} else if ( board[tate][yoko] == 'o') { /* 白 */
printf ( "◯" );
} else /* if board[tate][yoko] == 'x') */ { /* 黒 */
printf ( "●" );
}
printf ( "┃" ); /* コマとコマの間の枠 */
}
printf ( "\n" ); /* 改行 */
if ( tate < 8 - 1 ) { /* 最後は、これを使わない */
printf ( "┣━╋━╋━╋━╋━╋━╋━╋━┫\n" );
} else { /* 最後の行に使うのはこれ */
printf ( "┗━┻━┻━┻━┻━┻━┻━┻━┛\n" );
}
}
return 0;
}
/*
* オセロ盤プログラム (version 4 : 2014/10/24)
* v3 と同じ動きをするプログラム (機能は変更しない)
* プログラムの整理をする ( refactring:リファクタリング )
* 機能単位をみつけ、それを関数の形で、抜き出す
* 関数を作るので、その影響も補正する
* 機能
* 初期化の部分
* 表示の部分
*/
#include <stdio.h>
/* 表示の部分 */
/*
print_board : 与えらたボードデータを表示する
<<ポイント>>
配列の引数には特殊事情がある : 後回し
*/
void print_board ( char board[8][8] ) {
int tate; /* 縦の添字 */ /* 追加(Copy) */
int yoko; /* 横の添字 */
/* 表示機能 (移動) */
/* ボードの内容を出力する */
/* 8x8 の内容を全て出力(標準出力)すればよい */
/* 配列の出力 -> for 文でやればよい */
/* 二次元配列なので、二重ループになる */
/*
\yoko 0 1 2 3 4 5 6 7
tate 0 ----->
1 |
2 v
3
4
5
6
7
*/
printf ( "┏━┳━┳━┳━┳━┳━┳━┳━┓\n" );
for ( tate = 0; tate < 8; tate++ ) {
printf ( "┃" ); /* 左の、この行の枠 */
for ( yoko = 0; yoko < 8; yoko++ ) {
if ( board[tate][yoko] == ' ') { /* 空き */
printf ( " " );
} else if ( board[tate][yoko] == 'o') { /* 白 */
printf ( "◯" );
} else /* if board[tate][yoko] == 'x') */ { /* 黒 */
printf ( "●" );
}
printf ( "┃" ); /* コマとコマの間の枠 */
}
printf ( "\n" ); /* 改行 */
if ( tate < 8 - 1 ) { /* 最後は、これを使わない */
printf ( "┣━╋━╋━╋━╋━╋━╋━╋━┫\n" );
} else { /* 最後の行に使うのはこれ */
printf ( "┗━┻━┻━┻━┻━┻━┻━┻━┛\n" );
}
}
}
/*
* 初期化
*/
void init_board( char board[8][8] ) {
int tate; /* 縦の添字 */
int yoko; /* 横の添字 */
/* ゲーム盤の初期化 */
/* とりあえず、全部 ' ' にして、後から真ん中の4つを置く */
/* とりあえず、全部空白 */
for ( tate = 0; tate < 8; tate++ ) {
for ( yoko = 0; yoko < 8; yoko++ ) {
board[tate][yoko] = ' '; /* 全ての場所を空白に */
}
}
/* 真ん中の 4 つだけ特別処理 */
board[3][3] = 'o'; /* D4 なので白 */
board[4][4] = 'o'; /* E5 なので白 */
board[3][4] = '*'; /* D5 なので黒 */
board[4][3] = '*'; /* E4 なので黒 */
}
/* ボードを作る */
/* ボードは、8x8 の要素からなる */
/* ボードの一つの要素には 空、黒、白のいずかが入る */
/* 空 ' ' , 白 'o', 黒 '*' -> 一文字 */
int main(int argc, char *argv[]) {
char board[8][8];
init_board ( board ); /* 引数に配列名しか指定しない */
print_board ( board ); /* 引数に配列名しか指定しない */
return 0;
}
本日の課題は、ありません。