【勉強】マインスイーパ(その1) by 日経ソフトウエア2011年6月号
昨日宣言したように、「日経ソフトウエア2011年6月号」の「iOSとAndroidで定番ゲームを作り比べ!」を使って勉強することにしました。
題材となる定番ゲームは「マインスイーパ」です。
恥ずかしながらてぃーはこのゲームを全く知りませんでした。
ウィンドウズに付属されているゲームなのにやったことがありませんでした。
だって、ウィンドウズについているゲームって何か仕事中に暇つぶしみたいにやるようなイメージがあるんですもの(失礼)。
ということで、まずはこのマインスイーパのルールから勉強を始めました。
ゲーム画面は正方形のマスが敷き詰められた長方形のフィールドから構成されている。それぞれのマスは開けることができるが、地雷の置かれているマスを開けると負けとなる。地雷の置かれていないマスを開けたときは、隣接する8マスのいずれかに地雷がある場合はその個数が表示され、隣接するマスに地雷が置かれていないときは、それらが自動的に開けられる。地雷の置かれていないマスをすべて開ければ勝ちとなる。
(Wikipediaより)

試しにウィンドウズでやってみましたが、それなりに頭を使うゲームで楽しいですね。
ちょっとだけやろうと思っていつのまにやら1時間が経ってしまったくらいですから。
では、今回学習したことを書きます。
まず、本誌ではまずJavaでプログラムを記述します。
これはこの内容が、iOSとAndroid両方で使えるコードを書くことが目的なためです。
まずはJavaで書いて次に文法的に似たC++に変え、さらにObjective-C++にして
実装していきます。
要はJavaが分からないとこの内容が理解しづらいということになります。
てぃーは6年ほど前に一瞬だけJavaを勉強したことがあるので助かりました。
コードを書く場合、Xcodeのように入力補助があると楽なので、
マック用のEclipseをダウンロードして使うことにしました。
ダウンロード方法は次の記事を参考にしました。どうもありがとうございます。
→Mac OS X LeopardでEclipse(javaとPHP)開発環境を整える | tonbyブログ
ちなみに、てぃーは日本語化はやっていません。
英語環境に慣れた方がiPhoneアプリ開発者としては有利ですからね。
ただし、標準の状態だと入力補助のキー割り当てが使えません。
マックのOSが使うコマンドになっているからです。
(Spotlightの入力待ちになってしまいます。)
そのため、キー割り当てを変更しました。
参考にさせていただいた記事は以下です。どうもありがとうございます。
→Bloq : eclipse で補完キーバインド変更
てぃーが割り当て先としたのはEscキーです。そう、我らがXcodeと同じですね!!
これを使って楽にコードを打つことができました。

(クリックすると大きな画像が開きます。)
本誌を読んでギミックとしておもしろかったものを挙げます。
実際に見えているテーブルは、内部では各セルの状態を保持するのに2次元の配列を使っています。
ゲーム中、隣接する8マスの状態を何度も調べる必要が生じます。
テーブルの中央にあるマスでは単に8方向を調べればよいだけですが、テーブルの端にあるマスでは存在しないマスが出るためこの方法は使えません。
てぃーだと、テーブルの端にある場合は調べる方向を限定するように条件を入れ場合分けしますが、本誌ではなんとテーブルの周りに外周を作り、外周を表す定数を入れています。
この方法だと場合分けする必要がなく、プログラムが簡単になりますね。
以前読んだ「リバーシのアルゴリズム」という本でも同様の手法が書いてあったことを思い出しました。
使わないと忘れてしまいますね(汗)。テーブルゲームでは常識なのかもしれません。
また、あるマスを開いたときに隣接するマスに地雷がなければ一気に開くのですが、それを実現する方法として「Flood Fill」というものがあることを知りました。
画面サイズが小さいiPhoneならば再帰呼び出しで実装できるので便利ですね。
次回は、いよいよiPhoneへの実装に入っていけると思います。
楽しみです。
↓この記事が参考になったら拍手をクリックお願いします。今後のブログ作りに役立てたいので。
- 関連記事
-
- 【勉強】マインスイーパ(その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)
- 【勉強】マインスイーパ(その1) by 日経ソフトウエア2011年6月号 (2011/05/03)