【勉強】マインスイーパ(その3) by 日経ソフトウエア2011年6月号
前回に引き続き、「日経ソフトウエア2011年6月号」の「iOSとAndroidで定番ゲームを作り比べ!」のマインスイーパの勉強です。
今回は、計算ロジック用ファイルについてです。
計算ロジック用ファイルであるMinesweeper.mはJavaで作ったものを流用して作成します。
Javaと表現が異なる箇所はObjective-Cの表記に書き改めます。
一対一で対応できるところはいいのですが、そうでないところを理解するのがちょっとしたハードルでした。
まず、Javaとは違って一度に2次元の配列を動的に作れないため工夫が必要です。
一度1次元の配列を作り、それを使って2次元の配列を作成していました。
かなりの技だと思いました。
table_n = new int*[table_y];
for (int i=0; i<table_y; i++) {
table_n[i] = new int[table_x];
}
他に、Javaで作成した一部のメソッドが語尾にXがつく名称に変更されていました。
(例)この理由は最初全然分かりませんでした。
・setBombFirst→setBombFirstX
・getCellNumber→getCellNumberX
また、メソッドの引数の呼び出し方が見たこともない表記の仕方になっていました。
(例)これはいったい何なんでしょうか??
- (int)getCellNumberX:(int)x Y:(int)y
(int)yの前にY:があってその前の(int)xには単にメソッド名があるだけ・・・。
そして呼び出すときは、
[インスタンス名 getCellNumberX:x Y:y]となっていました。
自分がよくやる書き方だと、
- (int)getCellNumberX:(int)x :(int)yなので謎だらけでした。
[インスタンス名 getCellNumberX:x :y]
色々と調べてみると、これは「メソッド引数のラベリング」というもので前についているものをラベルと呼ぶ、ということが分かりました。
おそらく呼び出し時に引数がたくさんある場合にラベルがあれば区別しやすいということなのでしょうが、第1引数にラベルがないので紛らわしく、ちょっと分かりにくいですね。
アップルはこちらの方を推奨しているようですが、自分はラベルのない方の書き方で
やっていこうと思いました。
本当に他の方のコードを読むのは勉強になります!!
残るゲーム画面用ファイルについてはまた次回です。
GW中にすべて理解したかったのですが、予定通り進めませんでした。
まあ、こんなもんでしょう(激甘)。
↓この記事が参考になったら拍手をクリックお願いします。今後のブログ作りに役立てたいので。
- 関連記事
-
- 【勉強】マインスイーパ(その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)