Today's issue
みなさん、新しいプログラミング言語を覚えるときってどうしてますか?
私はコンソールバージョンの オセロゲーム リバーシを実装することが多いです。
- 一通りの文法要素を試すことができる
- ルールが決まっているため仕様決めに悩まず、実装に専念できる
- そこそこのボリューム
- 凝ろうと思えば色々凝れる
今回も java8 勉強用にリバーシを実装し、せっかくなので 公開する ことにしました。java初心者のみなさん、よろしければ勉強の土台にでも、反面教師的なネタとしてでも、いかがですか。
[2016/1/1追記:細かなバグ修正等を行い、v1.0.0として正式版をリリースしました。]
[2016/2/3追記:入門者向けの紹介サイト を作りはじめました。]
ゲームとしても遊べます。モンテカルロ・シミュレーションを使ったAIプレーヤーは結構強いですよ! AIプレーヤーを自作して対戦させることも簡単です。
(お約束:ただし動かす際は自己責任でお願いします。末尾の免責事項をご参照ください。)
<Contents>
- とりあえず動かして遊んでみる
- AIプレーヤーを自作してみる
- ソースコードを読んでみる...
■■■ 1. とりあえず動かして遊んでみる ■■■
-
こちら から xyz.hotchpotch.reversi-x.x.x-yyyymmdd.jar をダウンロードし、ローカルPCの任意の場所に配置します。
-
java -jar
コマンドでダウンロードした jar ファイルを起動します。例> java -jar "C:\Users\hoge\Desktop\xyz.hotchpotch.reversi-2.0.0-20160108.jar"
-
あとは表示されるメニューに従って操作するだけです。「ConsolePlayer」を選ぶと、コンピュータと対戦することができます。
■■■ 2. AIプレーヤーを自作してみる ■■■
準備と作成
- ふつうの java プロジェクトを作成します。(java8準拠にすることをお忘れなく。)
- こちら から xyz.hotchpotch.reversi-x.x.x-yyyymmdd.jar をダウンロードし、ビルド・パスに設定します。
- xyz.hotchpotch.reversi.framework.Player インタフェースを実装し、AIプレーヤークラスを自作します。
※より詳しい手順は こちらのサイト を参照してください。
動かす
- 上記の eclipse の画面から、[実行]→[実行] を選びます。(なんか色々聞かれたら「Menu」を選択します。)
- eclipse のコンソールビューに実行状況が表示されます。表示内容に従い、対話的に入力を行います。
- プレーヤー選択時に自作クラスを指定することで、クラスがロードされ、動作します。
リーグ戦を選ぶと、複数のプレーヤーによる総当たり戦が自動で行われます。
対戦成績が一覧で表示され、お互いの強さが一目瞭然になります。
■■■ 3. ソースコードを読んでみる... ■■■
まだ多くのバグが埋まっているはずです... 見つけましたら nmby までご一報いただけますと幸いです m(. .)m
ソースの各要素については、追い追い別記事化したいと思います。
実装においては、次の点に留意しました。
- 可能な限り不変クラスを使う。(そして不変なメンバはゲッタ無しで直接公開しちゃう。)
- Serializable を実装する際は、クラスの恒等式が決して破られないように注意する。
- クラスがスレッドセーフなのか否かをドキュメントで明確化する。スレッドセーフと謳うものは、実際にそうであるように実装する。
要は『Effective Java』で謳われているような点ですね。ただし、理解しきれていない点はあるかもしれません。
なお実装は、『ザ・ジャバ』って感じのコテコテテイストに仕上げてあります☆
今回実装してみて分かったコト
- java.util.stream まわりは非常に便利だけれども、そもそもマルチスレッド・プログラミングについて理解していなかった... orz
- java.util.concurrent まわりもなーんも理解してなかった... orz
- シリアライゼーションは相変わらずよう分からん... orz
java8 どころの話ぢゃないじゃん... orz
~~~
免責事項
ソースコードおよびバイナリは MIT ライセンスに基づき公開しています。
利用の結果生じたいかなる損害その他の影響について、一切責任を負いません。
また、公開内容の正しさを保証しません。
詳細は LICENSEファイル をご参照ください。