<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/shogi_algo/">
    <title>shogi_algo @ ウィキ</title>
    <link>http://w.atwiki.jp/shogi_algo/</link>
    <atom:link href="https://w.atwiki.jp/shogi_algo/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>shogi_algo @ ウィキ</description>

    <dc:language>ja</dc:language>
    <dc:date>2009-03-03T03:47:02+09:00</dc:date>
    <utime>1236019622</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/shogi_algo/pages/26.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/shogi_algo/pages/25.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/shogi_algo/pages/24.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/shogi_algo/pages/18.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/shogi_algo/pages/23.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/shogi_algo/pages/22.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/shogi_algo/pages/21.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/shogi_algo/pages/20.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/shogi_algo/pages/19.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/shogi_algo/pages/17.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/shogi_algo/pages/26.html">
    <title>_tmain()の対局待ちのループ</title>
    <link>https://w.atwiki.jp/shogi_algo/pages/26.html</link>
    <description>
      *tmain()の対局待ちのループ

*概要
-[[LesserKai.cpp]]にて定義
-対局開始までのコマンド毎の処理

*引数
-なし

*実装
-コマンドを取得
-コマンドが&quot;usi&quot;なら
--id、選択可能なオプション、&quot;usiok&quot;を標準出力に表示する
-コマンドが&quot;isready&quot;なら
--&quot;readyok&quot;を標準出力に表示する
-コマンドの先頭が&quot;setoption&quot;なら
--コマンドが&quot;setoption name USI_Ponder value true&quot;なら
---canPonder=true;
--コマンドが&quot;setoption name USI_Ponder value false&quot;なら
---canPonder=false;
--コマンドの先頭が&quot;setoption name USI_Hash value &quot;なら
---何もしない(コードがあるが結果が使用されない)
--コマンドの先頭が&quot;setoption name USI_Hash value &quot;なら
---&quot;setoption name USI_Hash value &quot;の直後の文字列をbookFileStrに設定
---bookFileStrをINIファイルの[CustomSettings]の&quot;BookFile&quot;に設定
--コマンドの先頭が&quot;setoption name UseBook value &quot;なら
---&quot;setoption name UseBook value &quot;の直後の文字列が&quot;true&quot;かをisUseJosekiに設定
---isUseJosekiが真なら&quot;true&quot;を偽なら&quot;false&quot;をINIファイルの[CustomSettings]の&quot;UseBook&quot;に設定
-コマンドが&quot;usinewgame&quot;なら
--ループを抜ける

*呼出元    </description>
    <dc:date>2009-03-03T03:47:02+09:00</dc:date>
    <utime>1236019622</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/shogi_algo/pages/25.html">
    <title>WaitCommand()</title>
    <link>https://w.atwiki.jp/shogi_algo/pages/25.html</link>
    <description>
      *string WaitCommand()

*概要
-[[LesserKai.cpp]]にて定義
-コマンドキューからコマンドを取得

*引数
-なし

*実装
-ループ(コマンドキューが空)
--100msスリープ
-クリティカルセクションに入る
-コマンドキューの先頭からコマンドを取得
-キューの先頭を削除
-クリティカルセクションから出る

*呼出元    </description>
    <dc:date>2009-03-03T02:55:37+09:00</dc:date>
    <utime>1236016537</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/shogi_algo/pages/24.html">
    <title>void Kyokumen::InitKyokumen(int tesu, KomaInf board[9][9], int Motigoma[])</title>
    <link>https://w.atwiki.jp/shogi_algo/pages/24.html</link>
    <description>
      void Kyokumen::InitKyokumen(int tesu, KomaInf board[9][9], int Motigoma[])

-Kyokumen::Kyokumen(int tesu,KomaInf board[9][9],int Motigoma[])と全く同じ
--全く同じなら、なぜ関数コールしないのか…

↑ リンクが張れない…    </description>
    <dc:date>2009-03-03T02:35:38+09:00</dc:date>
    <utime>1236015338</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/shogi_algo/pages/18.html">
    <title>Kyokumen::InitControl()</title>
    <link>https://w.atwiki.jp/shogi_algo/pages/18.html</link>
    <description>
      *void Kyokumen::InitControl(void);

*概要
-[[kyokumen.cpp]]にて定義
-controlS, controlE の初期化
--(controlS, controlEは利きを保持する、とコメントにあるが意味不明)

*引数
-なし

