List化
マス目に対応してクラスSquareを3×3の配列にしていた。これも力技で7×7記述すればよい。
1 2 3 4 5 6 7 8 |
class Squares(imagebutton: Array<Array<ImageButton>>) { var square = arrayOf( arrayOf(Square(0,imagebutton[0][0]), Square(0,imagebutton[0][1]), Square(0,imagebutton[0][2])), arrayOf(Square(0,imagebutton[1][0]), Square(0,imagebutton[1][1]), Square(0,imagebutton[1][2])), arrayOf(Square(0,imagebutton[2][0]), Square(0,imagebutton[2][1]), Square(0,imagebutton[2][2])) ) ・ ・ |
しかし芸がないのでList命令で実現する。クラスSquaresを次の通り変更する。
1 2 3 4 5 6 7 8 9 10 11 12 |
class Squares(imagebutton: Array<Array<ImageButton>>) { val square: MutableList<MutableList<Square>> = mutableListOf() init{ imagebutton.forEachIndexed { idx1, element -> var list: MutableList<Square> = mutableListOf() element.forEachIndexed{idx2,element2-> list.add(Square(0,imagebutton[idx1][idx2])) } square.add(list) } } |
※List命令は「KotlinでAndroidアプリ#List」を参考にしてください。
ImgeButtonの配列が引数で渡ってくる。この配列に合わせて、Squareの配列を作成している。
ロジック変更
マス目数、三目、四目・・並べとユーザ指定に応じてゲームロジックも変更する必要がある。この対応は簡単にできると考えている。なぜなら「KotlinでAndroidアプリ#26」で定数を一括管理したからだ。
三目並びの3も次のように「BAN_SU」に定義した。
1 2 3 4 5 |
object Const { const val BAN_SU = 3 //盤数 ・ ・ } |
これを削除し、エラーになった箇所へユーザ指定のマス目数(numberpicker2.value)、〇✕並べ(numberpicker.value)を設定すればよい。
Squaresクラスの勝敗判定で八方をチェックするeightCheck関数でエラーが発生した。マス目をはみ出ていないかのチェックだ。ここをマス目数(numberpicker2.value)にすればいい。
あれれ?定数化していない箇所を発見!マークが何個並んだかチェックしている箇所だ。3固定になっているところを〇✕並べ(numberpicker.value)を設定する。
引数でマス目数(ban)、〇✕並べ(narabe)を受け取り、プログラムを変更する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
fun eightCheck(idx1:Int,idx2:Int,ban:Int,narabe:Int):Int{ //戻り値 0:勝負つかず、1:✕勝利、2:〇勝利 ・ ・ if(x >= ban || x < 0){ //横軸はみ出ている? break } if(y >= ban || y < 0){ //縦軸はみ出ている? break } ・ ・ if(count >= narabe){ //マークが並んだか? return square[idx1][idx2].state } ・ ・ } |
動作確認
実行し動作を確認する。
予定通りの動きとなった。機能追加第一弾完了だ。ここまでのソースコードを掲載する。