リバーシのCOM戦を作る

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

COM戦を作る前に検討してみたけど、今から手番の選択をしたり、対人戦・対COM戦を分けたりがめんどくさいので、プレイヤーの手番は常に黒番かつCOM戦のみという形で実現したい。

スポンサーリンク

COMくん

思考方法

マスを調べていって、置ける場所が見つかったら石を置く。簡単だけどこれで動くと思った。このあたり色んなアルゴリズムがあるらしく、奥深いみたい。あと自分にできそうなものと言ったら、置ける場所のひっくり返せる石の量を調べていって、一番大きい所に置くとかかなぁ。

実装

void comPutStone(){

    for (TextView[] cc : CellArray) {
        for (TextView c : cc) {
            if(c.getText().toString().equals("*")){
                putStone(c);
                return;
            }
        }
    }
}

そんでonClickの所を

switch(id) {

        if(board.PlayerTurn == 1) {
            TextView tv = findViewById(id);
            board.putStone(tv);
            board.setTurn();
            board.scanBoard();
            board.StoneCountOnBoard();
            board.checkFinish();
            break;
        }
}

while (board.PlayerTurn == -1){
    board.comPutStone(); 
    board.setTurn(); 
    board.scanBoard(); 
    board.StoneCountOnBoard(); 
    board.checkFinish();
}

こう変えて、できあがり。

気を抜いてやってると、普通に負けたりもする。あれだけなのに。

一段落

ちょっと飽きてきてるからか、なーんか達成感がない。まぁ、それだけじゃなくて、最初は新しくComクラス作ろうとしたり、Boardを継承してみたり、でもなんか上手くいかなくてこれに落ち着いたっていうのがね、なんかね。継承するとデフォルトコンストラクタがないよって言われるんだよね、なんでなんだろ。どうすればもっとスパッと流れよく作れるのかなぁ…。

とりあえずリバーシはここまでにしよう、一ヶ月やりっぱなしだもんな。なんか違うのやりたい。ちょっと思いついたやつがあるので、それを作っていこー!

参考

do..while文を使った繰り返し処理
Java で繰り返し処理を行う時に利用できる do..while 文の使い方について解説します。 do..while 文は while 文とほぼ同じですが、条件式の評価が繰り返しの最後で行われるため、少なくとも一回は繰り返し処理が行われるの...

コメント

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