2014/08/10 15:46
タイトルどおりなんだが、
将棋エンジンの通信方法には、
  ・USIプロトコル通信
  ・CSAプロトコル通信
    (など?)
があり、電王トーナメントは CSAプロトコル を使う。
というあたりを ようやく理解してきた☆wwww
土・日ぶっ続けで (途中、
天下一プログラマーコンテスト2014予選Aに参加したり☆ww)
まだまだ 将棋GUIの開発途中だぜ☆
ソフトの見た目が変わらないので、アップするほどのスクリーンショットがないんだぜ☆
USIプロトコル通信
===============
  これは、「usi」とか、「usiok」(牛オッケー)といった挨拶に始まり、
  「bestmove 7g7f」とか、「position startpos moves 7g7f 3c3d」といった文章を
  やりとりする方のルールなんだぜ☆
CSAプロトコル通信
================
  これは、「LOGIN tiger 0123」とか、「LOGIN:tiger OK」といった挨拶に始まり、
  「+7776FU」とか、「+3334FU,T1」といった文章を
  やりとりする方のルールなんだぜ☆
プロトコルというのは、
  ・こっちが こう送る手はずなので、
  ・決まりだから 合わせろ
という意味なんだぜ☆ コンピューターに限った用語ではなく、
  ・ポンに合わせて チャンカンする
  ・司会に紹介されてから 舞台に上がる
  ・お賽銭は、祈る前でも祈った後でも どちらで入れてもよい
など、プロトコルは どこにでもある☆
もう1つ理解しておくべきことがあるんだぜ☆
USIプロトコル通信
===============
   標準入出力を使う。
   ・Console.ReadLine()
   ・Console.WriteLine( "7g7f" )
CSAプロトコル通信
================
   TCP/IPを使う。
   ・(ストリーム).Read( buffer, 0, buffer.Length )
   ・(ストリーム).Write( "+7776FU\n", 0, 8 )
何が違うのかと言うと、ざっくり まとめてみたぜ☆
標準入出力
=========
   ・超簡単。
TCP/IP
===========
   ・サーバーとク
…と書こうとしていたところで、『将棋所』にUSI通信ができれば、
あとは『将棋所』が TCP/IP 通信をしてくれるんだと
ツイッターで 教えてくれたので 将棋所を もっと調べてみよう☆wwwwww
『将棋所』を ただの将棋盤 ぐらいにしか思っていなかった私には
通信の仲介に利用できるというのは 無かった発想なんだぜ☆
 
 
確かに この画面は見たことがある☆wwwww
3日ぐらい前に rubyで shogi-server を立てて、
れさぴょんin将棋所 相手に、 SFIinわたし で
対局していたやつなんだぜ☆wwwww
8/10(土)・11(日)の間に
  ①マウスで駒の動きを入力する機能  ②合法手を くじ運で 適当に選ぶ機能  ③CSAプロトコル1.1.3対応   ←まずは これを終わらすぜ☆!
と意気込んでいたんだが、
  ①マウスで駒の動きを入力する機能   ←将棋所をつかえばよい☆
  ②合法手を くじ運で 適当に選ぶ機能
  ③CSAプロトコル1.1.3対応   ←将棋所で将棋エンジンが動いていれば
                      他のサーバーの将棋エンジンと対戦できる☆
まさか 2つも もう終わっていたとは☆
計画変更☆
   ①局面を与えると、くじ運で 合法手を1つ返してくる機能
 この1個だけ まず作ろう☆ww
 
 
『れさかい1.3.6』と遊んでいるのだが、
電王戦で ちらちら みかける評価値バーが ナイアガラの滝 のようなんだぜ☆
わたしのプログラムでは、
送られてくる「position startpos move ~」みたいな文字から
駒の場所をセッティングするところまでは作れているので、
次は どんな合法手があるか、を得られる方法を 調べるんだぜ☆
うさぴょんや れさかいのソースのどこかにあるはずなんだぜ☆
『れさぴょん』には 次のようなコードがある☆ (kyokumen.cpp)
    int Kyokumen::IsLegalMove(int SorE,Te &te)
    {
      ・動かしているのは相手の駒だ    → ×
      ・駒を打つぜ
            そんな駒持ってないぜ  → ×
      ・駒を指すぜ
            そんな駒、盤上にないぜ → ×
      ・自分の駒を取った         → ×
      ・IsCorrectMove(~)
         ○→ 試しに1手動かす
            ・自玉が詰んだ     → ×
            ・自玉は詰んでいない  → ○
         ×              → ×
    }
    int Kyokumen::IsCorrectMove(Te &te)
    {
      ・駒を打つぜ
          ・駒を打とうとした先に駒があった → ×
          ・歩だぜ
             打った列には別の歩があったぜ→ × 二歩
             相手の王様を詰ませたぜ   → × 打ち歩詰め
          ・それ以外            → ○ 打てた☆
      ・王を動かすぜ
          ・敵の利きに飛び込むぜ      → ×
          ・それ以外            → ○
      ・桂馬は跳ね~るぜ~☆          → ○ なんの邪魔もない
      動かした距離を測るぜ☆
      ・動かしてないぜ☆            → ×
      ・1枡横(縦、ナナメ)へ動かしたぜ☆   → ○
      ・2枡以上動くんだぜ☆
          ・途中に、空でない枡があった☆  → ×
          ・それ以外            → ○
    }
といった感じなんだぜ☆ わたしが読んだ感じ、多分☆
2014/08/10 19:41
 
 
コンピューターに、
    ①駒の動きを覚えさせる。(前に進むだけ → ちゃんと動く
         → 味方の駒を取らない → 王手に突っ込んでいかない …など)
    ②好きな駒を指させる。(違法手・パスあり)
    ③好きな駒を指させる。(合法手のみ・パスなし)
といった 将棋のルールを作りこんでいく段階なんだぜ☆
今、わたしのコンピューター将棋が どんな感じかというと。
    ①将棋盤の上の、自分の駒を ランダムに選ぶ。
    ②その駒を 前に1つ 進ませる。
    ③敵・味方 関係なく駒を取れる。
    ④先手の駒が1段目より上に行こうとしたとき 棋譜の符号が壊れる。
    ⑤後手の駒が9段目より下に行こうとしたとき 棋譜の符号が壊れる。
という感じなんだぜ☆
将棋のルールを全部覚えさせるのは まだまだ だな☆
2014-08-10 23:11
 
 
これが土日の成果なんだぜ☆
  (1)将棋エンジンを起動できるボタンを付けた。
     9三の歩を ちょっと突く、ぐらいまでは やってくれる☆www
  (2)USIプロトコルで ゲームエンジンと “お会話” をするところが
     まだ きっちり できていない☆ だが、ぼんやり付けることはできた☆
  (3)「コンピューターの最善手(作りかけ)」ボタンを置いた☆
     やってることは 駒を直進させるだけだぜ☆wwwww
  (4)上の 1~3 ができるように、土曜日はぶっとおしで
     ソースコードを整理した☆ 下地整備というやつなんだぜ☆
このアプリは ホームページで公開しているんだぜ☆
       ・
    『きふならべ Ver 1.07.1』
    
http://grayscale.iza-yoi.net/shogi/download.html
                                                    
                 [1回]
[1回]
PR
                        
http://grayscale.dou-jin.com/Entry/32/【将棋】目指せ電王戦(5) 将棋エンジンの通信方法には、USIプロトコル通信や、CSAプロトコル通信(など)があり、電王トーナメントはCSAプロトコルを使うというあたり理解してきた☆