スポンサーサイト

上記の広告は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ファイル
スポンサーサイト

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

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

第四回の記事~みんなでアプリを作ろうプロジェクト第四回~AndroidManifestの説明でAndroidManifestの簡単な説明をしました。

今回はプログラム部分について見て行きたいと思います。
part1ではアプリを立ち上げた時に最初に表示されるMainActivityについて説明します。

javaやandroidの基本的な部分の説明になりますが、一つ一つを詳しく説明すると莫大な量になるので簡単に説明して、もっと深く知りたい、わからないといった部分はそれぞれのワードでググってもらうとたくさん説明しているサイトがあると思います。

extends Activity:ActivityはAndroidアプリの画面に相当します。画面を表示するクラスを作りたい場合はActivityクラス、もしくはActivityクラスを継承したクラスを継承してください。

implements OnClickListener:ボタンなどが押されたときに何か処理をする場合に必要な記述。これを記述しOnClick内でその処理を記述する。

onCreate:画面が起動するときに呼ばれる関数。そのほか様々なタイミングで呼ばれる関数があり「Activity ライフサイクル」などでググってもらうと分かりやすい説明や図が出るのでぜひざっとでも見るといいと思います。

setContentView:引数でレイアウトファイルを指定して、そのActivityで使うレイアウトファイルをセットします。MainActivityでは第三回part1で説明したmain.xmlを使うのでそれを指定しています。

(Button)findViewById(R.id.GameStartButton):プログラム側からレイアウトファイルのオブジェクト(今回の例ではゲームスタートと文字の入ったButton)を参照するための記述。プログラム側で操作させる予定のあるオブジェクト(文字やサイズを変更させたり、クリックしたときに処理をしたりするもの)はレイアウトファイルでIDを指定していないとここでリンクできない。今回はButtonだったので頭の部分が(Button)としているが、当然LinearLayoutやTextViewの場合は(LinearLayout)、(TextView)となります。

オブジェクト.setOnClickListener(this):オブジェクトが画面上でクリックされたときにonClick(引数はオブジェクトになる)が呼ばれるようになる

onClick:setOnClickListener(this)をされたオブジェクトがクリックされたときに呼ばれる関数。

if(v == gameStartButton){~}:onClickの引数はクリックされたオブジェクトになるのでsetOnClickListenerの分だけ場合分けして、それぞれのオブジェクトがクリックされた時の処理を書く。

Intent intent = new Intent(MainActivity.this,GameActivity.class);
startActivity(intent);
:MainActivity(現在のActivityのクラス)からGameActivity(移動先のActivityのクラス)へ移動するときの記述。
新しくActivityを追加した場合は第四回に書いたAndroidManifestにActivityを追加しないといけないが、私の場合、よくこの追加を忘れます・・・みなさまお気を付けを。

MainActivityは短いプログラムですが、Androidアプリ開発の基本中の基本だと思います。
次回はアプリの中核であるGameActivityの説明をします。

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

~みんなでアプリを作ろうプロジェクト第四回~AndroidManifestの説明

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

第三回part2の記事~みんなでアプリを作ろうプロジェクト第三回~レイアウトの説明 part2
で、ゲーム画面であるgame.xmlについて説明しました。

~みんなでアプリを作ろうプロジェクト第三回~レイアウトの説明 part1との二つの回で基本的な部分のレイアウトの説明ができたと思います。

今回はやっとプログラムに入る前の準備部分であるAndroidManifestについて説明します。
プログラムの説明にも入ろうとしましたが、書くと長くなるし別の記事にしたほうが見やすいかなと思い、次の記事にすることにしました。プログラムの記事書く書く詐欺になり申し訳ないです。

AndroidManifestファイルについての説明をします。
今回上書きしてもらった部分で

<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

これがあるActivityからアプリが始まります。

今回のアプリでver0.1の場合、アプリ立ち上げた時に表示される画面とゲーム画面の二つの画面があります。
それぞれ使用するActivityの数だけ

<activity android:name=".GameActivity"
android:label="@string/app_name">
</activity>

のようにAndroidManifestに追加しないといけません。
ここに記述し忘れるとアプリを実行して記述忘れのActivityを立ち上げようとするとアプリが強制終了してしまいます。意外と忘れることも多いと思うので特に初心者の方は要注意かも。

ちなみに上のようなコードを書こうとするとhtmlコードと勘違いされコード部分が空白になってしまいました。
ブログに乗せる場合は文章を変換する必要があるのですが、今回はWEBサイト・ブログの為のHTMLソースコード変換というサイトを利用させていただきました。

では次こそプログラムの説明になります・・・はず!

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

~みんなでアプリを作ろうプロジェクト第三回~レイアウトの説明 part2

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

第三回の記事~みんなでアプリを作ろうプロジェクト第三回~レイアウトの説明 part1
で、アプリを立ち上げた時の最初の画面の「ゲームスタート」のボタンが一つだけある画面のレイアウトファイルであるmain.xmlについて説明しました。

今回のpart2では「ゲームスタート」ボタンを押した後のゲーム本編画面のレイアウトファイルであるgame.xmlについて説明します。