*実装
-controlSとcontrolEをゼロ初期化
-ループ(全位置)
-(以下、後で再確認。意味不明)
--敵駒なら
---ループ(駒ジャンプ種類)
---→CanJump[駒ジャンプ種類][ban[駒位置]]が真なら
---→→ループ(駒の周囲、駒があるところ)
---→→→controlE[位置] |= bj;
---→CanMove[駒ジャンプ種類][ban[駒位置]]が真なら
---→→controlE[dan + suji + Direct[i]] |= b;
--自駒なら
---controlSについて上記と同じ処理

*呼出元    </description>
    <dc:date>2009-03-02T03:29:19+09:00</dc:date>
    <utime>1235932159</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/shogi_algo/pages/23.html">
    <title>Kyokumen::Kyokumen(int tesu,KomaInf board[9][9],int Motigoma[])</title>
    <link>https://w.atwiki.jp/shogi_algo/pages/23.html</link>
    <description>
      Kyokumen::Kyokumen(int tesu,KomaInf board[9][9],int Motigoma[])

*概要
-[[kyokumen.cpp]]にて定義
-局面のコンストラクタ

*引数
-tesu
-board
-Motigoma

*実装
-盤面および盤面パディングを壁で埋める
--盤面パディングは桂馬の聴き用(とコメントにあるが後で確認)
-ループ(全位置)
--引数boardからbanを生成
---boardは二次元配列で、棋譜と同じインデクシング
---banのインデックスは一次元配列で、段の中の並びが棋譜と左右が逆
---(なんでわざわざ逆にしたのか)
--局面ハッシュ値の更新
---ハッシュ値^=[[HashSeed&gt;Kyokumen::HashInit()]][駒の種類][位置]
--自玉、敵玉の位置を記憶
--駒の価値を積算
---価値はKomaValue[駒種類]
-ループ(駒種類)
--MotigomaからHandを生成
---Hand[駒種類]は持ち駒の数
--持ち駒の価値を積算
---価値はHandValue[種類]*数
---ループ(その駒種類の持ち駒の数)
---→持ち駒ハッシュ値の更新
-局面ハッシュ値と持ち駒ハッシュ値からハッシュ値を計算
--(局面ハッシュ値という名前だが、盤面ハッシュもしくは盤上ハッシュと呼びたい)
-履歴初期化
--Tesuより前の履歴を0で初期化
--HashHistory[Tesu]=HashVal;
--OuteHistory[Tesu]=((Tesu%2)==0)?controlS[kingE]:controlE[kingS];
-InitControl();

*呼出元    </description>
    <dc:date>2009-03-02T00:35:20+09:00</dc:date>
    <utime>1235921720</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/shogi_algo/pages/22.html">
    <title>KyokumenKomagumi::InitKanagomaValue()</title>
    <link>https://w.atwiki.jp/shogi_algo/pages/22.html</link>
    <description>
      KyokumenKomagumi::InitKanagomaValue()

*概要
-[[kyokumen.cpp]]にて定義
-駒の種類に関係なく、自玉/敵玉との相対位置から駒の価値を決める。価値は以下のように事前に全パターン計算し、絶対位置から即座に求められるようにする。

--自分の攻め駒の価値[駒の位置][敵玉の位置]
--自分の守り駒の価値[駒の位置][自玉の位置]
--敵の攻め駒の価値[駒の位置][自玉の位置]
--敵の守り駒の価値[駒の位置][敵玉の位置]

*引数

*実装
-ループ(自玉の全位置)
--ループ(敵玉の全位置)
---ループ(該駒の全位置)※

----

-ループ(該駒の全位置)※の中身
--(該駒のみ、筋と段が逆。なぜ？)
--自分の攻め駒の価値[該駒の位置][敵玉の位置]の計算と初期化
--自分の守り駒の価値[該駒の位置][自玉の位置]の計算と初期化
--敵の攻め駒の価値[該駒の位置][自玉の位置]の計算と初期化
--敵の守り駒の価値[該駒の位置][敵玉の位置]の計算と初期化
--(初期化対象の配列の要素数に対してループが多すぎる？無駄な処理がある？)
--(後でじっくり確認)

*呼出元    </description>
    <dc:date>2009-03-02T00:18:54+09:00</dc:date>
    <utime>1235920734</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/shogi_algo/pages/21.html">
    <title>Kyokumen::HashInit()</title>
    <link>https://w.atwiki.jp/shogi_algo/pages/21.html</link>
    <description>
      *Kyokumen::HashInit()

クラス関数。

