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(); }
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; } } }