private void GameOver(eGameOverStatusCode i_eGameEndedStatusCode, CheckersMove i_LastMove) { GameOverEventArgs e = new GameOverEventArgs(); e.LastMove = i_LastMove; e.GameOverStatusCode = i_eGameEndedStatusCode; switch (i_eGameEndedStatusCode) { case eGameOverStatusCode.Draw: break; case eGameOverStatusCode.Player1Won: r_Player1.Score++; break; case eGameOverStatusCode.Player2Won: r_Player2.Score++; break; default: break; } m_Player1Turn = true; initializeBoard(); OnGameOver(e); }
public override bool Equals(object obj) { CheckersMove move = obj as CheckersMove; bool fieldsMatch = false; if (!(obj == null) && !((object)move == null)) { fieldsMatch = (m_fromRow == move.FromRow) && (m_fromCol == move.FromCol) && (m_toRow == move.ToRow) && (m_toCol == move.ToCol); } return(fieldsMatch); }
private bool isPerformeMove(int[] i_StartingLocation, int[] i_TargetLocation) { CheckersMove newMove = new CheckersMove(m_PlayerTurn, m_Opponent, m_GameBoard, i_StartingLocation, i_TargetLocation); bool isPerformeMove = newMove.IsPreformedMove(); if ((!(m_IsNeedToEatAgain = newMove.IsNeedToEatAgain) && isPerformeMove) || newMove.IsPieceBecomeKing) { m_CurrentTurnIndex++; } m_IsTie = isTieCondition(); m_IsWin = isPlayerWin(); return(isPerformeMove); }
private void BoardChanged(CheckersMove i_Move) { BoardChangeEventArgs e = new BoardChangeEventArgs(); e.CheckersMove = i_Move; e.DestSquareType = r_Board[i_Move.ToRow, i_Move.ToCol]; e.IsEatMove = isEatMove(i_Move); if (e.IsEatMove) { e.RowOfPieceRemoved = (i_Move.FromRow + i_Move.ToRow) / 2; e.ColOfPieceRemoved = (i_Move.FromCol + i_Move.ToCol) / 2; } OnBoardChange(e); }
private void checkIfGameEnded(Player i_PlayerThatActedNow, CheckersMove i_LastMove) { Player theOtherPlayer = i_PlayerThatActedNow == r_Player1 ? r_Player2 : r_Player1; if (GetLegalMoves(theOtherPlayer) == null) { if (GetLegalMoves(i_PlayerThatActedNow) == null) { GameOver(eGameOverStatusCode.Draw, i_LastMove); } else { GameOver( i_PlayerThatActedNow.Equals(r_Player1) ? eGameOverStatusCode.Player1Won : eGameOverStatusCode.Player2Won, i_LastMove); } } }
internal List <int> ChooseRandomMove(CheckersPlayer i_Player, CheckersPlayer i_Opponent, CheckersBoard i_GameBoard) { m_CurrentMove = new CheckersMove(i_Player, i_Opponent, i_GameBoard); m_CurrentMove.UpdateAllPlayerPieces(i_Player); List <int> choosenMove = null; bool mustEat = m_CurrentMove.IsPlayerMustEat(i_Player); List <CheckersPiece> playerPieces = i_Player.PlayerPieces; shuffle(playerPieces); foreach (CheckersPiece piece in playerPieces) { int randomLocation; choosenMove = new List <int> { piece.Location[0], piece.Location[1] }; if (mustEat) { if (piece.PossibleEatMoves.Any()) { randomLocation = m_Random.Next(piece.PossibleEatMoves.Count); choosenMove.Add(piece.PossibleEatMoves[randomLocation][0]); choosenMove.Add(piece.PossibleEatMoves[randomLocation][1]); break; } } else if (piece.PossibleSimpleMoves.Any()) { randomLocation = m_Random.Next(piece.PossibleSimpleMoves.Count); choosenMove.Add(piece.PossibleSimpleMoves[randomLocation][0]); choosenMove.Add(piece.PossibleSimpleMoves[randomLocation][1]); break; } } return(choosenMove); }
public eMoveStatusCode CheckIfMoveIsValid(CheckersMove i_Move) { Player playerThatPlaysNow = getPlayerThatPlaysNow(); List <CheckersMove> listOfMoves = GetLegalMoves(playerThatPlaysNow); eMoveStatusCode moveStatusCode = eMoveStatusCode.Successful; if (i_Move.FromRow < 0 || i_Move.FromRow >= r_BoardSize || i_Move.FromCol < 0 || i_Move.FromCol >= r_BoardSize) { moveStatusCode = eMoveStatusCode.InvalidPosition; } else if (r_Board[i_Move.FromRow, i_Move.FromCol] != playerThatPlaysNow.PieceSymbol && r_Board[i_Move.FromRow, i_Move.FromCol] != playerThatPlaysNow.KingSymbol) { moveStatusCode = eMoveStatusCode.InvalidPosition; } else if (isEatMove(listOfMoves[0]) && !isEatMove(i_Move.FromRow, i_Move.FromCol, i_Move.ToRow, i_Move.ToCol)) { moveStatusCode = eMoveStatusCode.MustEat; } else if (isEatMove(i_Move.FromRow, i_Move.FromCol, i_Move.ToRow, i_Move.ToCol)) { int r2 = (i_Move.FromRow + i_Move.ToRow) / 2; int c2 = (i_Move.FromCol + i_Move.ToCol) / 2; if (!canEat(playerThatPlaysNow, i_Move.FromRow, i_Move.FromCol, r2, c2, i_Move.ToRow, i_Move.ToCol)) { moveStatusCode = eMoveStatusCode.InvalidPosition; } } else { if (!checkRegularMove(playerThatPlaysNow, i_Move.FromRow, i_Move.FromCol, i_Move.ToRow, i_Move.ToCol)) { moveStatusCode = eMoveStatusCode.InvalidPosition; } } return(moveStatusCode); }
public bool DoMakeMove(CheckersMove i_Move) { Player playerThatPlaysNow = getPlayerThatPlaysNow(); bool hasMoreMoves = false; List <CheckersMove> moves; makeMove(playerThatPlaysNow, i_Move); if (isEatMove(i_Move) && (moves = getLegalMovesFrom(playerThatPlaysNow, i_Move.ToRow, i_Move.ToCol)) != null) { hasMoreMoves = true; } if (!hasMoreMoves) { m_Player1Turn = !m_Player1Turn; } BoardChanged(i_Move); checkIfGameEnded(playerThatPlaysNow, i_Move); return(hasMoreMoves); }
private void makeMove(Player i_Player, CheckersMove i_Move) { makeMove(i_Player, i_Move.FromRow, i_Move.FromCol, i_Move.ToRow, i_Move.ToCol); }
private bool isEatMove(CheckersMove i_Move) { return(isEatMove(i_Move.FromRow, i_Move.FromCol, i_Move.ToRow, i_Move.ToCol)); }