クラス使ってみたい

スポンサーリンク
スポンサーリンク

やってみよう。書いたのもったいないけど。

スポンサーリンク

紆余曲折

クラス作り

リバーシ作った人のやつ見ると

  • プレーヤー(人間対人間、人間対機械)
  • マス
  • ルール

あたりが必要みたい。

自分の場合、機械のプレーヤーなんてそもそも作れんし、石は○●だし、マスはTextViewだし、作るの盤ぐらいでいっかなーって。ルールは盤に含めるとかできんじゃないかな、どうなのかな。

Board.javaを作った

public class Board {
    final int BLACK = 1;
    final int WHITE = -1;
    int PlayerTurn = 1;
    private Context con;

    public Board(Context context){
        this.con = context;
    }

    public void putStone(TextView tv){
        String stone = tv.getText().toString();

        if(!stone.equals("")){
            Toast.makeText(this.con,"そこに石は置けません", Toast.LENGTH_SHORT).show();
        }else{
            switch (PlayerTurn){
                case(BLACK):
                    tv.setText("●");
                    PlayerTurn = WHITE;
                    break;
                case(WHITE):
                    tv.setText("○");
                    PlayerTurn = BLACK;
                    break;
            }
        }
    }
}

いちおこれで動いた。あっさりできたわけではなくかなり手間取った。

Toast表示するのに引数Contextが必要で、前と同じようにthisってやるとBoardの方と認識される。メインの方でgetApplicationContext()しておき、インスタンス化する時に引数で渡してあげると。ほいでBoardのコンストラクタで受け取ってあげる。なるほどなぁ。調べなきゃ分かんないよ。

Reversi.javaを変更

メインの方でNewする位置もよく分かってなかった。最初BoardのコンストラクタにTextViewの引数を設定していたし、メインのocClick内でNewしていた。でもそれだとClickされるたびにNewされて、NewされるたびにPlayerTurnが初期化され、黒石連打になっていた。だもんでじゃあonCreate内でNewすりゃいいのかとやってみたら、今度はonClick内でBoardが使えない。オブジェクト変数の宣言とNewをいっぺんにやってたのが原因だった。ので、変数の宣言を頭でやって、onCreate内でNewすると、onClick内でも使えるようになり、解決した。試行錯誤の連続です。

ということで、メインのReversi.javaは

最初

public class Reversi extends AppCompatActivity {
    Board board;

onCreate内

Context context = getApplicationContext();
board = new Board(context);

onClick内

TextView tv = findViewById(id);
board.putStone(tv);

と書けた。

なんだろな、やっぱりスコープがちゃんと分かってないからこんな手間取るのかな。それだけじゃないんだろうけども。うーむ。

PlayerTurnってここでいいんだろうか、Playerって付いてるし、Playerクラスを作ったほうがいいのかなぁ。でも手番管理って盤面の仕事な気もするし。

あとクラスを作ったからといって、そこまで楽になったのかというとそうでもないような気がする。メインは見晴らしが良くなったけど、Boardの方はこっからちょっとづつ足してくわけだもんね、やることは一緒なんじゃないだろうか。このままいくとputStoneが肥大化していくような気がしてならない。まぁせっかく作ったんだしこれを使っていこう、そうしよう。

参考

初記事 Javaでオブジェクト指向とリバーシ作成 - メモ的な何か
お初の記事となります。 主に技術系(プログラミング)メインで自分のメモ代わりに書いてきたいと思います。 早速本題なのですが、今回Javaでリバーシ(オセロっすね)を作成してみました。 私、C言語が長いので(できるとは言ってない)Javaわか...
オブジェクト指向再入門/オセロを例に考える
オブジェクト指向っぽくオセロを作る - 犬も歩けば棒も歩く
オブジェクト指向っぽくオセロを作る2 オブジェクト指向っぽくオセロを作る3 オブジェクト指向っぽくオセロを作る4 オブジェクト指向っぽくオセロを作る5 オブジェクト指向っぽくオセロを作る6 オブジェクト指向っぽくオセロを作る7 オブジェクト...
オブジェクト指向プログラミングとJava言語
[Android] クラス メソッド の設定と呼び出し
Android はJava言語で開発します(Kotlinでもできます)。Javaではクラスを定義して呼び出せます。Activity:A, Activity:B に共通するメソッドを別クラスで設定すると便利です。これはActivity 画面遷

コメント

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