リバーシの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文の使い方

コメント

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