根っからの組込み屋が車輪の再発明しながらオセロアプリを作ってみようという企画です。
言語は組込み屋でも比較的取っつきやすい(?) C#を使います。まずはノーヒントで作ってみました。(もちろん、木の探索やミニマックス法は教養として知ってます。) 2日ほどでいちおう出来たのですが…
問題点
- 弱すぎる (僕に負けるようではダメダメ)
- 遅すぎる (8手先読みすら辛い)
- 雑すぎる (勝ち負けの判定とかパスの判定とか未実装)
- ダサすぎる (とくに着手時の表示とかショボい)
30年くらい前の8ビットパソコンの時代にどうやって人間に勝てるようなオセロや将棋のソフトを作っていたのか、不思議でしかたがありません。CPUは数MHzの8ビットCPU、メモリは数十キロバイト、もちろんSIMDもGPGPUも無かったわけですからね。
課題
- 木の探索やミニマックス法にバグが無いか?
- 評価関数が稚拙 (やはり単純に石の数で評価するだけではダメか)
- 省メモリと高速化の工夫
- アルファベータ法ってなんだっけ?
- 勝ち負けの判定やパスの判定を実装する
- 着手時の表示を分かりやすく改善する
今回のTIPS
.NETのTextBoxは「ReadOnly=True かつ BackColorが未設定の場合、ForeColorは何を設定しても黒のまま」という謎仕様です。ForeColorを設定したい場合にはBackColorも設定します。Visial Studioのデザイナーの[プロパティ]ウィンドウで、BackColorの値が細字になっていたら未設定(デフォルト値)です。選び直して太字にします。
というわけで、これからちょっとずつ改良していきたいと思います。