【勉強】マインスイーパ(その5) by 日経ソフトウエア2011年6月号
前回に引き続き、「日経ソフトウエア2011年6月号」の「iOSとAndroidで定番ゲームを作り比べ!」のマインスイーパの勉強です。
前回まででプログラムの理解はできたと思ったので、今回はこのプログラムを参考に同じボードゲームである「◯×ゲーム」を作ってみようと思いました。
方法としては、新しいプログラム「Marubatsu」(まるばつ)を作り、これにコードをコピペして必要な箇所を変更するやり方で行いました。
プログラムの主体となるのは「その2」で挙げた以下のファイルと思われました(再掲)。
・MinesweeperAppDelegate.h/m :Delegate用ファイル
・MenuViewController.h/m :メニュー画面用ファイル
・Minesweeper.h/mm :計算ロジック用ファイル
・MinesweeperViewController.h/m :ゲーム画面コントローラ用ファイル
・MinesweeperView.h/m :ゲーム画面用ファイル
これらのコードを新たに作った各「Marubatsu~」にコピペして貼りつけ、コード内の
・「Minesweeper」を「Marubatsu」にといった具合に機械的に一括置換しました。
・「msweeper」を「mbatsu」に
これによって新しいプログラム「Marubatsu」で今までのマインスイーパをまず動かす予定でした。
ところが!!
実行しても画面が真っ暗なままでした。エラーが出たというわけではありませんでした。
各所にブレイクポイントを置いてデバックしましたが、どのブレイクポイントにも到達していませんでした。
つまり、プログラム自体が前に進んでいなかったのです。
一体どこが悪いのか分からず、途方にくれました。
各ファイルを1つ1つ比較していったところ、ようやく原因が分かりました。
上に囲みで挙げたファイルではなく、Suppering Filesの中の「main.m」だったのです。
Objective-CもC言語の派生型なので、このmain.mのmain関数がプログラムのエントリーポイント(入口)なのです!
この中で
int retVal = UIApplicationMain(argc, argv, nil, @"MinesweeperAppDelegate");という箇所の最後の引数に最初に呼ばれるファイルを指定する必要があったのです(初期値はnil)。
ここを設定するとあっさりとマインスイーパが動きました。
当初どうやってAppDelegateから始めているのか疑問でしたが(「その2」参照)、ようやく謎が解けました。
この点については全く知らなかったのでとても勉強になりました。
あとは、必要な箇所を◯×ゲームに対応するように変更するだけでした。
適当な画像ファイルを作って次のような感じになりました。

ギミックについてはちょっと悩ましいところがあります。
ゲームのクリア条件は、タテ・ヨコ・ナナメに同じ◯または×の記号が3つ連続する場合ですね。
この判定をするのをどうしようか迷い中です。
マインスイーパでは内部で持っている配列はint型でしたが、◯×ゲームでは単に「◯」か「×」かの文字列で持たせた方が楽かもしれません。
同じ方向の3つを見た場合、例えば「◯◯◯」になればクリアの判定ができるわけですから。
あるいは、“◯を1、×を-1、まだ置いていないマスを0” としてint型にする方法もありますね。
こうすれば、同じ方向の3つを見た場合に合計が
・「◯◯◯」は「3」でクリアといった感じに判定できますね。
・「×××」は「-3」でクリア
・それ以外はそれ以外の数になるのでクリアでない
また、敵(コンピュータ)側の攻撃は乱数で空いているマスに入れるようにしましたが、独自のアルゴリズムが作れたら理想的ですね。
いろいろアイデアが出てきて楽しいです。
ちなみに、これらのアイデアは以前読んだ「リバーシのアルゴリズム」という本にあったような気がしてきました。
読み直してみようかと思います。
本当に他の方のコードを読むのは勉強になります。ひとつのプログラムをじっくりと分析することで自分のものにできますから。
また、以前得た知識とも融合できるのでいろいろな手法を学んでおくべきですね。
↓この記事が参考になったら拍手をクリックお願いします。今後のブログ作りに役立てたいので。
- 関連記事
-
- 【勉強】マインスイーパ(その6/最終回) by 日経ソフトウエア2011年6月号 (2011/05/19)
- 【勉強】マインスイーパ(その5) by 日経ソフトウエア2011年6月号 (2011/05/15)
- 【勉強】マインスイーパ(その4) by 日経ソフトウエア2011年6月号 (2011/05/10)
- 【勉強】マインスイーパ(その3) by 日経ソフトウエア2011年6月号 (2011/05/08)
- 【勉強】マインスイーパ(その2) by 日経ソフトウエア2011年6月号 (2011/05/05)