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); } }
//相当于给引擎发出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(); }
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"); }
private void MenuFlipBoard_Click(object sender, EventArgs e) { MenuFlipBoard.Checked = !MenuFlipBoard.Checked; bFlipped = MenuFlipBoard.Checked; PanelBoard.BackgroundImage.RotateFlip(RotateFlipType.Rotate180FlipNone); PanelBoard.Refresh(); }
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(); }
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(); }
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(); }
private void MenuPasteFEN_Click(object sender, EventArgs e) { if (pos.FromFEN(Clipboard.GetText())) { PanelBoard.Refresh(); engine.FromFEN(Clipboard.GetText()); NewGameAsync(); } else { MessageBox.Show("不能识别的局面"); } }
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); } }
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; } } }
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; }
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; } } }
//-------------------------------------------------------------------------------- private void Awake() { sInstance = this; //Screen.SetResolution(1080, 1920, true); //Screen.SetResolution(Screen.width, Screen.width * 9 /16, true); }