« オブジェクト指向2 | メイン | まるばつゲーム »

2004年12月17日

仕様書ってものがこの世にはあるらしい

いきなり作れって言われてもよくわかりませんよ。
あと、こんな仕様書じゃ作る意味無いですね。

=====================
図のような○×ゲームを人間対コンピュータ間で行なうプログラムを作成せよ。どちらが先手かは開始時に選べるようにせよ。コンピュータ側の指し手はでたらめではなく,一定の戦略に従うものとし,最低限,相手の王手を発見して阻止手を打つ機能を必須とする。
|X|
-+-+-
|O|O
-+-+-
| |

これの仕様書を作れって言われた。

プログラムの目的:一個目の駒を置いた時点で勝敗が決するゲームを作る事
実現すべき機能:先手と後手をプレイヤーが選択できる、既に勝敗は決しているぜ機能
プレイヤーが気の迷いで先攻をコンピュータにした場合において必ず勝つ機能

外部仕様
出力すべきデータ:
・場の情報(○なのか×なのか空白なのか)
入力すべきデータ:
・プレイヤーの先攻後攻決定(int型,一個,0か1,書式とか期待されても困る)
->入力エラーの条件:数字の0か1以外を入力するとかふざけた事やられた場合は本当なら無視してもいいんだけど仕方ないからエラーチェックしてあげようじゃないか
・駒を配置する場所(11,12などで書いてもらう……)
->入力エラーの(略:上記の数字以外を入力した場合は無条件でプレイヤーの負け。余計な事をするのが悪いんですよ。

内部仕様
データ構造

☆グローバル変数
int型の3*3な二次元配列を用いて場の状態を表す

0.メイン関数
int型の変数を一個用意し、プレイヤーのターンかCPUのターンかを判別

1.場の初期化
グローバル変数であるint型の二次元配列を0で塗りつぶす。ローカル変数は使わない

2.先攻後攻決定入力
char型の文字列格納配列を一個
int型の正しい入力がされているかのチェック用変数を一個。具体的にはsscanfの返り値を代入する
int型の入力された二桁の座標を表す数値を1の位と10の位に分割してそれぞれに代入するサイズが2の配列を一つ用意
あとはループカウンタなどにint型の変数を二個ほど用意しておけば足りるのかもしれない

3.プレイヤーの駒配置希望場所入力
2と同じ

4.コンピュータの駒配置希望場所決定
2と同じだが、一応駒を配置する場所を思考させるために必要な一時変数が数個いるかもしれない。
いくつ必要かわからないのでint型を5個くらい用意しておけば足りるかもしれない。

5.駒を配置
関数の引数で渡された値を元に処理をするので、とりあえず引数を受け取るためにint型を2個ほど用意

6.場を視覚的に表示
グローバル変数を利用する。ループカウンタとあわせてint型を3つ

7.勝ち負け決定
一応ループカウンタなどのために4つくらいint型を確保しておけば足りるのではないか

9.エラー処理
変数いらない

投稿者 miff : 2004年12月17日 00:35

コメント



XREAAD