オセロの思考ルーチン完成

9/9 金曜日
学校へは先生から言い渡されたお仕事『10BASE-T のハブを 100BASE-T のスイッチに交換する』作業のためだけに行ってみました。
早速部屋へ行って,床を覗くと。。。
ハブ間が10BASE-2の同軸で繋がれているではありませんか!!!
これは手に負えないと言うことで,
その仕事は後日することになりましたとさ。
しかし,実働している10BASE-2なんて初めてみましたw
10BASE-2機器は未だに家にありますが,私の世代だと普通10BASE-Tでしたから^^;
珍しいので写真を撮っておきました。
381.6:320:240:0:0:DSCN9397.JPG:left:1:1::
さてさて,オセロの思考ルーチンを作ってみたのですが,完成しました。
最初はその局面で裏返せる最大の手を選ぶものを作り,
次は難航しましたが,再帰関数でミニマックス法を行うルーチンでを作りました。
しかし,ミニマックス法だと結局指定された深さまで全探索をするので,
ちょっと先読みを深くするとすぐにスタックオーバーフローを起こしてしまいます。
そこで,Java でゲームプログラミングを解説しているサイトさんを参考にして,
α-βカットを行ってみました。
ほとんど上記サイトさんのコピーに近いプログラムになってしまいましたが,
とりあえず 9手程先まで読めるようになったのでとりあえず満足です。
しかし,遅いのなんの。
ちゃんと枝狩りしているはずなのにものすごい時間かかるんです。
可能性としてあげられるのは,
私のα-βカットへの理解不足から,判定式などを間違っている。可能性中
置ける場所の判定などにループを多用しすぎている。可能性大
う〜ん,とりあえず要改良ですが,ゲームになるので公開しています。
さてさて,完成したら次はうちの学校で強いという『梶田講師のオセロ』と対戦させてみよう,
とやってみました。
梶田先生はうちの学校で一番アルゴリズムに強いと言われている先生で,
その先生によるオセロがあるんです。
先読みの深さはどうやら 13手先で,人間で勝てたら賞金が出るとか出ないとか。
ソースもあるんですが,
コーディングスタイルが全然違うので読むのは無理w
というか,いきなり


jf5m3(char wban[9][9],int wh)
なんていう名前の関数出てきてもわかりません。。。>先生
まぁ強いからいいんですけど。
とりあえず,結果。。。
こちらはあまり先読みを深くすると落ちちゃうので,
7 くらいにして,こちら先手で挑みましたが,
負けました^^;
最初押していたので良い線いくとおもったのですが,
25 対 39 でした。
この『梶田オセロ』README.TXT には以下の文章が添付されています。

OTH33.EXE
C言語で作成したオセロゲームです。
ソフト開発を目指す人はこのプログラムを超えてください
操作
・移動 2↓ 4← 6→ 8↑
・確定 リターンキー
ううう,ソフト開発を目指しているのに超えられませんでしたorz
とりあえず数日休憩したら(バンド練習もそろそろまじめにやらないといけないし)
コードの整理からやって,改良したいと思います。
#とりあえず gccコンパイルするとスタックエラーが出るバグをなんとかしよう
#そしたら広大なメモリを手に入れる事が出来る[にこっ/]
141.5:320:256:0:0:OTH33.JPG:left:1:1::