定数、文字を別ファイルへ
三目並べは完成したがプログラムとしてはまだ不十分だ。それは定数や表示文字をプログラム内で記述しているからだ。この程度の規模なら問題ないが規模が大きくなるにつれ保守性が損なわれる。そこで定数や文字を別ファイルで一括管理する。
定数を別ファイルへ
定数を別ファイルにする。画面左側からパッケージを選択しマウス右クリック->New->Kotlin File/Classを選択。
パネルが開くので「Object」を選択しファイル名「Const」を入力しEnter(ファイル名は何でもよいです)。するとファイルConstが作成される。
このファイルへ定数を定義する。
1 2 3 4 5 6 7 8 9 10 |
package com.example.myapplication object Const { const val BAN_SU = 3 //盤数 const val KUHAKU = 0 //マス目空白、勝負未決着 const val BATU = 1 //✕ const val MARU = 2 //〇 const val DRAW = 3 //引き分け } |
通常「class」と記述する箇所に「object」と記述している。このobjectはインスタンス化することなく利用できるのだ。逆にインスタンス化できないため複数の生成は不可能となる。
定数を設定するプログラムは複数生成する必要がない(複数生成しても無駄)ため、このobjectでの定義が適している。
変数定義で「const」と記述するとゲッター/セッターメソッドを自動生成しない。このため効率的といえる。変数のアクセスは暗黙的にpublicで定義されるので、ファイル名の後にドット(.)を付け変数名を記述する。
1 2 3 |
if(win != Const.KUHAKU){ //試合終了なら終了処理呼び出し final(win) } |
文字を別ファイルへ
通常、文字を一括管理するファイルは自動生成されている、res/values/strings.xmlへ記述する。
次のようにキーワード、文字列で定義していく。また配列も定義できる。
strings.xmlを開くと既にキーワード「app_name」が定義されている。これはアプリ名の定義なので、「対戦型三目並べ」へ変更する。そしてプログラム内の文字列を全て定義していく。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<resources> <string name="app_name">対戦型三目並べ</string> <string name="MSG_ALREADY">既に打たれています。 </string> <string name="MSG_PROMPT">手を打ってください。 </string> <string name="LABEL_START">START</string> <string name="LABEL_RESET">RESET</string> <string name="LABEL_OK">OK</string> <string name="LABEL_NO">NO</string> <string name="LABEL_NARABI">並び</string> <string name="LABEL_BANSU">盤数</string> <string name="MSG_RESET_CONFIRT">"RESETすると全てクリアされます。よろしいでしょうか?"</string> <string-array name="MSG_FINAL"> <item>""</item> <item>✕の勝利です。</item> <item>〇の勝利です。</item> <item>手が無くなりました。</item> </string-array> </resources> |
プログラムからのアクセスはgetString、配列の場合はgetStringArray関数を利用する。
1 2 3 |
textView3.text=getString(R.string.MSG_PROMPT) textView3.text = resources.getStringArray(R.array.MSG_FINAL)[win] |
部品のテキスト属性値としても利用できる。
ちなみに用意されていたキーワード「app_name」を変更したので、アプリのタイトルが変わった。
これでゲームとして完成した。ソースファイル一式を掲載しておく。
Kotlinの学習、第一弾としては終了だ。しかしゲームとしては面白くも何ともない。そこで次回から機能追加していく。