/// <summary> /// データを追加するぜ☆(^▽^) 指しながら定跡を追加していくときだぜ☆ /// </summary> /// <param name="ky_before"></param> public SeisekiKyokumen AddMove(string kyFen_before, ulong kyHash_before, Option <Phase> optionalPhaseBeforeMove, Move bestSasite, int version, int kati, int hikiwake, int make) { SeisekiKyokumen josekiKy = this.Parse_AddKyLine(kyFen_before, kyHash_before, optionalPhaseBeforeMove); josekiKy.AddSasite(bestSasite, version, kati, hikiwake, make); return(josekiKy); }
public void Parse(bool isSfen, string[] lines, StringBuilder syuturyoku) { this.Clear(); Kyokumen ky2 = new Kyokumen(); int caret; SeisekiKyokumen josekiKy = null; int gyoBango = 1; foreach (string commandline in lines) { caret = 0; if (caret == commandline.IndexOf("fen ", caret))// fen で始まれば局面データ☆(^▽^) { // キャレットは進めずに続行だぜ☆(^▽^) if (!ky2.ParsePositionvalue(isSfen, commandline, ref caret, false, false, out string moves, syuturyoku)) { string msg = $"パースに失敗だぜ☆(^~^)! #寒鰤 定跡ファイル解析失敗 {gyoBango}]行目"; syuturyoku.AppendLine(msg); Logger.Flush(syuturyoku.ToString()); syuturyoku.Clear(); throw new Exception(msg); } { ky2.Tekiyo(false, syuturyoku); // とりあえず全部作り直し☆(^~^)ルールは変わらないものとするぜ☆(^~^) //ky2.KyokumenHash = ky2.CreateKyokumenHash();//必要最低限、ハッシュだけ適用しておくぜ☆(^▽^) } josekiKy = this.Parse_AddKyLine(commandline, ky2.KyokumenHash.Value, ky2.CurrentOptionalPhase); } else if (commandline.Trim().Length < 1) { // 空行は無視☆ // 半角空白とか、全角空白とか、タブとか 入れてるやつは考慮しないぜ☆(^~^)! } else { // それ以外は手筋☆(^▽^) if (null == josekiKy) { throw new Exception("定跡ファイル解析失敗 定跡局面の指定なし☆"); } josekiKy.AddSasite(ky2, commandline, syuturyoku); } gyoBango++; } }