Example #1
0
        private void MenuActivePositionTest_Click(object sender, EventArgs e)
        {
            App_inGame = false;
            string fen = @"2b1ka3/4aR3/4b1n2/9/1R7/4C4/9/4r4/4Ap2r/4KA3 b - - 0 2";

            pos.FromFEN(fen);
            engine.FromFEN(fen);
            PanelBoard.Refresh();
            Console.WriteLine("Check moves:");
            foreach (MOVE mv in engine.GetNextMove(1, 0))
            {
                Console.WriteLine(mv);
            }
            Console.WriteLine("--------------------------");
            Console.WriteLine("Capture moves:");
            foreach (MOVE mv in engine.GetNextMove(2, 0))
            {
                Console.WriteLine(mv);
            }
            Console.WriteLine("--------------------------");
            Console.WriteLine("Check + capture moves:");
            foreach (MOVE mv in engine.GetNextMove(3, 0))
            {
                Console.WriteLine(mv);
            }
        }
Example #2
0
        //相当于给引擎发出option newgame 指令
        private async void NewGameAsync()
        {
            //swap side
            if (MenuAIBlack.Checked)
            {
                MenuAIRed.Checked   = true;
                MenuAIBlack.Checked = false;
                bFlipped            = false;
            }
            else if (MenuAIRed.Checked)
            {
                MenuAIRed.Checked   = false;
                MenuAIBlack.Checked = true;
                bFlipped            = true;
            }
            FENStep   = 0;
            bSelected = false;
            ListboxMove.Items.Clear();
            ListboxMove.Items.Add("==开始==");
            MoveList.Clear();
            MoveList.Add(new MOVE());
            CommentList.Add("");
            PanelBoard.Refresh();
            App_inGame = true;

            await GoAsync();
        }
Example #3
0
        private void MenuEvaluate_Click(object sender, EventArgs e)
        {
            string fen = @"3aka3/1R7/4b4/4N4/9/5R3/2r6/4B4/3r5/3AK4 w - - 0 1";//钓鱼马2

            //@"C1baka3/3R1R3/4b1n2/9/9/9/9/9/4Kp2r/5A3 w - - 0 4";//双车胁仕2的中间
            //@"2b1ka3/1R2aR3/4b1n2/9/9/C8/9/4r4/4A1p1r/4KA3 w - - 0 1"; //双车胁士2
            //@"3a5/4ak3/9/3R5/5P3/r8/9/7C1/r2p5/4K4 w - - 0 1";//对面笑2
            //@"r4k3/9/9/9/9/4R4/9/9/9/4K4 w - - 0 1";//对面笑1

            if (pos.FromFEN(fen))
            {
                PanelBoard.Refresh();
                engine.FromFEN(fen);
                NewGameAsync();
            }
            else
            {
                MessageBox.Show("不能识别的局面");
            }
            //engine.GenMoveTest();
            //NewGameAsync();
            //int score = engine.SearchQuiesce(-5000, 4998, 10);
            //MessageBox.Show("静态搜索分数" + score + ",搜索节点" + engine.stat.QuiesceNodes);
            //WriteMap2Csv(pos.AttackMap, @"G:\xqtest\attack.csv");
            //WriteMap2Csv(pos.connectivityMap, @"G:\xqtest\connectivity.csv");
        }
Example #4
0
 private void MenuFlipBoard_Click(object sender, EventArgs e)
 {
     MenuFlipBoard.Checked = !MenuFlipBoard.Checked;
     bFlipped = MenuFlipBoard.Checked;
     PanelBoard.BackgroundImage.RotateFlip(RotateFlipType.Rotate180FlipNone);
     PanelBoard.Refresh();
 }
Example #5
0
 private void ListboxMove_SelectedIndexChanged(object sender, EventArgs e)
 {
     if (ListboxMove.SelectedIndex < 0)
     {
         return;
     }
     textBoxComment.Text = CommentList[ListboxMove.SelectedIndex];
     if (ListboxMove.SelectedIndex > FENStep)
     {
         for (int i = FENStep; i < ListboxMove.SelectedIndex; i++)
         {
             pos.MakeMove(MoveList[i]);
         }
     }
     else
     {
         for (int i = FENStep; i > ListboxMove.SelectedIndex; i--)
         {
             pos.UnmakeMove();
         }
     }
     FENStep = ListboxMove.SelectedIndex;
     if (FENStep > 0)
     {
         ptLastFrom = POSITION.UI_Coord2XY(MoveList[ListboxMove.SelectedIndex - 1].sqSrc, bFlipped);
         ptLastTo   = POSITION.UI_Coord2XY(MoveList[ListboxMove.SelectedIndex - 1].sqDst, bFlipped);
     }
     PanelBoard.Refresh();
 }
