「2013年04月」の記事

コンピュータ対戦版(内部設計)

2013年4月13日 / エクセル, パソコン, 仕事

以下の手順に従い内部設計を行います。

  1. ファイル設計
  2. モジュール設計

1.ファイル設計

  1. 戦績ファイル
    対戦型と同じ
  2. 打ち手判定ファイル
    可能な打ち手、優先順位、反転できる駒(数は可変)

2.モジュール設計(メインモジュールは1本で、人間がセルをクリックしたら起動する)

  1. 場所の判定(盤面上で、空白の場所か?)
    打てない場所の場合、処理終了
  2. 打った手の反転処理(共通モジュール化する)
    打った手とオプションボタンの状態から打てる手かどうかの判定を行いながら反転する。
    同時に、戦績ファイルに記録する
  3. 上記処理の結果、打てない場所の場合は処理終了
  4. 勝敗判定(モジュール化)
    オプションボタンの状態とすべてのセルのチェックで以下の判定を行う

    1. 終了(打てる場所なし、全部黒または全部白
    2. 黒の攻撃(オプションボタンが白で黒の攻撃可能)
    3. 白の攻撃(オプションボタンが黒で白の攻撃可能)
  5. 勝敗判定で終了又は黒の攻撃の場合、処理終了
  6. 上記以外の場合、コンピュータの処理を行う
    1. 空白のセルをすべて調べ、打ち手判定ファイルを作る
    2. 打ち手判定ファイルを調べ、打ち手を決定する
    3. 決定した打ち手で、打った手の判定処理を行う
  7. 4.の勝敗判定に戻る

こんな感じでしょうか?

2.と4.と6.の処理をサブモジュール化します。

 

Excelでオセロ:コンピュータ対戦版(設計)

2013年4月12日 / エクセル, パソコン, 仕事

そろそろコンピュータ対戦の作成をしたいと思います。

前回までの対戦型オセロは、最初の思い付きから徐々に機能を追加していきました。こういう作り方も実際にはあると思いますが、今回は要件を作ってから作成していこうと思います。

ということで、今回は「要件定義」を行っていきます。

  1. 人間側を「黒」、コンピュータを「白」とし、黒の先攻とする。
  2. 対戦の履歴を残す。
  3. コンピュータが打つ手のロジックを検討できるよう、コンピュータが打てる場所と打った結果(反転する駒の場所など)を記録した後でコンピュータの手を決定する。
  4. 盤面の形式及び終了時の動き等は対戦型オセロと同じにする。

とりあえずこんなところでしょうか?

上記の要件4.で動きなどは明確なので、外部設計も完了したとみなしていいと思います。

Excelでオセロ:見た目変わりませんが・・・

2013年4月11日 / エクセル, パソコン, 仕事

今後の機能アップなどに備えて、戦績を記録できるようにしました。
戦績を記録することで、元に戻すや再現が可能になります。(未実装ですが・・・)

  1. 戦績シートを追加します。
    1. 追加したシートの名前を戦績シートにします
    2. 戦績シートを追加したので、盤面のシートにも名前(盤面)を付けます
    3. プログラム中でセル指定している部分にシート名を追記します。
  2. 初期化処理に戦績シートの初期化を追加します
  3. 戦績シートには、打ち手の色、打った場所、反転した場所を記録します
    1. セル位置をセル文字(”A1″、”A2″等)に変換する関数を作ります。(セル文字 function)
    2. セル位置をもらい、戦績シートの空いてる行の3列目以降に反転したセル位置を格納するSubを作ります。(反転履歴セット Sub)
    3. セル文字をもらい、反転履歴をセットした行の1列目に打ち手の色、2列目に打った場所をセットするSubを作ります。(打ち手履歴セット Sub)
    4. メインのSubの打ち手をセットした後で、打ち手履歴セット Subを呼び出します。
    5. セルチェックFunction の反転後、反転履歴セット Subを呼び出します。

履歴は出来ましたが、使ってないので動きは同じです。
遊んだあとで履歴を確認して反省くらいはできるのではないかともいます。初期化したら消えるので、残したいときは名前を付けて保存しましょう。

オセロ6

簡単なので、再生機能作りました。

  1. 盤面シートをコピーする。
    1. マクロとオプションボタンは全部消去する
    2. コマンドボタンを「再生開始」にする
    3. 再生シートの盤面を初期化する
  2. 戦績シートを2行目から順番に読込み以下の処理を行う
    1. 色により、置く駒の文字を設定
    2. 打ち手セルの場所に駒を書き込む
    3. 反転セルも順番に書き込む
    4. 書き込む際に1秒づつ待つ。
  3. 判定方法を変更
    1. ここまで作って翌日テストしたら、再生した結果と実際のゲームの結果が違ってました。反転有無のチェックで問題がありました。(いままでの仕様では問題なしでしたが、若干無駄な動作があったようです。)

オセロ7

プロフィール

志多木義浩
732-0821
広島市南区大須賀町17-5-709
TEL  080-3622-4171


大きな地図で見る

カテゴリー

WordPress

セキュリティニュース


TOPへ戻る

PAGE TOP