「みさき」を将棋所に移行中
http://www.geocities.jp/shogidokoro/
USIプロトコルに則った汎用将棋GUIである「将棋所」に移行中です。
GUIが毎回初手からの手を渡してくるやり方はCSA将棋と似てますね。
表現がバイナリからテキストになったって感じ。
相手番で考えるも標準で対応
あと感心したのがoptionとして、GUIからプルダウンで選びたいようなメニューを
通信プロトコルとしてGUIに指示できるみたいですね。なるほど〜。
基本的にれさぴょんと駒座標系は同じなのでLesserKaiのソースを参考にして
若干違うので
int Shogi::toUSI(char *buf, int SorE,Te* a) { int pos=0; if (buf[1] == '*') { // 持ち駒を打つ手の場合 char komaName[2]; int dummy; int toSuji; int toDan; char toDanBuf[2]; int ss=sscanf(buf, "%1s%1s%1d%1s", komaName, &dummy, &toSuji, toDanBuf); for(int i=1;i<=7;i++) { if( *usiKoma[i]==komaName[0] ) { a->koma=i; break; } } toDan = toDanBuf[0] - 'a' + 2; a->from=0; a->koma = a->koma|SorE; a->to = toDan * 0x10 + toSuji; a->capture = 0; a->promote = 0; pos += 5; } else { int fromSuji; int toSuji; char fromDanBuf[2]; char toDanBuf[2]; int ss=sscanf(buf, "%1d%1s%1d%1s", &fromSuji, fromDanBuf, &toSuji, toDanBuf); int fromDan = fromDanBuf[0] - 'a' + 2; int toDan = toDanBuf[0] - 'a' + 2; a->from = fromDan * 0x10 + fromSuji; a->to = toDan * 0x10 + toSuji; a->koma = ban[a->from]; a->capture = ban[a->to]; if( a->capture != 0 ) { a->capture = (a->capture&0x0f)|enemy(SorE); } a->promote = buf[4] == '+' ? 1 : 0; if(a->capture!=0) a->capture = (a->capture&0x0f)|(enemy(SorE)); pos += a->promote ? 6 : 5; } return pos; }
こんな感じでpositionで渡ってくる棋譜を座標変換。
a->captureをいじってるのは、落ちる原因を探ってるトコです(^^;
ってことで画面も綺麗ですし、読み筋も見られますし、なかなかいい感じです。
LasserKaiと対戦できるようになりました。
さすがに読みの深さが違うのでLesserKaiには負けませんね(^^;
- まだ完全に動いてません
ただ、しばらく対戦が進むと将棋所ごと落ちてしまいます。
おそらく手の受け渡しで、変なことになってると思うんですが、まだ原因調査中。
LesserKai同士で対戦させると問題なく連続対戦できるので、
こちらの問題と思いますが、デバッガも立ち上がらないので、ちょっと困ってます。
misaki思考エンジンだけでコンソールで対戦させると最後まで行くんですよね……
解決しました。詰め将棋ルーチンが読み筋を標準出力に出してたのを止めてなかったせいみたいです。
問題なく連続対戦できてます〜
- Arena
デザインはchessのARENAってGUIを参考にされてるようですね
http://www.playwitharena.com/
まだ使い始めたばかりですが、
詰め将棋の呼び出し回数とか、NullMoveの成功率とか、futilityCutの成功率とか
表示させたい情報がいくつかあるんですが、そのへんのサブ情報も出す手段があると有り難いかなあ。
とりあえずdebugWindowか、コメント機能で代用しようと思います。
まずは、素晴らしいGUIを公開して下さった「将棋所」の作者さまに感謝したいと思います m(_ _)m
今日は遅くなってしまったんでそろそろ寝ます。っていうか3時だよ(゚Д゚ )