// // Main move function // internal void MovePiece(object sender, MouseEventArgs e, bool attack = false) { isCheck = false; // // Get vars + Positions // PictureBox box = (PictureBox)sender; TableLayoutPanelCellPosition pos = playBoard.GetPositionFromControl(box); TableLayoutPanelCellPosition selpos = selectedPiece.pos; // // Passant check before move // bool ep = false; if (box.Name.Contains("DEL") && selectedPiece.pieceRank == Rank.PAWN && pos.Column != selpos.Column) { ep = true; attack = true; playBoard.Controls.Remove (playBoard.GetControlFromPosition (pos.Column, selpos.Row)); } // // Move the piece. // playBoard.Controls.Remove(box); playBoard.Controls.Add(selectedPiece.box, pos.Column, pos.Row); // // Pawn checks // foreach (ChessPiece pc in Calcs.pieces) { if (pc.isWhite == selectedPiece.isWhite) { pc.PassElig = false; } } if (selectedPiece.pieceRank == Rank.PAWN) { if (Math.Abs(selpos.Row - pos.Row) == 2) { selectedPiece.PassElig = true; } selectedPiece.canDouble = false; if (selectedPiece.CheckPromote()) { promPiece = selectedPiece; Spr = selectedPiece.isWhite ? WPr : BPr; foreach (Button b in Spr) { b.Visible = true; } notifBoard.Visible = true; } } // // Remove temp boxes // ClearTempBoxes(); // // Change turn text // whiteTurn = !whiteTurn; if (whiteTurn) { turnbox.Text = "WHITE"; } else { turnbox.Text = "BLACK"; } isMoving = false; // // Get check // List <ChessPiece> isCheckL = Calcs.CheckCheck(whiteTurn); checkingPieces = isCheckL; bool isCheckB = isCheckL.Count != 0; isCheck = isCheckB; // // Get CM // bool ifMoves = Calcs.NMCheck(whiteTurn, isCheckL); if (!ifMoves) { // Game is over isOver = true; notifBoard.Visible = true; winText.Visible = true; turnbox.Visible = false; turntext.Visible = false; replay.Visible = true; // Find Checkmate/Stalemate if (isCheckB) { winText.Text = whiteTurn ? "BLACK WINS!" : "WHITE WINS!"; } else { winText.Text = "STALEMATE!"; } } // Update moves string[] lines = GetMoveText(attack, selpos, selectedPiece, isCheckB, !ifMoves, ep); List <string> boxLines = moves.Lines.ToList(); if (boxLines.Count != 0) { string last = boxLines[boxLines.Count - 1]; if (!last.Contains(' ')) { last += (' ' + lines[0]); boxLines[boxLines.Count - 1] = last; } else { boxLines = boxLines.Concat(lines).ToList(); } moves.Lines = boxLines.ToArray(); } else { moves.Lines = lines; } // // Clear selected piece // selectedPiece = null; }