Example #6
0
        public void InitlizeGame()
        {
            for (int x = 0; x < 4; x++)
            {
                for (int y = 0; y < 4; y++)
                {
                    PictureBox GamePicture = new PictureBox();
                    GamePicture.Location    = new Point(75 * y + 6, 75 * x + 6); //間距空間
                    GamePicture.Size        = new Size(70, 70);
                    GamePicture.BorderStyle = BorderStyle.FixedSingle;
                    GamePicture.SizeMode    = PictureBoxSizeMode.StretchImage;
                    GamePicture.BackColor   = Color.Gray;
                    GamePictureArray[x, y]  = GamePicture;         //標記轉換二維轉換一維
                    PanelBoard.Controls.Add(GamePicture);
                }
            }

            for (int x = 0; x < 4; x++)
            {
                for (int y = 0; y < 4; y++)
                {
                    BlockNumber[x, y] = BlankState;
                }
            }
            PanelBoard.SendToBack();
            KeyboradEnable = true;
            CreatImage();
            CreatImage();
        }
Example #7
0
        private void MenuGenMoves_Click(object sender, EventArgs e)
        {
            App_inGame = false;
            string fen = @"2b1ka3/1R2aR2r/C3b1n2/9/9/9/9/4r4/4A1p2/4KA3 w - - 0 2";

            pos.FromFEN(fen);
            engine.FromFEN(fen);
            PanelBoard.Refresh();
            engine.GenMoveTest();
        }
Example #8
0
 private void MenuPasteFEN_Click(object sender, EventArgs e)
 {
     if (pos.FromFEN(Clipboard.GetText()))
     {
         PanelBoard.Refresh();
         engine.FromFEN(Clipboard.GetText());
         NewGameAsync();
     }
     else
     {
         MessageBox.Show("不能识别的局面");
     }
 }
Example #9
0
        public int PanelBoard(PanelBoardModel panelBoardModel)
        {
            using (var context = new INVENTORYEntities())
            {
                PanelBoard panelBoard = new PanelBoard();


                panelBoard.location    = panelBoardModel.Location;
                panelBoard.itemname    = panelBoardModel.ItemName;
                panelBoard.SubLocation = panelBoardModel.SubLocation;

                panelBoard.capacity    = panelBoardModel.Capacity;
                panelBoard.make        = panelBoardModel.Make;
                panelBoard.qty         = panelBoardModel.Quantity;
                panelBoard.status      = panelBoardModel.Status;
                panelBoard.discription = panelBoardModel.Description;
                panelBoard.UserName    = UserNameSessionData;
                context.PanelBoard.Add(panelBoard);
                context.SaveChanges();
                return(panelBoard.itemcode);
            }
        }
Example #10
0
        void MakeMove(int sqFrom, int sqTo)
        {
            Graphics g = PanelBoard.CreateGraphics();

            if (pos.IsLegalMove(sqFrom, sqTo))
            {
                int  pcCaptured = pos.pcSquares[sqTo];
                MOVE step       = new MOVE(sqFrom, sqTo, pos.pcSquares[sqFrom], pcCaptured);
                pos.MakeMove(step);
                if (pos.CheckedBy(1 - pos.sdPlayer) > 0)
                {
                    PlaySound("ILLEGAL");
                    pos.UnmakeMove();
                    return;
                }
                engine.MakeMove(step);
                MoveList.Add(step);
                CommentList.Add(textBoxComment.Text);

                if (FENStep > 0)
                {
                    //擦除上一步的起始和结束位置选择框
                    DrawBoard(ptLastFrom, g);
                    DrawBoard(ptLastTo, g);
                    DrawPiece(ptLastTo, pcLast, g);
                }

                ptLastFrom = POSITION.UI_Coord2XY(sqFrom, bFlipped);
                ptLastTo   = POSITION.UI_Coord2XY(sqTo, bFlipped);
                pcLast     = cnPieceImages[step.pcSrc];

                //擦除原来的位置
                DrawBoard(ptLastFrom, g);
                DrawSelection(ptLastFrom, g);
                //移动到新位置
                DrawSelection(ptLastTo, g);
                DrawPiece(ptLastTo, pcLast, g);
                bSelected = false;

                FENStep++;
                string label = step.ToString();
                if (FENStep % 2 == 1)
                {
                    label = ((FENStep / 2 + 1).ToString() + "." + label);
                }
                label = label.PadLeft(8);
                ListboxMove.Items.Add(label);
                if (pos.pcSquares[sqTo] > 0)
                {
                    PlaySound("CAPTURE");
                }
                else
                {
                    PlaySound("MOVE");
                }

                if (pos.IsMate())
                {//直接吃王或者绝杀
                    if (pos.sdPlayer == 1 && MenuAIBlack.Checked && !MenuAIRed.Checked ||
                        pos.sdPlayer == 0 && MenuAIRed.Checked && !MenuAIBlack.Checked)
                    {
                        PlaySound("WIN");
                    }
                    else if (pos.sdPlayer == 1 && !MenuAIBlack.Checked && MenuAIRed.Checked ||
                             pos.sdPlayer == 0 && !MenuAIRed.Checked && MenuAIBlack.Checked)
                    {
                        PlaySound("LOSS");
                    }
                    if (pos.sdPlayer == 0)
                    {
                        MessageBox.Show("黑方胜!");
                    }
                    else
                    {
                        MessageBox.Show("红方胜!");
                    }
                    App_inGame = false;
                }
            }
        }
