使っていて、これはこれで全く不満なくとても便利に使わせてもらっている。今日は他にもこんな選択肢がある事を知った。Bitbucketよりもさらに制限が少なそうなので、今度試してみよう。得点テーブルを使うのは序盤のみ。自分の全滅は最低の評価、相手の全滅は最高の評価。中盤は独自の評価関数を使う。自分が打てる場所を多く、相手の打てる場所を少なく。Wingのマイナス評価。ゆらぎ(Randomness)の実装。(毎回同じ手を打たない様に。盤面のオブジェクトを手番が進むたびにコピーする代わりに、事前に60要素の配列を準備して入れておく様に変更。これだとUndoして一つ前の状態に戻すには配列のインデックスをマイナス1するだけ。盤面の状態を表すのにオブジェクトの配列ではなくintの配列を使う。(System.arraycopyが使えるので高速。)オブジェクトの生成を極力避ける。Pointオブジェクトは最初にnewしてset()メソッドで使い回す。ArrayListは最初にfinal修飾子付きでnewしてclear()で初期化して使い回す。ループの終了判定に.size()や.lengthを参照しない。広告の表示方法への工夫ゲーム中は表示せず、終了後にふわっと現れる様に。UIの改善コンピュータ思考中のプログレス表示と処理中アイコン表示を追加。JUnitを使った単体テスト思考ルーチンのデバッグには単体テストが不可欠だった。MVCで任意のオブジェクトのIEnumerableを受け取ってCSVファイルを出力するクラスを作ったので、久しぶりにGitHubに上げておこうと思う。https://github.com/mikehibm/CSVResult何も大した事はしていないけれど、リフレクションを使った例として今度の勉強会で使おうかと思っている。上の様なデータがこの様にCSV形式でダウンロードされる。CSV形式と言うと、データの中に引用符(ダブルクォート)やカンマが含まれていた場合の処理が面倒だ。今回はダブルクォートは二重化する。("→"")カンマは全角に変換する。改行コードは「|」に変換する。いうとりあえずのルールで実装してみた。2010でどうしても列がずれてしまうので、苦肉の策として全角にしてしまった。2010では上手く行かないみたいなので適当に「|」に変換する事にした。まあ実際に使う際には適宜仕様に合わせて変更すればいいかなと思う。