public bool FullRow(eSymbols i_PlayerSymbol) { int numberOfSymbolInRow = 0; bool thereIsFullRow = false; for (int i = 0; i < r_NumOfRows; ++i) { numberOfSymbolInRow = 0; for (int j = 0; j < r_NumOfCols; ++j) { if (Board[i, j].Value == i_PlayerSymbol) { numberOfSymbolInRow++; } } if (numberOfSymbolInRow == r_NumOfRows) { thereIsFullRow = true; break; } } return(thereIsFullRow); }
private void drawBoardLine(int i_BoardSize, int i_CurrentLineNumber) { char currentRowLetter = 'a'; StringBuilder lineStringBuilder = new StringBuilder(); currentRowLetter += (char)i_CurrentLineNumber; lineStringBuilder.Append(string.Format("{0}|", currentRowLetter)); for (int currentCol = 0; currentCol < i_BoardSize; currentCol++) { Coordinate currentCoordinate = new Coordinate(i_CurrentLineNumber, currentCol); eSymbols currentBoardSlotSymbol = m_GameEngine.GetBoardSquareSymbol(currentCoordinate); string currentBoardSlotCLISymbol = convertToCliSymbol(currentBoardSlotSymbol); if (currentBoardSlotSymbol == eSymbols.None) { lineStringBuilder.Append(" |"); } else { lineStringBuilder.Append(string.Format(" {0} |", currentBoardSlotCLISymbol)); } } Console.WriteLine(lineStringBuilder.ToString()); }
public bool FullColum(eSymbols i_PlayerSymbol) { int numberOfSymbolInColum = 0; bool thereIsFullColum = false; for (int i = 0; i < r_NumOfRows; ++i) { numberOfSymbolInColum = 0; for (int j = 0; j < r_NumOfCols; ++j) { if (Board[j, i].Value == i_PlayerSymbol) { numberOfSymbolInColum++; } } if (numberOfSymbolInColum == r_NumOfCols) { thereIsFullColum = true; break; } } return(thereIsFullColum); }
public bool CheckForKickOption(eSymbols i_PlayerSymbol, eSymbols i_PlayerSymbolKing, ePositionOnDesk i_PlayerPosition) { bool isKickOption = false; bool isMustKick = false; for (int i = 0; i < Size; i++) { for (int j = 0; j < Size; j++) { if (m_Desk[i, j] == i_PlayerSymbol || m_Desk[i, j] == i_PlayerSymbolKing) { isMustKick = CheckIfMustKick(i, j, i_PlayerPosition); if (isMustKick) { isKickOption = true; break; } } } if (isMustKick) { break; } } return(isKickOption); }
private void restartSoldiers() { int boardSize = r_GameEngine.GetBoardSize(); for (int i = 0; i < boardSize; i++) { for (int j = 0; j < boardSize; j++) { Coordinate currentCoordinate = new Coordinate(i, j); eSymbols symbol = r_GameEngine.GetBoardSquareSymbol(currentCoordinate); r_PictureBoxSoldiersMatrix[i, j] = null; if (symbol != eSymbols.None) { PictureBoxSoldier newPictureBoxSolider = new PictureBoxSoldier(symbol, currentCoordinate); newPictureBoxSolider.Click += soldier_Click; newPictureBoxSolider.AnimationFinished += soldier_AnimationFinished; Controls.Add(newPictureBoxSolider); r_PictureBoxSoldiersMatrix[i, j] = newPictureBoxSolider; newPictureBoxSolider.BringToFront(); } } } }
public PictureBoxSoldier(eSymbols i_Symbol, Coordinate i_Coordinate) : base(i_Coordinate) { m_Symbol = i_Symbol; BackColor = Color.Transparent; SetImage(); initTimers(); }
public void MakeMove(string i_Move, eSymbols i_Symbol, eSymbols i_SymbolKing, ePositionOnDesk i_Position) { string coordinates; int rowFrom; int rowTo; int colFrom; int colTo; if (int.TryParse(i_Move, out int temp)) { rowFrom = int.Parse(i_Move[0].ToString()); colFrom = int.Parse(i_Move[1].ToString()); rowTo = int.Parse(i_Move[2].ToString()); colTo = int.Parse(i_Move[3].ToString()); } else { coordinates = lettersToCoordinates(i_Move); rowFrom = int.Parse(coordinates[1].ToString()); colFrom = int.Parse(coordinates[0].ToString()); rowTo = int.Parse(coordinates[3].ToString()); colTo = int.Parse(coordinates[2].ToString()); } MakeMove(rowFrom, colFrom, rowTo, colTo, i_Symbol, i_SymbolKing, i_Position); }
public User(string i_Playername, int i_Number, eSymbols i_Symb, eSymbols i_KingSymb, GameDesk.ePositionOnDesk i_Position) { r_Name = i_Playername; r_PlayerNumber = i_Number; r_Symbol = i_Symb; r_SymbolKing = i_KingSymb; r_Position = i_Position; }
public ComputerDummy(string i_Name) { r_Name = i_Name; r_PlayerNumber = 2; r_Symbol = eSymbols.Player2; r_SymbolKing = eSymbols.Player2King; r_Position = GameDesk.ePositionOnDesk.UP; m_Rand = new Random(); m_LegalMoves = new List <Move>(); m_LastMove = new Move(); }
public Soldier(Player i_OwnerPlayer) { m_Symbol = i_OwnerPlayer.Symbol; m_OwnerPlayer = i_OwnerPlayer; if (m_Symbol == eSymbols.Black) { m_SoldierDirection = eSoldierDirection.Up; } else if (m_Symbol == eSymbols.White) { m_SoldierDirection = eSoldierDirection.Down; } }
public bool FullLeftDiagonal(eSymbols i_PlayerSymbol) { int numberOfSymbolInDiagonal = 0; for (int i = 0; i < r_NumOfRows; ++i) { if (Board[i, i].Value == i_PlayerSymbol) { numberOfSymbolInDiagonal++; } } return((numberOfSymbolInDiagonal == r_NumOfRows) ? true : false); }
public eSymbols GetBoardCellSymbol(Coordinate i_Coordinate) { eSymbols symbol = eSymbols.None; if (IsValidCoordinate(i_Coordinate)) { if (!IsEmptyCell(i_Coordinate)) { symbol = GetSoliderAt(i_Coordinate).Symbol; } } return(symbol); }
private void becomeKing() { if (!m_IsKing) { m_IsKing = true; m_SoldierDirection = eSoldierDirection.Both; if (m_Symbol == eSymbols.Black) { m_Symbol = eSymbols.K; } else if (m_Symbol == eSymbols.White) { m_Symbol = eSymbols.U; } } }
public bool FullRightDiagonal(eSymbols i_PlayerSymbol) { int numberOfSymbolInDiagonal = 0; int columIndex = r_NumOfCols - 1; for (int i = 0; i < r_NumOfRows; ++i) { if (Board[i, columIndex].Value == i_PlayerSymbol) { numberOfSymbolInDiagonal++; } columIndex--; } return((numberOfSymbolInDiagonal == r_NumOfRows) ? true : false); }
public void BecomeKing(eSymbols i_Symbol) { switch (i_Symbol) { case eSymbols.K: m_InitianlizedImage = Image.FromFile(@"..\..\Resources\checker black king.png"); m_MarkedRedImage = Image.FromFile(@"..\..\Resources\checker black king marked red.png"); break; case eSymbols.U: m_InitianlizedImage = Image.FromFile(@"..\..\Resources\checker white king.png"); m_MarkedRedImage = Image.FromFile(@"..\..\Resources\checker white king marked red.png"); break; } m_Symbol = i_Symbol; Image = m_InitianlizedImage; m_KingGrowingCounter = 0; r_BecomeKingTimer.Start(); }
public int calcPlayerPoints(eSymbols i_Symbol, eSymbols i_SymbolKing) { int points = 0; for (int i = 0; i < Size; i++) { for (int j = 0; j < Size; j++) { if (m_Desk[i, j] == i_Symbol) { ++points; } else if (m_Desk[i, j] == i_SymbolKing) { points += 4; } } } return(points); }
public bool CheckIfMoveIsLegal(string i_Move, eSymbols i_PlayerSymbol, eSymbols i_PlayerSymbolKing, ePositionOnDesk i_PlayerPosition) { bool isLegal = true; bool isMustKick = false; string coordinates; int rowFrom; int rowTo; int colFrom; int colTo; int distance; if (int.TryParse(i_Move, out int temp)) { rowFrom = int.Parse(i_Move[0].ToString()); colFrom = int.Parse(i_Move[1].ToString()); rowTo = int.Parse(i_Move[2].ToString()); colTo = int.Parse(i_Move[3].ToString()); } else { coordinates = lettersToCoordinates(i_Move); rowFrom = int.Parse(coordinates[1].ToString()); colFrom = int.Parse(coordinates[0].ToString()); rowTo = int.Parse(coordinates[3].ToString()); colTo = int.Parse(coordinates[2].ToString()); } if (((rowFrom + colFrom) % 2 == 0) || ((rowTo + colTo) % 2 == 0)) // checkers played only on cells with odd sum of row and column { isLegal = false; m_FailMessage = "Move is illegal!Wrong cell selected."; } else if (!checkCellIsCorrect(rowFrom, colFrom, rowTo, colTo, i_PlayerSymbol, i_PlayerSymbolKing)) { isLegal = false; m_FailMessage = "Move is illegal!Wrong cell selected."; } else if (!checkDirectionIsCorrect(rowFrom, colFrom, rowTo, colTo, i_PlayerPosition)) { isLegal = false; m_FailMessage = "Move is illegal!Wrong direction."; } if (isLegal) { distance = checkDistance(rowFrom, rowTo, colFrom, colTo, i_PlayerPosition); // distance between "from cell" to "To cell".3 kick enemy ,2 regular move. if (distance < 0) { isLegal = false; m_FailMessage = "Move is illegal!"; } else // check if we kick enemy checker or 3 step move { /*if distance 1 we know that cell is empty (we check that before) so its legal.*/ isMustKick = CheckForKickOption(i_PlayerSymbol, i_PlayerSymbolKing, i_PlayerPosition); if (distance == 1 && isMustKick) { isLegal = false; // beacause only if distance ==2 checker kicked m_FailMessage = "You must eat enemy checker!"; } else if (distance == 2) { isLegal = checkThreeCellMove(rowFrom, colFrom, rowTo, colTo, i_PlayerSymbol, i_PlayerSymbolKing, i_PlayerPosition); if (!isLegal) { m_FailMessage = "Move is illegal!"; } } } } return(isLegal); }
private bool checkThreeCellMove(int i_RowFrom, int i_ColFrom, int i_RowTo, int i_ColTo, eSymbols i_PlayerSymbol, eSymbols i_PlayerSymbolKing, ePositionOnDesk i_PlayerPosition) // check if three cell move i slegal { bool isLegal = true; if (m_Desk[i_RowFrom, i_ColFrom] == i_PlayerSymbol) // not king { if (i_PlayerPosition == ePositionOnDesk.DOWN && (i_ColTo > i_ColFrom)) // right side from "start move cell" { if (!((m_Desk[i_RowFrom - 1, i_ColFrom + 1] != eSymbols.EmptyCell) && (m_Desk[i_RowFrom - 1, i_ColFrom + 1] != i_PlayerSymbol) && (m_Desk[i_RowFrom - 1, i_ColFrom + 1] != i_PlayerSymbolKing))) // not enemy checker { isLegal = false; } } else if (i_PlayerPosition == ePositionOnDesk.DOWN && (i_ColTo < i_ColFrom)) // left side from "start move cell" { if (!((m_Desk[i_RowFrom - 1, i_ColFrom - 1] != eSymbols.EmptyCell) && (m_Desk[i_RowFrom - 1, i_ColFrom - 1] != i_PlayerSymbol) && (m_Desk[i_RowFrom - 1, i_ColFrom - 1] != i_PlayerSymbolKing))) // not enemy checker { isLegal = false; } } else if (i_PlayerPosition == ePositionOnDesk.UP && (i_ColTo > i_ColFrom)) // right side from "start move cell" { if (!((m_Desk[i_RowFrom + 1, i_ColFrom + 1] != eSymbols.EmptyCell) && (m_Desk[i_RowFrom + 1, i_ColFrom + 1] != i_PlayerSymbol) && (m_Desk[i_RowFrom + 1, i_ColFrom + 1] != i_PlayerSymbolKing))) // not enemy checker { isLegal = false; } } else if (i_PlayerPosition == ePositionOnDesk.DOWN && (i_ColTo < i_ColFrom)) // left side from "start move cell" { if (!((m_Desk[i_RowFrom + 1, i_ColFrom - 1] != eSymbols.EmptyCell) && (m_Desk[i_RowFrom + 1, i_ColFrom - 1] != i_PlayerSymbol) && (m_Desk[i_RowFrom + 1, i_ColFrom - 1] != i_PlayerSymbolKing))) // not enemy checker { isLegal = false; } } } else // king { if ((i_ColTo < i_ColFrom) && (i_RowTo < i_RowFrom)) // Up and left { if (!((m_Desk[i_RowFrom - 1, i_ColFrom - 1] != eSymbols.EmptyCell) && (m_Desk[i_RowFrom - 1, i_ColFrom - 1] != i_PlayerSymbol) && (m_Desk[i_RowFrom - 1, i_ColFrom - 1] != i_PlayerSymbolKing))) // not enemy checker { isLegal = false; } } else if ((i_ColTo < i_ColFrom) && (i_RowTo > i_RowFrom)) // Down and left { if (!((m_Desk[i_RowFrom + 1, i_ColFrom - 1] != eSymbols.EmptyCell) && (m_Desk[i_RowFrom + 1, i_ColFrom - 1] != i_PlayerSymbol) && (m_Desk[i_RowFrom + 1, i_ColFrom - 1] != i_PlayerSymbolKing))) // not enemy checker { isLegal = false; } } else if ((i_ColTo > i_ColFrom) && (i_RowTo < i_RowFrom)) // Up and right { if (!((m_Desk[i_RowFrom - 1, i_ColFrom + 1] != eSymbols.EmptyCell) && (m_Desk[i_RowFrom - 1, i_ColFrom + 1] != i_PlayerSymbol) && (m_Desk[i_RowFrom - 1, i_ColFrom + 1] != i_PlayerSymbolKing))) // not enemy checker { isLegal = false; } } else if ((i_ColTo > i_ColFrom) && (i_RowTo > i_RowFrom)) // Down and right { if (!((m_Desk[i_RowFrom + 1, i_ColFrom + 1] != eSymbols.EmptyCell) && (m_Desk[i_RowFrom + 1, i_ColFrom + 1] != i_PlayerSymbol) && (m_Desk[i_RowFrom + 1, i_ColFrom + 1] != i_PlayerSymbolKing))) // not enemy checker { isLegal = false; } } } return(isLegal); }
private bool checkCellIsCorrect(int i_RowFrom, int i_ColFrom, int i_RowTo, int i_ColTo, eSymbols i_PlayerSymbol, eSymbols i_PlayerSymbolKing) // celected cells are legal or not { bool isCorrect = true; if ((m_Desk[i_RowFrom, i_ColFrom] != i_PlayerSymbol) && (m_Desk[i_RowFrom, i_ColFrom] != i_PlayerSymbolKing)) { isCorrect = false; } if (isCorrect && (m_Desk[i_RowTo, i_ColTo] != eSymbols.EmptyCell)) { isCorrect = false; } return(isCorrect); }
private string checkForEnemyToKill(int i_StartRow, int i_StartCol, eSymbols i_EnemySymbol) // check for enemys around { StringBuilder enemyCoordinates = new StringBuilder(); eSymbols kingEnemySymbol; if (i_EnemySymbol == eSymbols.Player2) { kingEnemySymbol = eSymbols.Player2King; } else { kingEnemySymbol = eSymbols.Player1King; } /*Check for enemy checker near cell that move starts from*/ if (i_StartRow == 0) // Move starts in upper row { if (i_StartCol == (Size - 1)) // right upper corner { if (m_Desk[1, Size - 2] == i_EnemySymbol || m_Desk[1, Size - 2] == kingEnemySymbol) { enemyCoordinates.AppendFormat("{0}{1}", 1, Size - 2); } } else // upper row without corners { if (m_Desk[1, i_StartCol - 1] == i_EnemySymbol || m_Desk[1, i_StartCol - 1] == kingEnemySymbol) { enemyCoordinates.AppendFormat("{0}{1}", 1, i_StartCol - 1); } if (m_Desk[1, i_StartCol + 1] == i_EnemySymbol || m_Desk[1, i_StartCol + 1] == kingEnemySymbol) { enemyCoordinates.AppendFormat("{0}{1}", 1, i_StartCol + 1); } } } else if (i_StartRow == (Size - 1)) // Move starts in down row { if (i_StartCol == 0) // left down corner { if (m_Desk[Size - 2, 1] == i_EnemySymbol || m_Desk[Size - 2, 1] == kingEnemySymbol) { enemyCoordinates.AppendFormat("{0}{1}", Size - 2, 1); } } else // down row without corners { if (m_Desk[Size - 2, i_StartCol - 1] == i_EnemySymbol || m_Desk[Size - 2, i_StartCol - 1] == kingEnemySymbol) { enemyCoordinates.AppendFormat("{0}{1}", Size - 2, i_StartCol - 1); } if (m_Desk[Size - 2, i_StartCol + 1] == i_EnemySymbol || m_Desk[Size - 2, i_StartCol + 1] == kingEnemySymbol) { enemyCoordinates.AppendFormat("{0}{1}", Size - 2, i_StartCol + 1); } } } else if (i_StartCol == 0) // Move starts in left column no corners { if (m_Desk[i_StartRow - 1, 1] == i_EnemySymbol || m_Desk[i_StartRow - 1, 1] == kingEnemySymbol) { enemyCoordinates.AppendFormat("{0}{1}", i_StartRow - 1, 1); } if (m_Desk[i_StartRow + 1, 1] == i_EnemySymbol || m_Desk[i_StartRow + 1, 1] == kingEnemySymbol) { enemyCoordinates.AppendFormat("{0}{1}", i_StartRow + 1, 1); } } else if (i_StartCol == (Size - 1)) // Move starts in right column no corners { if (m_Desk[i_StartRow - 1, Size - 2] == i_EnemySymbol || m_Desk[i_StartRow - 1, Size - 2] == kingEnemySymbol) { enemyCoordinates.AppendFormat("{0}{1}", i_StartRow - 1, Size - 2); } if (m_Desk[i_StartRow + 1, Size - 2] == i_EnemySymbol || m_Desk[i_StartRow + 1, Size - 2] == kingEnemySymbol) { enemyCoordinates.AppendFormat("{0}{1}", i_StartRow + 1, Size - 2); } } else // move on middle of desk { if (m_Desk[i_StartRow - 1, i_StartCol - 1] == i_EnemySymbol || m_Desk[i_StartRow - 1, i_StartCol - 1] == kingEnemySymbol) { enemyCoordinates.AppendFormat("{0}{1}", i_StartRow - 1, i_StartCol - 1); } if (m_Desk[i_StartRow - 1, i_StartCol + 1] == i_EnemySymbol || m_Desk[i_StartRow - 1, i_StartCol + 1] == kingEnemySymbol) { enemyCoordinates.AppendFormat("{0}{1}", i_StartRow - 1, i_StartCol + 1); } if (m_Desk[i_StartRow + 1, i_StartCol - 1] == i_EnemySymbol || m_Desk[i_StartRow + 1, i_StartCol - 1] == kingEnemySymbol) { enemyCoordinates.AppendFormat("{0}{1}", i_StartRow + 1, i_StartCol - 1); } if (m_Desk[i_StartRow + 1, i_StartCol + 1] == i_EnemySymbol || m_Desk[i_StartRow + 1, i_StartCol + 1] == kingEnemySymbol) { enemyCoordinates.AppendFormat("{0}{1}", i_StartRow + 1, i_StartCol + 1); } } return(enemyCoordinates.ToString()); }
public void MakeMove(int i_RowFrom, int i_ColFrom, int i_RowTo, int i_ColTo, eSymbols i_Symbol, eSymbols i_SymbolKing, ePositionOnDesk i_Position) { int distance; bool isKing = false; if (m_Desk[i_RowFrom, i_ColFrom] == i_SymbolKing) { isKing = true; } distance = checkDistance(i_RowFrom, i_RowTo, i_ColFrom, i_ColTo, i_Position); if (distance == 1) // only move { Desk[i_RowFrom, i_ColFrom] = eSymbols.EmptyCell; if (i_RowTo == 0 || i_RowTo == (Size - 1)) { Desk[i_RowTo, i_ColTo] = i_SymbolKing; } else { if (isKing) { Desk[i_RowTo, i_ColTo] = i_SymbolKing; } else { Desk[i_RowTo, i_ColTo] = i_Symbol; } } } else // kick enemy checker { if (m_Desk[i_RowFrom, i_ColFrom] == i_SymbolKing) { m_Desk[i_RowTo, i_ColTo] = i_SymbolKing; } else { if (i_RowTo == 0 || i_RowTo == (Size - 1)) { Desk[i_RowTo, i_ColTo] = i_SymbolKing; } else { m_Desk[i_RowTo, i_ColTo] = i_Symbol; } } Desk[i_RowFrom, i_ColFrom] = eSymbols.EmptyCell; if (i_RowFrom < i_RowTo && i_ColFrom < i_ColTo) { Desk[i_RowFrom + 1, i_ColFrom + 1] = eSymbols.EmptyCell; } else if (i_RowFrom < i_RowTo && i_ColFrom > i_ColTo) { Desk[i_RowFrom + 1, i_ColFrom - 1] = eSymbols.EmptyCell; } else if (i_RowFrom > i_RowTo && i_ColFrom < i_ColTo) { Desk[i_RowFrom - 1, i_ColFrom + 1] = eSymbols.EmptyCell; } else if (i_RowFrom > i_RowTo && i_ColFrom > i_ColTo) { Desk[i_RowFrom - 1, i_ColFrom - 1] = eSymbols.EmptyCell; } } }
public BecameKingEvent(eSymbols i_Symbol, Coordinate i_SoldierCoordinate) { m_Symbol = i_Symbol; m_Coordinate = i_SoldierCoordinate; }
private string convertToCliSymbol(eSymbols i_Symbol) { return(i_Symbol == eSymbols.Black ? "X" : "O"); }
private void becomeKing(eSymbols i_Symbol, Coordinate i_Coordinate) { PictureBoxSoldier pictureboxSoldier = r_PictureBoxSoldiersMatrix[i_Coordinate.Row, i_Coordinate.Column]; pictureboxSoldier.BecomeKing(i_Symbol); }
public void SetCellValue(int i_Row, int i_Col, eSymbols i_Value) { m_Board[i_Row, i_Col].Value = i_Value; m_Board[i_Row, i_Col].Available = false; }