カテゴリー「エクセル」の記事

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

オセロゲームの機能向上してみました

2013年4月8日 / エクセル, パソコン, 仕事, 生活など

昨日作ったオセロにちょっと機能追加しました。

追加した機能は・・・・

  1. 駒を置いた後で終了判定を行う
  2. 全てのセルをチェックし、黒、白、空白の数を数えながら判定する。
  3. 次の攻撃が可能なら、そのまま次の攻撃者を変更する。
  4. 次の攻撃が不可能なら、以下の判定を行う
    1. 全部のセルが埋まった場合:終了のメッセージを出す
    2. 黒又は白だけになった場合:「XXの勝利」とメッセージを出す
    3. A,B以外=駒を置く場所があるが次の攻撃者が攻撃できない場合:「置場がありません。再度攻撃してください」とメッセージを出し攻撃者を変えない。

動くようにはなりましたが、コードが汚くなってしまった  ^^;;;

機能追加すると複雑になってしまう典型的なパターンでした。。

次はコンピュータと対戦できるやつを考えてみるかなぁ~

ちょっとだけ変更。
打った後でA1セルに戻してましたが、必要ないことに気づきました。
気になるちらつきが解消しました。

オセロ5

プロフィール

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


大きな地図で見る

カテゴリー

WordPress

セキュリティニュース


TOPへ戻る

PAGE TOP