ネタ元のオセロゲームのコードの一部(注)をMSCompassでコンパイルできるように改造し、オリジナルのアルゴリズムを解説する、というネタで行くことに決定しました。

注:このページは、このサイトにあったのですが、Copyright条件が書かれていなかったので、「Topへ」を押したら"404 Page Not Foundエラー"、「【書籍等の購入はこちら⇒】」も中古車販売のCMだけ、しょうがないので、このサイトの上と思われるURLを調べたらここにたどり着きました。矢張りCopyright文言は無く、最終更新日が2012/03/09となっており、所謂「廃墟サイト」なのかなー、と思われます。なおこのサイトは「ソースプログラム 公開」とあったので参照という形で使わせていただきます。

 

ということで、

 

色々とオリジナルコードを読んで分析し、自分なりにコメントを入れ(またはオリジナルのコメントを書き換え)、

 

(1)"InitializeComponent();"で隠されたコードは、オリジナルのコメント文から推定して、"InitControls();"で追加する。

(2)ラジオボタンコントロールはChekedプロパティの初期状況が分からず、「先攻・後攻」がユーザーにより決定されるまでは、関連コントロールを無効にし、ゲームの仕方や操作等のUIが全くないので、簡単にMessageBoxで表示し、結果もやりっぱなしでは不味だろうと、戦績情報の記録、表示機能などを追加する。

(3)(恐らく構想段階で書かれたが、結局実現されずに)使われない不要な変数(gameStart)、コントロール(timer1)に関わるコードは削除する。

(4)オリジナルのアルゴリズム(特に手<move>の評価システム)はそのままとする(注)も、コーディングは意味の分かるような変数の名称を使ったり、関連メソッドの配置をまとめたり等可読性を高める。

(5)(実は最後に引っ掛かったのですが)オセロ盤の座標の表記で、配列、メソッド引数共に(i, j)、(II, JJ)等iとjで、その順で書かれており、(x, y)のことかと思ったのですが、実は(y, x)であり、メソッドだけは(x, y)の形式に直しました。

(6)その他、イレギュラーな条件式や不要な条件式などは手直しして、簡素な形にしました。

 

その結果、

 

このような形で元気に動いております。

 

後はじっくりと解説してゆきましょう。