スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

~みんなでアプリを作ろうプロジェクト第五回~プログラムの説明 part2

「みんなでアプリを作ろうプロジェクト」第五回part2です。

第五回part1の記事~みんなでアプリを作ろうプロジェクト第五回~プログラムの説明 part1でアプリを立ち上げた時の最初の画面んおプログラム部分のMainActivityの簡単な説明をしました。
前回の記事の説明の部分はAndroidアプリの基礎的な部分だと思うのでこれを理解しておくことは重要だと思います。

今回は実際のゲーム部分であるGameActivityを説明します。
MainActivityはボタンを押して次の画面に行くだけだったのでほぼAndroid特有の書き方でしたが今回は、ゲームの処理部分なのでAndroidというよりjavaの説明が多くなります。

プログラムの簡単な流れ
MainActivityから画面遷移
→OnCreateで初期設定+初めの問題をセット
→ボタンのいずれかをクリック
→onClickが呼ばれ、正解かどうかチェック+次の問題セット
→ボタンのいずれを・・・

という流れです。ではそれぞれの具体的に関数の説明をします
1、onCreate
GameActivity画面が起動するときに呼ばれます。
レイアウトの設定、レイアウトからButton、TextViewを参照できるようにし、Buttonはクリックに反応するようにする。
questionSelectを呼び最初の問題をセットする

2、questionSelect
答えの番号を0~3でランダムに決める(実際のボタンとの対応は0~3の順で、左上、右上、左下、右下に対応しています)
selectCharでそれぞれのボタンに入れる文字を決定する
setCharButtonでそれぞれのボタンに文字を入れる
setRndTextSizeでそれぞれの文字の大きさを変える

ランダムの数字の作り方
Random rnd = new Random();
answerNumber = rnd.nextInt(4);
とすると0、1、2、3の4つの数字からランダムで数字が入ります。
0から始まることと、4という数字を入れているので慣れてない場合は勘違いするかもしれないけど4は選ばれることがないという部分は注意する部分。

3、selectChar(int patternNum)
ボタンに入る文字を決める関数。引数には現在の問題の(0:ぬ、1:わ、2:あ)が入る
selectCharArray:それぞれの平仮名と、それに似ていると独断と偏見で決めた平仮名を2次元配列で入れている。
それぞれの配列の0に正解文字を、1~4に不正解文字を入れています。
1~4の数字の入ったリストをシャッフルしてバラバラにします。
そのリストに前から答えの番号のところに0(答えの平仮名の番号)を入れる
selectCharArrayのpatternNumの配列からリストの番号の平仮名を一つずつ取得して、ボタンに入れる文字の配列を作る

ArrayList rndInt = new ArrayList(){{
add(1); add(2); add(3); add(4);
}};
と1~4(間違い文字の数字)を配列ではなくArrayListを使っているのはArrayListなどの場合、
Collections.shuffle(rndInt);とすることでArrayListの中身をシャッフルにしてバラバラにできるからです。
配列だと自分で2つの要素を適当に何回か入れ替えるとかでも実現できるけど、何となくスマートじゃない気がしてこんな方法をとってみました。
そのあとの正解番号である0もArrayListだとaddを使って簡単に入れることができるという部分もあります。
軽く2次元配列について説明しますと、
配列:同じ型のデータを複数持つことができる、例)配列を使わないとデータ一個一個に変数を作らないといけない→char c1='a',c2='b',c3='c';
配列を使う→char[] c ={'a','b','c'};
c[0]とするとaが入っている
2次元配列:配列の中に配列がある
char[][] a = { {'あ', 'い'},{'か', 'き'}, {'さ', 'し'} };とすると
a[0][0]とすると「あ」が、a[0][1]だと「い」、a[1][0]だと「か」が入っている

4、setCharButton
それぞれのボタンに文字を入れる関数。
Buttonなどに文字を入れるときはsetTextを使う。
char→Stringにキャスト変換(型を変える)ときはString.valueOf(char)を使う

5、setRndTextSize
それぞれのボタンの文字のサイズを変更する関数。
文字のサイズを変更するときはsetTextSizeを使う。rnd.nextInt(40)+10で10~49の数字をランダムで使っていて最低でも10未満の数字にならないようにしている。

6、onClick(View v)
クリックされたときに呼ばれる関数。引数はクリックされたオブジェクト。
0:ぬ、1:わ、2:あ、に対応する変数loopNumを更新
正解のボタンかを判断し次の問題をセットする関数checkAndNextを呼ぶ。(押されたボタンによって引数を変える)

loopNum++:loopNumを1足す。次の判定文で「2:あ」の次に3になるので「0:ぬ」に戻している
引数であるview vはクリックされたオブジェクトが入っているのでif(v == button1)と場合分けしてあげることで、どのオブジェクトがクリックされてonClickが呼ばれたかを判定して、処理を分けている。

7、checkAndNext(int buttonNum)
押されたボタンが正解かの判定を行い、次の問題をセットし、得点を更新する関数。引数はクリックされたボタンの番号

引数の数字と答えの数字が同じ場合は得点+1、違う場合は-1をする。
questionSelectで次の問題をセットする
得点の文字を更新する。

string.xmlから文字を使う場合でプログラムから呼び出すときの方法
string.xmlにという部分を入れている場合
getResources().getString(R.string.game_activity_point_footer)のように使うと「点」という文字が取得できます。


長い・・・大体は説明したつもりです。長すぎて読む人はいないかな・・・もし万が一ここまで読んでくださった方がいれば感謝申し上げます。ありがとうございます。
次にちょっとまとめの記事を入れてゲシュタルトぬわあver0.1の説明を終わりにします。
ではでは。

↓「ゲシュタルトぬわあ」を自分の環境で動くようにしよう。zip解凍してReadmeファイル読んでもらえば動くはず(開発環境整っている前提です)
プログラムなどもろもろのzipファイル
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

kaiemon2011

Author:kaiemon2011
kaiemon2011といいます。
androidアプリを自作してgoogle playにて公開中。

android端末をお持ちの方はアプリをインストールしていただくと泣いて喜びます。

趣味:アプリ開発といえるようになりたいなぁ…

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
アクセスカウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。