Help us understand the problem. What is going on with this article?

リバーシで遊んで覚える Java 8.

More than 3 years have passed since last update.

Today's issue

みなさん、新しいプログラミング言語を覚えるときってどうしてますか?
私はコンソールバージョンの オセロゲーム リバーシを実装することが多いです。

  • 一通りの文法要素を試すことができる
  • ルールが決まっているため仕様決めに悩まず、実装に専念できる
  • そこそこのボリューム
  • 凝ろうと思えば色々凝れる

今回も java8 勉強用にリバーシを実装し、せっかくなので 公開する ことにしました。java初心者のみなさん、よろしければ勉強の土台にでも、反面教師的なネタとしてでも、いかがですか。
[2016/1/1追記:細かなバグ修正等を行い、v1.0.0として正式版をリリースしました。]
[2016/2/3追記:入門者向けの紹介サイト を作りはじめました。]

ゲームとしても遊べます。モンテカルロ・シミュレーションを使ったAIプレーヤーは結構強いですよ! AIプレーヤーを自作して対戦させることも簡単です。
(お約束:ただし動かす際は自己責任でお願いします。末尾の免責事項をご参照ください。)

<Contents>
1. とりあえず動かして遊んでみる
2. AIプレーヤーを自作してみる
3. ソースコードを読んでみる...

reversi1.png

■■■ 1. とりあえず動かして遊んでみる ■■■

  1. こちら から xyz.hotchpotch.reversi-x.x.x-yyyymmdd.jar をダウンロードし、ローカルPCの任意の場所に配置します。
  2. java -jar コマンドでダウンロードした jar ファイルを起動します。

    > java -jar "C:\Users\hoge\Desktop\xyz.hotchpotch.reversi-2.0.0-20160108.jar"
    
  3. あとは表示されるメニューに従って操作するだけです。「ConsolePlayer」を選ぶと、コンピュータと対戦することができます。

■■■ 2. AIプレーヤーを自作してみる ■■■

準備と作成

  1. ふつうの java プロジェクトを作成します。(java8準拠にすることをお忘れなく。)
  2. こちら から xyz.hotchpotch.reversi-x.x.x-yyyymmdd.jar をダウンロードし、ビルド・パスに設定します。
  3. xyz.hotchpotch.reversi.framework.Player インタフェースを実装し、AIプレーヤークラスを自作します。

※より詳しい手順は こちらのサイト を参照してください。

reversi2b.png

動かす

  1. 上記の eclipse の画面から、[実行]→[実行] を選びます。(なんか色々聞かれたら「Menu」を選択します。)
  2. eclipse のコンソールビューに実行状況が表示されます。表示内容に従い、対話的に入力を行います。
  3. プレーヤー選択時に自作クラスを指定することで、クラスがロードされ、動作します。

reversi3b.png

リーグ戦を選ぶと、複数のプレーヤーによる総当たり戦が自動で行われます。
対戦成績が一覧で表示され、お互いの強さが一目瞭然になります。

reversi4c.png

■■■ 3. ソースコードを読んでみる... ■■■

まだ多くのバグが埋まっているはずです... 見つけましたら nmby までご一報いただけますと幸いです m(. .)m
ソースの各要素については、追い追い別記事化したいと思います。

実装においては、次の点に留意しました。

  • 可能な限り不変クラスを使う。(そして不変なメンバはゲッタ無しで直接公開しちゃう。)
  • Serializable を実装する際は、クラスの恒等式が決して破られないように注意する。
  • クラスがスレッドセーフなのか否かをドキュメントで明確化する。スレッドセーフと謳うものは、実際にそうであるように実装する。

要は『Effective Java』で謳われているような点ですね。ただし、理解しきれていない点はあるかもしれません。
なお実装は、『ザ・ジャバ』って感じのコテコテテイストに仕上げてあります☆

今回実装してみて分かったコト

  • java.util.stream まわりは非常に便利だけれども、そもそもマルチスレッド・プログラミングについて理解していなかった... orz
  • java.util.concurrent まわりもなーんも理解してなかった... orz
  • シリアライゼーションは相変わらずよう分からん... orz

java8 どころの話ぢゃないじゃん... orz

~~~

免責事項

ソースコードおよびバイナリは MIT ライセンスに基づき公開しています。
利用の結果生じたいかなる損害その他の影響について、一切責任を負いません。
また、公開内容の正しさを保証しません。
詳細は LICENSEファイル をご参照ください。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした