【勉強】マインスイーパ(その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」参照)、ようやく謎が解けました。
この点については全く知らなかったのでとても勉強になりました。

あとは、必要な箇所を◯×ゲームに対応するように変更するだけでした。
適当な画像ファイルを作って次のような感じになりました。

★ishot-2

ギミックについてはちょっと悩ましいところがあります。
ゲームのクリア条件は、タテ・ヨコ・ナナメに同じ◯または×の記号が3つ連続する場合ですね。
この判定をするのをどうしようか迷い中です。
マインスイーパでは内部で持っている配列はint型でしたが、◯×ゲームでは単に「◯」か「×」かの文字列で持たせた方が楽かもしれません。
同じ方向の3つを見た場合、例えば「◯◯◯」になればクリアの判定ができるわけですから。
あるいは、“◯を1、×を-1、まだ置いていないマスを0” としてint型にする方法もありますね。
こうすれば、同じ方向の3つを見た場合に合計が
・「◯◯◯」は「3」でクリア
・「×××」は「-3」でクリア
・それ以外はそれ以外の数になるのでクリアでない
といった感じに判定できますね。
また、敵(コンピュータ)側の攻撃は乱数で空いているマスに入れるようにしましたが、独自のアルゴリズムが作れたら理想的ですね。
いろいろアイデアが出てきて楽しいです。
ちなみに、これらのアイデアは以前読んだ「リバーシのアルゴリズム」という本にあったような気がしてきました。
読み直してみようかと思います。

本当に他の方のコードを読むのは勉強になります。ひとつのプログラムをじっくりと分析することで自分のものにできますから。
また、以前得た知識とも融合できるのでいろいろな手法を学んでおくべきですね。



↓この記事が参考になったら拍手をクリックお願いします。今後のブログ作りに役立てたいので。

関連記事

コメントの投稿

非公開コメント

プロフィール

てぃー

Author:てぃー
詳しい自己紹介:こちら
Twitter:@teapipin


follow us in feedly 
にほんブログ村 IT技術ブログへ にほんブログ村 PC家電ブログへ
現在の閲覧者数:

ブログ内検索
今日のアクセス数の多い記事
カレンダー

05月 | 2017年06月 | 07月
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
過去記事ダイジェスト
お知らせ

ツイッター分析の分析結果が和歌山大学防災研究教育センターの論文に引用
防災の研究において評価!

2015年版ツイッター分析(世界編)が始動!
今回は世界の国別・言語別ツイートを分析!

ツイッター分析の分析結果が慶應義塾大学有名教授の研究論文などに引用
文系の研究までも制覇!

Interval Timer EX
有名雑誌「Mac Fan 2015月2月号」に「インターバルタイマーEX」が3度目の掲載!!ポモドーロテクニックに有効!

自作Macアプリ3部作が2014年 Vector 年間ダウンロードランキング Mac トップ100にすべてランクイン

TimeCalcを公開しています!
時間計算、年齢計算、学歴欄作成など。

ツイッター分析の分析結果が人工知能の研究に!
ブログが学会発表で引用されました。

今まで開発したiPhoneアプリのソースコードを公開しています!
勉強に役立ててください。


2013年 Vector 年間ダウンロードランキング Mac トップ100に「デジカメ変更日を撮影日に一括変更 for Mac」と「インターバルタイマーEX」がランクイン

Interval Timer EX
有名雑誌「Mac Fan 2013月4月号」に「インターバルタイマーEX」が2度目の掲載!!

リアルタイムツイッター地図
リアルタイムツイッター地図を公開しています!
位置情報付きツイートをリアルタイムに表示します。

新たなツイッター分析としてイベントツイート分析を行っています!

2012年8月1日(水)開催の「Twitter勉強会」で発表
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack from teapipin


Interval Timer EX
有名雑誌「Mac Fan 2012月3月号」に「インターバルタイマーEX」が掲載!!



 

はてなブックマークの人気記事
ツイート&いいね!ランキング