Example #11
0
        private void MenuOpen_Click(object sender, EventArgs e)
        {
            PgnFileStruct PGN;

            if (openPGNDialog.ShowDialog() == DialogResult.OK)
            {
                PGN         = pos.ReadPgnFile(openPGNDialog.FileName);
                MoveList    = PGN.MoveList;
                CommentList = PGN.CommentList;
            }
            else
            {
                return;
            }
            labelEvent.Text = PGN.Event;
            string result;

            switch (PGN.Result)
            {
            case "1-0":
                result = "胜";
                break;

            case "0-1":
                result = "负";
                break;

            case "1/2-1/2":
                result = "和";
                break;

            default:
                result = "*";
                break;
            }
            StringBuilder sb = new StringBuilder();

            sb.Append(PGN.RedTeam);
            sb.Append(' ');
            sb.Append(PGN.Red);
            sb.Append(" (先");
            sb.Append(result);
            sb.Append(") ");
            sb.Append(PGN.BlackTeam);
            sb.Append(' ');
            sb.Append(PGN.Black);
            labelPlayer.Text   = sb.ToString();
            labelDateSite.Text = PGN.Date + " 弈于 " + PGN.Site;


            ListboxMove.Items.Clear();

            if (string.IsNullOrEmpty(CommentList[0]))
            {
                ListboxMove.Items.Add("==开始==");
            }
            else
            {
                ListboxMove.Items.Add("==开始==*");
            }

            for (FENStep = 0; FENStep < MoveList.Count; FENStep++)
            {
                MOVE   step  = MoveList[FENStep];
                string label = step.ToString();
                if (FENStep % 2 == 0)
                {
                    label = ((FENStep / 2 + 1).ToString() + "." + label);
                }
                label = label.PadLeft(8);
                if (!string.IsNullOrEmpty(CommentList[FENStep + 1]))
                {
                    label += "*";
                }
                ListboxMove.Items.Add(label);
            }
            pos.FromFEN(PGN.StartFEN);
            engine.FromFEN(PGN.StartFEN);
            FENStep = 0;
            ListboxMove.SelectedIndex = 0;
            PanelBoard.Refresh();
            App_inGame = false;
        }
Example #12
0
        private async void PanelBoard_MouseClick(object sender, MouseEventArgs e)
        {
            if (!App_inGame)
            {
                return;
            }
            int x = e.X / gridSize;
            int y = e.Y / gridSize;

            if (x < 0 || x > 9 || y < 0 || y > 10)
            {
                return;
            }
            int piece;

            if (bFlipped)
            {
                piece = pos.UI_GetFlippedPiece(x, y);
            }
            else
            {
                piece = pos.UI_GetPiece(x, y);
            }

            Graphics g = PanelBoard.CreateGraphics();

            if (bSelected)
            {
                if (POSITION.SIDE(piece) == pos.sdPlayer && ptSelected != new Point(x, y))
                {
                    //又选择别的己方子
                    DrawBoard(ptSelected, g);
                    DrawPiece(ptSelected, pcSelected, g);
                    ptSelected = new Point(x, y);
                    pcSelected = cnPieceImages[piece];
                    DrawSelection(ptSelected, g);
                    PlaySound("CLICK");
                }
                else
                {
                    int sqFrom, sqTo;
                    if (bFlipped)
                    {
                        sqFrom = POSITION.UI_XY2Coord(8 - ptSelected.X, 9 - ptSelected.Y);
                        sqTo   = POSITION.UI_XY2Coord(8 - x, 9 - y);
                    }
                    else
                    {
                        sqFrom = POSITION.UI_XY2Coord(ptSelected.X, ptSelected.Y);
                        sqTo   = POSITION.UI_XY2Coord(x, y);
                    }
                    MakeMove(sqFrom, sqTo);
                    await GoAsync();
                }
            }
            else if (POSITION.SIDE(piece) == pos.sdPlayer)
            {
                if (pos.sdPlayer == 0 && !MenuAIRed.Checked || pos.sdPlayer == 1 && !MenuAIBlack.Checked)
                {
                    ptSelected = new Point(x, y);
                    pcSelected = cnPieceImages[piece];
                    DrawSelection(ptSelected, g);
                    bSelected = true;
                }
            }
        }
Example #13
0
 //--------------------------------------------------------------------------------
 private void Awake()
 {
     sInstance = this;
     //Screen.SetResolution(1080, 1920, true);
     //Screen.SetResolution(Screen.width, Screen.width * 9 /16, true);
 }