まず画面の構成を簡単に説明します
まず縦にLinearLayoutで1/5、2/5、2/5の割合で分割しています。
一番目にTextView、二と三番目に横にボタンを二つ並べています。

LinearLayoutのパラメータについて

android:orientation:中に配置する要素を縦に縦に並べるか横に並べるか
vertical:縦に並べる、horizontal:横に並べる

要素を割合で配置する場合の方法
縦(横)に並べる場合はlayout_height(layout_width)="0dp"にする
layout_weightを指定したい割合の数字に入れる。

今回、縦の1/5、2/5、2/5の三分割は
割合でいうと1:2:2と指定したかったのでlayout_weightを1、2、2にしています。

layout_weightは親要素の余白を子要素で分け合うものです。
なので子要素のlayout_height(layout_width)が0以外であると親要素から子要素の数字を引いた分が余白となりその余白を子要素で分け合うことになるので、今回のように割合で画面分割したい場合は0dpに指定するときれいな割合で分割できます。

textSize:表示される文字サイズを決めるプロパティです。
前の記事にも少し触れましたが文字サイズを決めるときは基本的にはspを使った方がいいと思います。
spはユーザの端末のフォントサイズの設定により変化します。(端末の文字サイズを変更してみるとアプリ内で表示される文字が変更されていることがわかると思います)

ちなみに今回のような格子状の配置をする場合、
Android OS4.0以降の端末(API Level14以降)ではGridLayoutというものが使えるみたいです。
今まで作ったアプリが2.1や2.2以降しか作ったことがないので触れたことはないですが・・・
もし4.0以降向けのアプリの場合は、格子状の配置をする場合はGridLayoutを使った方が楽で、簡単なものになると思います。

分割するためのLinearLayoutにはidは設定していませんがこれはプログラム側で使う予定がないので設定していません。
点数を表示する部分のTextViewや選択肢のButtonにはそれぞれidを割り当てていて、プログラム側から参照できるようにしています。

では次回プログラムの説明をしようと思います。

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

~みんなでアプリを作ろうプロジェクト第三回~レイアウトの説明 part1

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

第二回の記事~みんなでアプリを作ろうプロジェクト第二回~配布ファイルの簡単な説明
で、配布ファイルの中の簡単な説明をしました。

今回からやっと中身について説明できます。やったね!
今回は画面のレイアウトを指定するファイルの説明を行います。

「ゲシュタルトぬわあ」を触ってみてもらうと分かりますが画面は非常にシンプルです。
配布ファイルのmain.xmlとgame.xmlの部分がレイアウトを決めているファイルです。

シンプルなmain.xmlから説明します。
MainActivityで使われているレイアウトです。
画面全体に表示しているLinearLayoutの中にボタンが一つあるだけの画面です。
LinearLayoutで説明する部分は二つ。
android:background="#000000":#の後ろに6桁の16進数で色を指定する方法をしています。
2桁ずつ見てそれぞれRGBと対応しています。#123456の時、R:12、G:34、B:56とそれぞれの値になります。
#000000:黒、#FFFFFF:白、#FF0000:赤などになります。
こういう色の考え方を詳しく知りたい方は「加色法」なり「光の三原色」なりでググっていただけると深い知識がつくと思います。

android:gravity="center":LinearLayoutの中の物を中央寄せ表示にします。
これを入れることで「ゲームスタート」ボタンを真ん中に表示しています。
これを外すとボタンが画面一番上に表示されます。

Buttonのプロパティについてのざっとした説明をします

android:id:プログラム側で使うためのID。プログラムの説明をするときにたぶん触れると思います

android:layout_width、android:layout_height:大きさの指定方法
wrap_content:サイズを自動調整して表示する(たとえばボタンのtextSizeを大きい数字にしてもらうとボタンの高さが変わるのがわかると思います。textSizeについては後で説明します)
match_parentとfill_parent:画面いっぱいに表示する。(この二つは同じ挙動です。前はfill_parentと書いていたところをAPIレベル8(Android OS 2.2)以降に名称を変更してmatch_parentにしたらしいです。API8以降でもfill_parentを使うこともできます。ゲシュタルトぬわあはAndroid OS2.2以降向けに作っていますのでmatch_parentを使っています)


android:layout_marginLeft、android:layout_marginRight:マージン(余白)の設定
ちなみに数字を指定する単位にはpx、dx、sp、ptがあります。
詳しくは「px sp dp pt 違い」などでググってもらえば詳しく出ると思いますが、
基本的にはマージンや高さなどdp、文字サイズはspを使っています。

android:text:ボタンの文字を指定。
"@string/main_game_start_button":string.xmlに追加してもらった部分を使っている部分です。
string.xmlに追加した「ゲームスタート」という文字を表示するようにしています。


ボタン一つの画面の説明のレイアウトの説明だけでこんなに長くなるとは・・・
でも説明するために言葉の選び方とか吟味するために調べなおしたりして結構勉強になりますね。

では次回はレイアウトpart2として残りのgame.xmlについて説明します。

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

kaiemon2011

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

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

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

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

この人とブロともになる

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