列挙:SimplestAIPlayer

SimplestAIPlayer は最も単純なAIプレーヤーです。

リバーシ盤を左上から順に調べて、打てる場所が見つかればそこに打ちます。
打てる場所が1つも見つからなければ、パスを宣言します。

とても単純ですね。
このアルゴリズムを理解できない人はいないと思います。

しかし、侮るなかれ! すべての可能性を順番にピックアップして調べ上げるというのは、色々な処理の基本となる考え方です。アルゴリズムの基本中の基本ですので、十分、手に馴染ませておきましょう!

さて、SimplestAIPlayer はソースコードもとてもシンプルです。(思考ロジックを担うメソッドだけを抜粋掲載しています。プログラムの全体は こちら をご参照ください。)

@Override
public Point decide(Board board, Color color, long remainingMillis) {
    for (Point p : Point.values()) {
        if (Rule.canPutAt(board, color, p)) {
            return p;
        }
    }
    return null;
}

このソースコードの意味が分からない方は、Javaの入門書籍を購入してしっかりと学習することをお勧めします。「1-6. 書籍&サイトの紹介」でいくつかの書籍を紹介していますので、参考にしてみてください。

なお、上のソースコードは、Java8 で導入された Stream やラムダ式、Optional クラスを利用して次のように書くこともできます。2つのソースコードは同じ結果を返します。

@Override
public Point decide(Board board, Color color, long remainingMillis) {
    return Point.stream()
            .filter(p -> Rule.canPutAt(board, color, p))
            .findFirst()
            .orElse(null);
}

2つめのソースコードはやや難しいですので、Javaプログラミングに慣れてきたら解読にチャレンジするとよいでしょう。

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