Studio対応版』の解説内容をもとに、本書で説明しきれなかったサンプルアプリを解説しています。このパズルは、ドロイドくんの頭とお尻が画かれたパネルを入れ替えて、全部を揃えるゲームです。頭とお尻には右向き、左向きがあって、色も4色あるので、なかなかうまく合いません。クリックした2枚のパネルの場所が入れ替わります。クリックするパネルは隣り合ったものでなくてもかまいません。操作は単純ですが、意外に難しいパズルです。以下のような設定で新しいアプリを作成してください。sample.example.comこのアプリでは、以下のようにウィジェットを配置します。表には配置するImageViewウィジェットとして、panel1しか掲載していませんが、同様にpanel9まで配置します。パネルの位置は実行例の画面を参考にしてください。クリックされたときに実行されるメソッドパネルはすべて用意できているので、プログラムのほうでやることは、クリックされたら絵を入れ替える、絵がすべて揃ったかを調べるという2つの処理だけです。いっても、かなり複雑になりますが。コードがかなり長くなるので、ポイントのみ示しておきました。「......」の後の太字のキャプションをざっと眺め、どのようなことをやっているのかが大まかにつかんでください。}(パネルの)クリックはアクティビティでまとめて処理この配列が重要。パネルと画像を対応させるための配列パネルを交換するためのメソッド現在の画像の番号をセーブ直前にクリックされた画像の番号を現在のパネルに入れる現在の画像の番号を直前にクリックされたパネルに入れるパネルの0~8に、画像が同じ順序で(0~8まで)入っているかどうかを調べる。パネルと画像の順序が同じなら完成。panel1~9のリソースIDを、それぞれのパネルの番号(0~8)に変換して渡しているパネルと画像をランダムに対応させるパネルとイメージの対応表を作るパネルは左上から0、1、2......8という番号を付けておきます。正解のイメージも0、1、2......8という番号になっています。ゲームを始めるか[シャッフル]ボタンをクリックすると、88行目~103行目のコードが実行されます。これは、パネルと画像の対応をランダムにして、次の図の左側のようにするコードです。私たちが、パネルをクリックすると、配列の中のデータが入れ替えられます。そのためのコードが40行目~65行目の(3)のswapPanelメソッドです。このメソッドの中では、44行目と45行目で画面に表示されている画像も入れ替えます。52行目の7以降で、パズルが完成したかどうかを調べます。データや画像の入れ替え、パズルが完成したかどうかのチェックは、2回目のクリックのときに実行されます。パネルを2枚クリックして入れ替えるわけですから。最初のクリックか、2回目のクリックかを記憶しておくために、boolean型のisClickedという変数を使っていることにも注目です。最終的には、図の右側のようになればすべてが揃った状態です。idxの値とpanelToDrawable[idx]の値がすべて等しくなれば、パズルの完成です。要するに、クリックして選択された要素を入れ替え、右のような状態にするのがこのゲーム。画面には、数字ではなく、ドロイドくんが表示されているというわけ。リソースIDをもとに画像の番号を得るトリック68行目の(8)では、クリックされたImageViewのIDを画像の番号に変換するために、arg0.getId()-R.id.panel1というコードを書いています。これは、次の図のようにpanelのIDが(たまたまですが)順に並んでいるのを利用したトリックです。クリックされたパネルがpanel1なら、arg0.getId()は0x7f09003fとなります。R.id.panel1の値も0x7f09003fなので、引き算をすれば0になります。クリックされたパネルがpanel2なら、arg0.getId()は0x7f090040となります。R.id.panel1の値は0x7f09003fなので、引き算をすれば1になります。このようにして、クリックされたパネルのIDを配列のインデックスに変換しているわけです。※リソースIDには連続した値が付けられるとは限らないので、このテクニックを使うときは注意が必要です。あとは、少しずつコードを読み解いていってみてください。今回解説したのは書籍のサポートページにある「さらに高度なアプリ」の中の「DroidPuzzle」というサンプルです。本書で扱っている他のアプリもぜひ遊んでみてください。http://book.impress.co.jp/books/1114101120_4このサンプルでは、3×3のパネルを使いましたが、4×4にするともっと難しくなります。Playストアでも販売できるレベルの)アプリケーションにできそうですね。前作『イラストでよくわかるAndroidアプリのつくり方』に改訂版が登場。Androidのプログラムを作りながら、自然にJavaというプログラム言語の知識が身につくようになっています。(心理学専攻)卒業後、NECでユーザー教育や社内SE教育を担当したのち、ライターとして独立。読者の側に立った分かりやすい表現を心がけている。お茶の水女子大学講師。最近の趣味は書道、絵画、ウクレレ、ジャグリング、献血。ITでは、より付加価値の高いコンテンツを会員サービスとして提供しています。ITのWebサイトにログインすることでさまざまな限定特典を入手できるようになります。「コンテナ」の概要を知る2020/2/21設計/手法/テスト技術解説データ中心設計(DOA)に基づいたデータモデリング2020/2/20クラウド技術解説Rancherコードリーディング入門(3/3)2020/2/19開発ツールイベントGitHub、エンタープライズ向けのイベントを国内で開催。VeloCloudが選ばれる理由SD-WANとはなにか。Linuxエンジニア育成への思いF5とNGINXの組み合わせで、サービス公開をよりセキュアに。ITがお届けするポッドキャストです。