コンピュータ将棋エンジン　きふわらべ　WCSC27　ソースコード解説

# まず最初に
これから　コンピュータ将棋エンジン　を勉強するなら、
「やねうら王オープンソースプロジェクト」やねうら王

http://yaneuraou.yaneu.com/yaneuraou_mini/

を読もうぜ。

これで、正しい道案内はした。
以下は　時間つぶしだ。

# ソースコード解説

ソースコードはここ。

「きふわらべ WCSC27」Git Hub
https://github.com/muzudho/Kifuwarabe_WCSC27

なんか　いっぱい書いたんだが　保存したら消えた。


#探索
https://github.com/muzudho/Kifuwarabe_WCSC27/blob/master/Kifuwarabe_WCSC27/Kifuwarabe_WCSC27/abstracts/Util_Tansaku.cs

「Go」で　指定局面から　最善手を探し出す。碁ではなく、行け！の意味。

## 指し手生成
https://github.com/muzudho/Kifuwarabe_WCSC27/blob/master/Kifuwarabe_WCSC27/Kifuwarabe_WCSC27/abstracts/Util_SasiteSeisei.cs

「GenerateSasite_01」で　指定局面の合法手を一覧する。
らいおんが取られる手を　最優先で調べ、　その次に　駒を取る手、　最後に　タダ捨ての動きを調べる。指し手のオーダリングは、このように固定している。

## 一手詰め判定
https://github.com/muzudho/Kifuwarabe_WCSC27/blob/master/Kifuwarabe_WCSC27/Kifuwarabe_WCSC27/abstracts/Util_Ittedume.cs

「盤上の駒を動かしたとき」「持ち駒を打ったとき」でアルゴリズムが異なる。

## トライルール
https://github.com/muzudho/Kifuwarabe_WCSC27/blob/master/Kifuwarabe_WCSC27/Kifuwarabe_WCSC27/abstracts/Util_TryRule.cs

１段目に　らいおん　が行けるかどうかを判定するものだが、「可／不可」だけを調べるだけなら　こんなコード要らなかった。「なぜ不可なのか」のエラー理由を返す仕組みを　ビットボードに織り込むべきだろうか？

## トランスポジション・テーブル
https://github.com/muzudho/Kifuwarabe_WCSC27/blob/master/Kifuwarabe_WCSC27/Kifuwarabe_WCSC27/implements/TranspositionTable.cs

同じ局面に合流したかどうか判定できる。主な用途は　千日手チェック。

## 持ち時間配分
https://github.com/muzudho/Kifuwarabe_WCSC27/blob/master/Kifuwarabe_WCSC27/Kifuwarabe_WCSC27/abstracts/Util_TimeManager.cs

## 局面のゾブリスト・ハッシュ
https://github.com/muzudho/Kifuwarabe_WCSC27/blob/master/Kifuwarabe_WCSC27/Kifuwarabe_WCSC27/abstracts/Util_ZobristHashing.cs

# 局面（局面操作）
https://github.com/muzudho/Kifuwarabe_WCSC27/blob/master/Kifuwarabe_WCSC27/Kifuwarabe_WCSC27/implements/Kyokumen.cs

こっちはデータをラッピングした操作。データ読取専用アクセッサ―の「診断用」と、データ編集可能の「局面」と２つあるが分かりづらかった。

## 局面（局面データ）
https://github.com/muzudho/Kifuwarabe_WCSC27/blob/master/Kifuwarabe_WCSC27/Kifuwarabe_WCSC27/implements/Shogiban.cs

こっちはデータ。
こっちの方が　いわゆる　局面　と言われるデータ。
「対局者別の駒全部」「駒の種類別」のペアが揃っており、「駒」「利き」がある。

### 対局者（先後）
https://github.com/muzudho/Kifuwarabe_WCSC27/blob/master/Kifuwarabe_WCSC27/Kifuwarabe_WCSC27/interfaces/Taikyokusya.cs

### 駒
https://github.com/muzudho/Kifuwarabe_WCSC27/blob/master/Kifuwarabe_WCSC27/Kifuwarabe_WCSC27/interfaces/Koma.cs

### 駒種類
https://github.com/muzudho/Kifuwarabe_WCSC27/blob/master/Kifuwarabe_WCSC27/Kifuwarabe_WCSC27/interfaces/Komasyurui.cs

### 升
https://github.com/muzudho/Kifuwarabe_WCSC27/blob/master/Kifuwarabe_WCSC27/Kifuwarabe_WCSC27/interfaces/Masu.cs

### ビットボード
https://github.com/muzudho/Kifuwarabe_WCSC27/blob/master/Kifuwarabe_WCSC27/Kifuwarabe_WCSC27/implements/Bitboard.cs

2バイト・ビットボード。

# 評価値（内訳）
https://github.com/muzudho/Kifuwarabe_WCSC27/blob/master/Kifuwarabe_WCSC27/Kifuwarabe_WCSC27/implements/HyokatiUtiwake.cs

## 評価値（駒割り評価値）
https://github.com/muzudho/Kifuwarabe_WCSC27/blob/master/Kifuwarabe_WCSC27/Kifuwarabe_WCSC27/interfaces/Hyokati.cs

# 棋譜（リスト）
https://github.com/muzudho/Kifuwarabe_WCSC27/blob/master/Kifuwarabe_WCSC27/Kifuwarabe_WCSC27/implements/Kifu.cs

# 棋譜（何手目）
https://github.com/muzudho/Kifuwarabe_WCSC27/blob/master/Kifuwarabe_WCSC27/Kifuwarabe_WCSC27/implements/Nanteme.cs

## 読み筋（リスト）
https://github.com/muzudho/Kifuwarabe_WCSC27/blob/master/Kifuwarabe_WCSC27/Kifuwarabe_WCSC27/implements/Yomisuji.cs

## 指し手
https://github.com/muzudho/Kifuwarabe_WCSC27/blob/master/Kifuwarabe_WCSC27/Kifuwarabe_WCSC27/interfaces/Sasite.cs