次のファイルを、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; }
本日の課題は、ありません。