public Game() { this.Kifu = new KifuTreeImpl( new KifuNodeImpl( Util_Sky.NullObjectMove, new KyokumenWrapper(new SkyConst(Util_Sky.New_Hirate())),// きふわらべ起動時 // FIXME:平手とは限らないが。 Playerside.P2 ) ); this.Kifu.SetProperty(KifuTreeImpl.PropName_FirstPside, Playerside.P1); this.Kifu.SetProperty(KifuTreeImpl.PropName_Startpos, "startpos"); // 平手 // FIXME:平手とは限らないが。 this.TesumiCount = 0; // n手目 this.GoPonderNow = false; // go ponderを将棋所に伝えたなら真 }
/// <summary> /// [初期配置]ボタン /// </summary> public static void Perform_SyokiHaichi( Ui_PnlMain ui_PnlMain ) { ui_PnlMain.ShogiGui.GameViewModel.Kifu.Clear(); // 棋譜を空っぽにします。 ui_PnlMain.ShogiGui.GameViewModel.Kifu.SetProperty(KifuTreeImpl.PropName_Startpos, "startpos"); //平手の初期局面 KifuNode newNode = new KifuNodeImpl( Util_Sky.NullObjectMove, //ルートなので new KyokumenWrapper(Util_Sky.New_Hirate()), //[初期配置]ボタン押下時 KifuNodeImpl.GetReverseTebanside(((KifuNode)ui_PnlMain.ShogiGui.GameViewModel.Kifu.CurNode).Tebanside) ); // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ // ここで棋譜の変更をします。 // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ Util_InServer.SetCurNode_Srv(ui_PnlMain.ShogiGui, newNode); ui_PnlMain.ShogiGui.ResponseData.ToRedraw(); ui_PnlMain.ShogiGui.ResponseData.RedrawStarlights();// 駒の再描画要求 ui_PnlMain.ShogiGui.ResponseData.OutputTxt = ResponseGedanTxt.Clear; ui_PnlMain.ShogiGui.ResponseData.ToRedraw(); }
public string Execute( ref KifuParserA_Result result, IRoomViewModel roomViewModel, out KifuParserA_State nextState, KifuParserA owner, KifuParserA_Genjo genjo ) { nextState = this; if (genjo.InputLine.StartsWith("startpos")) { // 平手の初期配置です。 //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Logger.Trace("(^△^)「" + genjo.InputLine + "」vs【" + this.GetType().Name + "】 : 平手のようなんだぜ☆"); genjo.InputLine = genjo.InputLine.Substring("startpos".Length); genjo.InputLine = genjo.InputLine.Trim(); { roomViewModel.GameViewModel.Kifu.Clear(); // 棋譜を空っぽにします。 roomViewModel.GameViewModel.Kifu.GetRoot().Value.SetKyokumen(new SkyConst(Util_Sky.New_Hirate())); //SFENのstartpos解析時 roomViewModel.GameViewModel.Kifu.SetProperty(KifuTreeImpl.PropName_Startpos, "startpos"); //平手の初期局面 } nextState = KifuParserA_StateA1a_SfenStartpos.GetInstance(); } else { Logger.Trace("(^△^)「" + genjo.InputLine + "」vs【" + this.GetType().Name + "】 : 局面の指定のようなんだぜ☆"); nextState = KifuParserA_StateA1b_SfenLnsgkgsnl.GetInstance(); } return(genjo.InputLine); }
/// <summary> /// 棋譜データを元に、符号リスト1(*1)を出力します。 /// /// *1…「▲2六歩△8四歩▲7六歩」といった書き方。 /// /// </summary> /// <param name="fugoList"></param> public static string ToJapaneseKifuText( KifuTree kifu ) { StringBuilder sb = new StringBuilder(); sb.Append("position "); sb.Append(kifu.GetProperty(KifuTreeImpl.PropName_Startpos)); sb.Append(" moves "); // 採譜用に、新しい対局を用意します。 KifuTree saifuKifu; { saifuKifu = new KifuTreeImpl( new KifuNodeImpl( Util_Sky.NullObjectMove, new KyokumenWrapper(new SkyConst(Util_Sky.New_Hirate())), //日本の符号読取時 Playerside.P2 ) ); saifuKifu.Clear();// 棋譜を空っぽにします。 saifuKifu.SetProperty(KifuTreeImpl.PropName_FirstPside, Playerside.P1); saifuKifu.SetProperty(KifuTreeImpl.PropName_Startpos, "startpos");//平手の初期局面 // FIXME:平手とは限らないのでは? } kifu.ForeachHonpu(kifu.CurNode, (int tesumi, KyokumenWrapper kWrap, Node <ShootingStarlightable, KyokumenWrapper> node6, ref bool toBreak) => { if (0 == tesumi) { goto gt_EndLoop; } FugoJ fugo; //------------------------------ // 符号の追加(記録係) //------------------------------ KyokumenWrapper saifu_kWrap = saifuKifu.CurNode.Value; KifuNode newNode = new KifuNodeImpl( node6.Key, new KyokumenWrapper(saifu_kWrap.ToKyokumenConst), KifuNodeImpl.GetReverseTebanside(((KifuNode)saifuKifu.CurNode).Tebanside) ); // TODO: ↓? ((KifuNode)saifuKifu.CurNode).AppendChildA_New(newNode); saifuKifu.CurNode = newNode; RO_Star_Koma koma = Util_Koma.AsKoma(((ShootingStarlightable)node6.Key).LongTimeAgo); fugo = JFugoCreator15Array.ItemMethods[(int)Haiyaku184Array.Syurui(koma.Haiyaku)](node6.Key, saifu_kWrap);//「▲2二角成」なら、馬(dst)ではなくて角(src)。 sb.Append(fugo.ToText_UseDou(node6)); gt_EndLoop: ; }); return(sb.ToString()); }
/// <summary> /// 起動直後の流れです。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Ui_PnlMain_Load(object sender, EventArgs e) { this.setteiFile = new SetteiFile(); if (!this.SetteiFile.Exists()) { // ファイルが存在しませんでした。 // 作ります。 this.SetteiFile.Write(); } if (!this.SetteiFile.Read()) { // 読取に失敗しました。 } // デバッグ this.SetteiFile.DebugWrite(); //---------- // 棋譜 //---------- // // 先後や駒など、対局に用いられる事柄、物を事前準備しておきます。 // //---------- // 駒の並べ方 //---------- // // 平手に並べます。 // { this.ShogiGui.GameViewModel.Kifu.Clear(); // 棋譜を空っぽにします。 this.ShogiGui.GameViewModel.Kifu.SetProperty(KifuTreeImpl.PropName_Startpos, "startpos"); //平手の初期局面 this.ShogiGui.GameViewModel.SetGuiSky( Util_Sky.New_Hirate() //起動直後 ); } this.ShogiGui.GameViewModel.Kifu.SetProperty(KifuTreeImpl.PropName_FirstPside, Playerside.P1); // 全駒の再描画 this.ShogiGui.ResponseData = new ResponseImpl(); this.ShogiGui.ResponseData.RedrawStarlights(); //---------- // フェーズ //---------- this.ShogiGui.SetScene(SceneName.SceneB_1TumamitaiKoma); //---------- // 監視 //---------- this.gameEngineTimer1.Start(); //---------- // 将棋エンジンが、コンソールの振りをします。 //---------- // // このメインパネルに、コンソールの振りをさせます。 // 将棋エンジンがあれば、将棋エンジンの入出力を返すように内部を改造してください。 // TextboxListener.SetTextboxListener(this.ReadLine1, this.WriteLine_Syuturyoku); //---------- // 画面の出力欄 //---------- // // 出力欄(上下段)を空っぽにします。 // this.WriteLine_Syuturyoku(""); this.ShogiGui.Response("Launch"); // これで、最初に見える画面の準備は終えました。 // あとは、操作者の入力を待ちます。 }