-HashSeed[全駒種類][全位置]を乱数で初期化
--複数のrand()の結果を合成しているのはなぜ？
--全駒とは言っても、0～ERY
--位置は0x11～0x99(盤面外も勢い余って初期化している？)
-HandHashSeed[全駒種類][枚数]を乱数で初期化
--複数のrand()の結果を合成しているのはなぜ？
--全駒とは言っても、SFU～EHI
--枚数は0～18(枚数とは？)    </description>
    <dc:date>2009-02-27T02:35:58+09:00</dc:date>
    <utime>1235669758</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/shogi_algo/pages/20.html">
    <title>ReceiveThread()</title>
    <link>https://w.atwiki.jp/shogi_algo/pages/20.html</link>
    <description>
      ReceiveThread()

思考中もコマンドを受け付けるためのスレッド。

-無限ループ(exitあり、breakなし)
--標準入力からコマンドを入力
--コマンドが&quot;quit&quot;なら
---コマンドキューが空になるまで待つ
---クリティカルセクションオブジェクトを削除
---プログラムを終了
--クリティカルセクションに入る
--コマンドが&quot;stop&quot;なら
---stopコマンドを受けたかをtrue
--コマンドが&quot;ponderhit&quot;なら
---ponderhitReceiveTime = Windows起動からの経過時間(ms);
--コマンドが&quot;gameover&quot;なら
---stopコマンドを受けたかをtrue
--コマンドキューにコマンドを追加
--クリティカルセクションから出る    </description>
    <dc:date>2009-02-27T02:20:40+09:00</dc:date>
    <utime>1235668840</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/shogi_algo/pages/19.html">
    <title>_tmain()</title>
    <link>https://w.atwiki.jp/shogi_algo/pages/19.html</link>
    <description>
      ----
*概要

++受信スレッドを作成する

----
*ローカル変数
**HANDLE hTh
受信スレッド用ハンドル

**char iniValueBuf[256]
パラメータ取得用のテンポラリバッファ

**KomaInf HirateBan[9][9]
盤面状態

EKY, EKE, ... 人から見て盤面状態がそのまま一目でわかるようになっている

初期値は平手で指す場合の初期配置

**int HirateMotigoma[EHI+1]
平手の持ち駒情報を格納するための配列

初期値は all 0。平手の初期配置では持ち駒がないので当然か。

**int customMotigoma[EHI+1]
平手初期局面以外から開始する時のための配列（らしい）

なぜ平手と分けて管理しているのか、不明・・・

初期値は all 0

----
記述レベルが↑とずいぶん違うので、とりあえず併記。
とはいえ、表記方法や記述レベルはまだ試行錯誤。

-標準入出力のバッファリングを無効化
-クリティカルセクションオブジェクトの初期化(Windows API)
-[[ReceiveThread()]]を新規スレッドとして一時停止状態で生成、すぐ実行
--スレッドに関して特殊な設定なし
--一時停止状態で起動する理由は？
-INIファイルから定跡ファイル名と定跡ファイルを使用するかを取得
-疑似乱数の初期化
-[[Kyokumen::HashInit()]];
-平手の初期配置、平手の初期持ち駒、駒落ちの初期持ち駒を表す配列の定義
--なぜここで定義…
-[[KyokumenKomagumi::InitKanagomaValue()]];
-new [[Kyokumen(0, HirateBan, HirateMotigoma)&gt;Kyokumen::kyokumen()]]
-無限ループ
--対局待ちのループ
--[[joseki.get()&gt;joseki::get()]]
--上記戻り値がNULLなら[[joseki.reset(new Joseki((char *)bookFileStr.c_str()))&gt;joseki::reset]]
--[[KyokumenKomagumi k&gt;KyokumenKomagumi::KyokumemKomagumi()]];
--KomaInf customBan[9][9];
--customBanの初期化(0埋め…)
--Sikou sikou;
--sikou.ClearHash();
--ハッシュ使用数を0に
--stopコマンドを受けたかをfalseに
--Te teBuf[600];
--Te te(0);
--Te ponderTe(0);
--対局のループ    </description>
    <dc:date>2009-02-27T02:14:24+09:00</dc:date>
    <utime>1235668464</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/shogi_algo/pages/17.html">
    <title>Kyokumen クラス</title>
    <link>https://w.atwiki.jp/shogi_algo/pages/17.html</link>
    <description>
      *概要
局面データを管理しているクラス

*メソッド
**public : [[Kyokumen::InitControl()]]    </description>
    <dc:date>2008-12-09T01:47:30+09:00</dc:date>
    <utime>1228754850</utime>
  </item>
  </rdf:RDF>
