public void Compile() { // // 初回は、ダミーオブジェクトにプロパティが設定されています。 // その設定を使って、再作成します。 // this.this_object = new Shape_BtnMasuImpl( Util_Masu.OkibaSujiDanToMasu( this.Okiba, this.Suji, this.Dan ), this.Bounds.X, this.Bounds.Y, this.Bounds.Width, this.Bounds.Height ); }
/// <summary> /// 駒を動かします(1)。マウスボタンが押下されたとき。 /// /// 成る、成らない関連。 /// /// </summary> public static void Komamove1a_50Srv( out bool torareruKomaAri, out RO_Star_Koma koma_Food_after, Starlight dst, Finger btnTumandeiruKoma_Koma, RO_Star_Koma koma1, IRoomViewModel roomViewModel ) { Finger btnKoma_Food_Koma; torareruKomaAri = false; // 取られることになる駒のボタン btnKoma_Food_Koma = Util_Sky.Fingers_AtMasuNow(roomViewModel.GameViewModel.GuiSkyConst, koma1.Masu).ToFirst(); if (Fingers.Error_1 == btnKoma_Food_Koma) { koma_Food_after = null; btnKoma_Food_Koma = Fingers.Error_1; goto gt_EndBlock1; } //>>>>> 取る駒があったとき torareruKomaAri = true; PieceType koma_Food_pre_Syurui = Util_Koma.AsKoma(roomViewModel.GameViewModel.GuiSkyConst.StarlightIndexOf(btnKoma_Food_Koma).Now).Syurui; // その駒は、駒置き場に移動させます。 SyElement akiMasu; switch (koma1.Pside) { case Playerside.P2: akiMasu = KifuIO.GetKomadaiKomabukuroSpace(Okiba.Gote_Komadai, roomViewModel.GameViewModel.GuiSkyConst); if (Masu_Honshogi.Error != akiMasu) { // 駒台に空きスペースがありました。 //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> koma_Food_after = new RO_Star_Koma( Playerside.P2, akiMasu, //駒台へ KomaSyurui14Array.NarazuCaseHandle(koma_Food_pre_Syurui) ); } else { // エラー: 駒台に空きスペースがありませんでした。 //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> koma_Food_after = new RO_Star_Koma( Playerside.P2, Util_Masu.OkibaSujiDanToMasu( Okiba.Gote_Komadai, Util_Koma.CTRL_NOTHING_PROPERTY_SUJI, Util_Koma.CTRL_NOTHING_PROPERTY_DAN ), KomaSyurui14Array.NarazuCaseHandle(koma_Food_pre_Syurui) ); } break; case Playerside.P1: //thru default: akiMasu = KifuIO.GetKomadaiKomabukuroSpace(Okiba.Sente_Komadai, roomViewModel.GameViewModel.GuiSkyConst); if (Masu_Honshogi.Error != akiMasu) { // 駒台に空きスペースがありました。 //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> koma_Food_after = new RO_Star_Koma( Playerside.P1, akiMasu, //駒台へ KomaSyurui14Array.NarazuCaseHandle(koma_Food_pre_Syurui) ); } else { // エラー: 駒台に空きスペースがありませんでした。 //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> koma_Food_after = new RO_Star_Koma( Playerside.P1, Util_Masu.OkibaSujiDanToMasu( Okiba.Sente_Komadai, Util_Koma.CTRL_NOTHING_PROPERTY_SUJI, Util_Koma.CTRL_NOTHING_PROPERTY_DAN ), KomaSyurui14Array.NarazuCaseHandle(koma_Food_pre_Syurui) ); } break; } gt_EndBlock1: if (torareruKomaAri) { { SkyBuffer buffer_Sky1; // 取られる動き buffer_Sky1 = new SkyBuffer(roomViewModel.GameViewModel.GuiSkyConst); buffer_Sky1.AddOverwriteStarlight( btnKoma_Food_Koma, new RO_MotionlessStarlight( //btnKoma_Food_Koma, koma_Food_after ) ); roomViewModel.GameViewModel.SetGuiSky(new SkyConst(buffer_Sky1)); // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ // 棋譜は変更された。 // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ } //------------------------------ // 成りは解除。 //------------------------------ switch (Util_Masu.GetOkiba(koma_Food_after.Masu)) { case Okiba.Sente_Komadai: //thru case Okiba.Gote_Komadai: // 駒台へ移動しました //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> SkyBuffer buffer_Sky2 = new SkyBuffer(roomViewModel.GameViewModel.GuiSkyConst); buffer_Sky2.AddOverwriteStarlight( btnKoma_Food_Koma, new RO_MotionlessStarlight( //btnKoma_Food_Koma, koma_Food_after ) ); roomViewModel.GameViewModel.SetGuiSky(new SkyConst(buffer_Sky2)); // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ // 棋譜は変更された。 // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ break; } } SkyBuffer buffer_Sky = new SkyBuffer(roomViewModel.GameViewModel.GuiSkyConst); buffer_Sky.AddOverwriteStarlight(btnTumandeiruKoma_Koma, dst); roomViewModel.GameViewModel.SetGuiSky(new SkyConst(buffer_Sky)); // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ // 棋譜は変更された。 // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ }
/// <summary> /// 入力欄のテキストを取得します。 /// </summary> /// <returns></returns> public string ReadLine2() { int lastTesumi = Util_InServer.CountCurTesumi2(this.ShogiGui); SkyConst src_Sky = this.ShogiGui.GameViewModel.GuiSkyConst; //------------------------------------------------------------ // 表について //------------------------------------------------------------ // // 配列の添え字は次の通り。 // // 9 8 7 6 5 4 3 2 1 // ┌─┬─┬─┬─┬─┬─┬─┬─┬─┐ // │ 0│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ 8│一 // ├─┼─┼─┼─┼─┼─┼─┼─┼─┤ // │ 9│10│11│12│13│14│15│16│17│二 // ├─┼─┼─┼─┼─┼─┼─┼─┼─┤ // │18│19│20│21│22│23│24│25│26│三 // ├─┼─┼─┼─┼─┼─┼─┼─┼─┤ // │27│28│29│30│31│32│33│34│35│四 // ├─┼─┼─┼─┼─┼─┼─┼─┼─┤ // │36│37│38│39│40│41│42│43│44│五 // ├─┼─┼─┼─┼─┼─┼─┼─┼─┤ // │45│46│47│48│49│50│51│52│53│六 // ├─┼─┼─┼─┼─┼─┼─┼─┼─┤ // │54│55│56│57│58│59│60│61│62│七 // ├─┼─┼─┼─┼─┼─┼─┼─┼─┤ // │63│64│65│66│67│68│69│70│71│八 // ├─┼─┼─┼─┼─┼─┼─┼─┼─┤ // │72│73│74│75│76│77│78│79│80│九 // └─┴─┴─┴─┴─┴─┴─┴─┴─┘ //------------------------------------------------------------ // 先手駒について //------------------------------------------------------------ // 先手駒の位置を表にします。 bool[] wallSTable = new bool[Ui_PnlMain.NSQUARE]; // 先手駒の利きを表にします。 bool[] kikiSTable = new bool[Ui_PnlMain.NSQUARE]; Node <ShootingStarlightable, KyokumenWrapper> siteiNode = this.ShogiGui.GameViewModel.Kifu.NodeAt( this.ShogiGui.GameViewModel.Kifu.CountTesumi(KifuNarabe_KifuWrapper.CurNode(this.ShogiGui)) ); foreach (Finger figKoma in Util_Sky.Fingers_ByOkibaPsideNow(this.ShogiGui.GameViewModel.GuiSkyConst, Okiba.ShogiBan, Playerside.P1).Items) { Starlightable light = src_Sky.StarlightIndexOf(figKoma).Now; RO_Star_Koma koma = Util_Koma.AsKoma(light); int suji; Util_MasuNum.MasuToSuji(koma.Masu, out suji); int dan; Util_MasuNum.MasuToDan(koma.Masu, out dan); // 壁 wallSTable[(dan - 1) * 9 + (9 - suji)] = true; // 利き kikiSTable[(dan - 1) * 9 + (9 - suji)] = true;//FIXME:嘘 } //------------------------------------------------------------ // 後手駒について //------------------------------------------------------------ // 先手駒の位置を表にします。 bool[] wallGTable = new bool[Ui_PnlMain.NSQUARE]; // 先手駒の利きを表にします。 bool[] kikiGTable = new bool[Ui_PnlMain.NSQUARE]; foreach (Finger figKoma in Util_Sky.Fingers_ByOkibaPsideNow(this.ShogiGui.GameViewModel.GuiSkyConst, Okiba.ShogiBan, Playerside.P2).Items) { RO_Star_Koma koma = Util_Koma.AsKoma(src_Sky.StarlightIndexOf(figKoma).Now); int suji; Util_MasuNum.MasuToSuji(koma.Masu, out suji); int dan; Util_MasuNum.MasuToDan(koma.Masu, out dan); // 壁 wallGTable[(dan - 1) * 9 + (9 - suji)] = true; // 利き kikiGTable[(dan - 1) * 9 + (9 - suji)] = true;//FIXME:嘘 } string tuginoItte = "▲9九王嘘"; Fingers fingers = Util_Sky.Fingers_ByOkibaPsideNow(this.ShogiGui.GameViewModel.GuiSkyConst, Okiba.ShogiBan, this.ShogiGui.GameViewModel.Kifu.CountPside(KifuNarabe_KifuWrapper.CurNode(this.ShogiGui))); if (0 < fingers.Count) { ShootingStarlightable tuginoMoveData; Finger finger = fingers[LarabeRandom.Random.Next(fingers.Count)];//ランダムに1つ。 Starlight sl = src_Sky.StarlightIndexOf(finger); RO_Star_Koma koma = Util_Koma.AsKoma(sl.Now); Playerside pside_getTeban = this.ShogiGui.GameViewModel.Kifu.CountPside(lastTesumi); switch (pside_getTeban) { case Playerside.P2: { // 後手番です。 //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> int suji; Util_MasuNum.MasuToSuji(koma.Masu, out suji); int dan; Util_MasuNum.MasuToDan(koma.Masu, out dan); // 前に1つ突き出させます。 tuginoMoveData = new RO_ShootingStarlight( //sl.Finger, new RO_Star_Koma( pside_getTeban, Util_Masu.OkibaSujiDanToMasu( Util_Masu.GetOkiba(koma.Masu), suji, dan ), koma.Haiyaku ), new RO_Star_Koma( pside_getTeban, Util_Masu.OkibaSujiDanToMasu( Okiba.ShogiBan, suji, dan + 1 ), koma.Haiyaku ), PieceType.None ); break; } default: { // 先手番です。 //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> int suji; Util_MasuNum.MasuToSuji(koma.Masu, out suji); int dan; Util_MasuNum.MasuToDan(koma.Masu, out dan); // 前に1つ突き出させます。 tuginoMoveData = new RO_ShootingStarlight( //sl.Finger, new RO_Star_Koma( pside_getTeban, Util_Masu.OkibaSujiDanToMasu( Util_Masu.GetOkiba(koma.Masu), suji, dan ), koma.Haiyaku ), new RO_Star_Koma( pside_getTeban, Util_Masu.OkibaSujiDanToMasu( Okiba.ShogiBan, suji, dan - 1 ), koma.Haiyaku ), PieceType.None ); break; } } RO_Star_Koma koma2 = Util_Koma.AsKoma(tuginoMoveData.LongTimeAgo); FugoJ fugoJ = JFugoCreator15Array.ItemMethods[(int)Haiyaku184Array.Syurui(koma2.Haiyaku)](tuginoMoveData, new KyokumenWrapper(src_Sky));//「▲2二角成」なら、馬(dst)ではなくて角(src)。 tuginoItte = fugoJ.ToText_UseDou(KifuNarabe_KifuWrapper.CurNode(this.ShogiGui)); } return(tuginoItte); }