26
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-08-14

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ファイル をご参照ください。

26
28
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?