KotlinでAndroidアプリ#22

クラス実装

クラスを実装し、次のように✕、〇を交互に打てるようにする。

Square

各マス目に対応するクラスSquareを作成する。

プロパティは3つだ。マス目の状態(0:空白、1:×、2:〇)を表すstate、ImageButton情報のimageutton、空白、×、〇画像を配列化したimgだ。画像の配列化はstateをインデックスにすることにより画像を決定できるからだ。

コンストラクタで関数clickを呼び出している。clickはstate情報により画像を設定する関数だ。stateには0が設定されているので、ここでマス目を空白にしているのだ。

Squares

クラスSquareを管理し各種処理を行うSquaresを作成する。

MainActivityからImgeButtonの情報を3×3の配列で受け取る予定だ。

クラスSquareを3×3のマス目分作成する必要がある。それが8行目から12行目だ。Squareを作成しながら3×3の配列に格納している。同時にSquareへマス目状態0(空白)、ImageButton情報を受け渡している。

マス目に手が打たれているか、このチェック関数が13行-15行目のisKUHAKUだ。

チェックするマス目の座標を引数とし、Squareクラスのマス目状態を判断している。0(空白)なら真(true)、それ以外は偽(false)を返している。

このif文よーく見ると違和感があるだろう。これはKotlinの三項演算子みたいな書き方だ。真、偽により値を返す動きをする。

マス目がクリックされた際の処理が16行-19行目の関数clickだ。

クリックされた座標(x,y)と手番(next)を引数で受け取っている。手番はtrueの時に×手番、falseの時に〇手番としている。

17行目で手番によりマス目状態を確定している。つまり手番がtrue(✕手番)の時には1、false(〇手番)の時に2とし変数neに格納している。

18行目でSquareクラスのcheck関数を呼び出し、ボタン状態、画像の変更を行っている。これで画面に〇や✕が表示される。

MainActivity

MainActivityを次の通り変更する。

プロパティを2つ用意する。1つ目はSquaresクラス用の変数だ。この変数は定義時に初期値が決定されず、nullを許容したくないため「lateinit」を付けている。2つ目が手番情報のnextだ。

関数onClickに処理を追加している。36行目はメッセージエリアを空白にしている。前のメッセージが残らないようにだ。

37行目からのif文で手が打てるかクラスSquaresのisKUHAKU関数を使い確認を行っている。

手が入力できないなら40行目からのelse文でメッセージを設定している。

手が入力できる場合は38行目でクラスSquaresのclick関数を使いマス目情報、画像の変更を行っている。最後に39行目で手番を否定(!)し手番へ格納している。これは例をあげるとtrue(✕)なら否定しfalse(〇)へ、それをnextへ設定する。つまり手番を交代していることになる。

その他のコードは「KotlinでAndroidアプリ#19」、「KotlinでAndroidアプリ#20」を確認してください。

雰囲気は出てきたがまだまだ実装しなければいけない。次回は終了判定など作成してみたい。

前へ<ーーー>つづく

タイトルとURLをコピーしました