動作環境:
Python2.7 + pygame
Cellクラス:
x, y : セルの位置 (07, 07)
state : セルの状態 (WHITE / BLACK / EMPTY)
Boardクラス:
board : オセロの盤面の実体 (Cellが8*8=64個の1次元リスト)
at(x, y) : 盤面の2次元平面の位置(x, y)に対応するCellを返す
takes(x, y, color) : (x, y)の位置にcolor色のコマを置いた場合に取れる相手のコマの数を返す
put(x, y, color) : (x, y)の位置にcolor色のコマを置く->boardの各Cellのstateが書き換わる
placeable(x, y) : 位置(x, y)にコマを置けるか判定.TrueかFalseを返す
placeableCells() : コマを置くことができるセルのリストを返す
Indexクラス
takes(line, x, color) : Cell列であるlineに対してx番目の位置にcolor色のコマを置いた際に取れる相手のコマの数を返す
flip(line, x, color) : Cell列であるlineに対してx番目の位置にcolor色のコマを置いた際に裏返されるべきコマを裏返す(line内のCell.stateを直接書き換える)
AIクラス
takeTurn() : evaluate()を実行してコマを置く
__evauate() : AIの思考関数の本体.毎ターンで盤面を評価し,次にコマを置くべき位置(x, y)を返す
__evaluateCell(cell) : 引数で与えられたCellにコマを置いたときの評価値を返す.評価値を計算する評価関数はphase毎に変更可能
__alphaBeta(color, height, alpha, beta) : AlphaBeta法による評価関数.(http://uguisu.skr.jp/othello/alpha-beta.html)
探索過程のBoard操作ではDeepCopyでなく各Cellのstateのコピーを採用している.(DeepCopyの場合,処理時間が非常に大きくなるため)
__evaluateLeaf(color) : 呼び出された時点のBoardの状態で,手番がcolorのときの盤面の評価値を返す.現時点では簡易的な重み付けによる実装にしてある(http://uguisu.skr.jp/othello/5-1.html)
canPut() : コマを置ける場所があるかどうかを返す
Youクラス
takeTurn() : クリックされた位置にコマを置く
canPut() : コマを置ける場所があるかどうかを返す
Gameクラス
run() : ゲームの進行
output() : 結果を出力する
TODO :
・takes関数の実装
・evaluate関数の実装
・AIの先攻後攻を決めれるように
・Undo機能の実装 (BackSpaceでUndo)
・探索アルゴリズムの改良
→MoveOrderingの実装
→NegaScout法の実装
→置換表の実装
→並列化
・evaluateLeaf関数の本実装
・phase毎の評価関数の実装
→OpeningBook(定石)の実装
・Indexクラスの行列圧縮