ポケット - はてなブックマークのiPhoneアプリです。
datecam s -写真に日付を
AppBank iPhoneアプリ版
2008年11月15日
■[iPhoneSDK] iPhoneアプリを作ってみよう:第1回 じゃんけんゲーム(#4.Xcode基礎編)
iPhoneアプリを作ってみよう:第1回 じゃんけんゲームの第4回です。
前回までで、IBとXcodeを連携させて、Xcode側から画面上の要素を
操作するための準備が整いました。
今回は更に具体的な内容として、ボタン押下時の処理等について説明します。
まずXcodeを開いて、「jankenViewController.h」に以下のコードを記述してください
※画像をクリックすると拡大します
ここで登場したキーワードが「IBAction」です。
これはIBにアクションを認識させるもので、IB側で要素のイベントと
括り付けることにより、様々なパターンでの動作を制御することができます。
「IBAction」で記述した内容は、IB側では以下のように反映されます。
アクションも、以下のように該当の要素とアウトレットします。
※画像をクリックすると拡大します
その要素のイベントが一覧で表示されるので、括り付けたいイベントを選択します。
今回は「Touch up inside」に括り付けます。これはタッチして指を離した時のイベントです。
※画像をクリックすると拡大します
無事に括り付けられると、以下のようになります。
他の要素についても、同様に括り付けましょう。
次に、「jankenViewController.m」に以下のコードを記述します。
※画像をクリックすると拡大します
これは先ほど「jankenViewController.h」で宣言したメソッドの本体で、この中に実際のコードを記述していきます。
例として、ぐーボタンをタップした時の動きである、「btn_gu_down」メソッドにコーディングしてみます。
※画像をクリックすると拡大します
メッセージラベル(lbl_mes)にはじゃんけんでお互い手を出した時の掛け声を表示し、
「ちょき」と「ぱー」のボタンは非表示にすることで、じゃんけんが開始されたことを示しています。
最後の「もういっかい」ボタンは、この時点で見えるようにします。※内容は後述。
この状態で実行し、ぐーボタンをタップすると、以下のようになります。
少しだけ動きが見えてきました。
が、これでは相手が何も手を出してないので、じゃんけんとは言えません。
そこで、「相手」と「結果を表示」に、そのあたりのコーディングを施す必要があります。
まず相手の出す手の内容について。
これは「aite」に表示します。この時、相手はランダムで手を繰り出さないと
じゃんけんにはなりません。なので、乱数を使用してみます。
rand関数で乱数を発生させ、3倍することで0〜2.999・・の数値が発生することになります。
これをInteger変数に入れるので、kekkaは0、1、2のどれかになります。
そこで、0だったら「ぐー」、1だったら「ちょき」、それ以外だったら「ぱー」を
表示してやろう、というわけですね。
ちなみに最初に書いてあるsrand関数については、以下をご覧ください。
Cocoa:乱数をつくるには
http://www.oomori.com/co/db/keisan/0000013.html
この結果が以下になります。
続いて結果表示をコーディングします。
kekkaには、0、1、2のどれかが格納されてます。
そして、今はぐーをタップした時の処理をコーディングしています。
この相関関係より、kekkaの値による勝ち負け引き分けの判断が
以下のように可能となります。
この結果が以下になります。
※画像をクリックすると拡大します
あいこだった場合は、「もういっかい」ボタンを再度表示している点に注意です。
その「もういっかい」ボタンは、じゃんけんをやり直す時のためのボタンです。
要するに、最初の状態に戻してあげればOKですね。
そのコーディングはこんな感じです。
これで、「もういっかい」ボタンをタップした時の結果が以下のようになります。
ただ、今のままだとアプリ起動時の状態がちょっと変です。
これはIB側で設定してもいいんですが、せっかくなのでXcodeでやってみます。
アプリ起動時に実行されるviewDidLoadメソッドに、以下のコードを記述します。
これで、アプリ起動直後の状態が以下のようになります。
あとは、「ちょき」と「ぱー」をタップした時の動きを入れれば、
とりあえずそれっぽく動くようにはなります。
いかがでしたでしょうか?
コードの内容的には全く難しいものではありませんが、
一応じゃんけんの要件を満たした内容になっています。
もちろん、もっとスマートな書き方はあるんでしょうが、
簡単かつ説明しやすい内容、ということでまとめてみました。
※記述ミス等についてのご指摘も、ぜひよろしくお願いしますm(_ _)m
ただ、今のままではあまりにも簡素すぎて面白味に欠けます。
見た目はもうちょっと手を入れた方がいいですね。
次回はその辺りのことについて、です。