private bool CheckForWin() { // Check if all pieces are owned by the current player var playerHasNoPiecesLeft = Board.Pieces.Cast <Piece>() .Where(piece => piece != null) .All(piece => piece.IsOwnedByPlayer == IsPlayerTurn); if (playerHasNoPiecesLeft) { return(true); } // Check if there is an enemy piece with a move left foreach (var piece in Board.Pieces) { if (piece == null || piece.IsOwnedByPlayer == IsPlayerTurn) { continue; } bool isKill; if (BoardMoves.GetAllowedMoves(Board.Pieces, piece, !IsPlayerTurn, out isKill).Any()) { return(false); } } return(true); }
private APIMsgConclusion handleSimulateMoveDelta(JSONObject jObj) { JSONObject jPlayer = jObj.GetField(Constants.JProtocol.player); JSONObject jEnemy = jObj.GetField(Constants.JProtocol.enemy); BoardMoves moves = parseBoardMoves(jObj); SnakePlayer p = new SnakePlayer() { x = (int)jPlayer.GetField(Constants.JProtocol.posX).i, y = (int)jPlayer.GetField(Constants.JProtocol.posY).i, dir = moves.playerMove }; SnakePlayer e = new SnakePlayer() { x = (int)jEnemy.GetField(Constants.JProtocol.posX).i, y = (int)jEnemy.GetField(Constants.JProtocol.posY).i, dir = moves.enemyMove }; Board b = new Board(new SnakePlayer[] { p, e }, false); b.playMove(new string[] { moves.playerMove, moves.enemyMove }); SimulatedMove temp = new SimulatedMove() { enemyMove = moves.enemyMove, playerMove = moves.playerMove, board = b }; string encodedBoards = SnakeProtocolEncoder.compressSimulatedMove(temp); return(new APIMsgConclusion() { status = ResponseStatus.Success, msg = encodedBoards, target = MsgTarget.Player }); }
public void DoTurnRandom() { var pieces = GameManager.Instance.Board.Pieces; var moves = new List <Move>(); var required = GameManager.Instance.Board.RequiredMoves; while (true) { Move move; if (required.Any()) { move = required[Random.Range(0, required.Count)]; } else { var killingMoves = new List <Move>(); foreach (var piece in pieces) { if (piece == null || piece.IsOwnedByPlayer) { continue; } bool isKill; var allowed = BoardMoves.GetAllowedMoves(pieces, piece, false, out isKill); if (isKill) { killingMoves.AddRange(allowed); } else { moves.AddRange(allowed); } } move = killingMoves.Any() ? killingMoves[Random.Range(0, killingMoves.Count)] : moves[Random.Range(0, moves.Count)]; } move.Execute(); if (!move.IsKill) { break; } if (GameManager.Instance.Board.UpdateRequiredMoves(move.Piece)) { required = GameManager.Instance.Board.RequiredMoves; continue; } break; } GameManager.Instance.EndTurn(); }
private APIMsgConclusion activateSimulateMove(JSONObject jObj, Func <Board, string, string, SimulatedMove> simMove) { JSONObject jBoard = jObj.GetField(Constants.JProtocol.board); Board startBoard = new Board(jBoard); BoardMoves moves = parseBoardMoves(jObj); SimulatedMove temp = simMove(startBoard, moves.playerMove, moves.enemyMove);//SnakeAPILogic.simulateMove(startBoard, moves.playerMove, moves.enemyMove, false); string encodedBoards = SnakeProtocolEncoder.compressSimulatedMove(temp); return(new APIMsgConclusion() { status = ResponseStatus.Success, msg = encodedBoards, target = MsgTarget.Player }); }
public List<BoardMoves> GetBoardMoves(int gameNo) { List<BoardMoves> bmList = new List<BoardMoves>(); SqlCommand com = new SqlCommand($"select * from boardmoves where gameno={gameNo}", getConnection()); SqlDataReader sqld = com.ExecuteReader(); while (sqld.Read()) { BoardMoves bm = new BoardMoves( Convert.ToInt32(sqld[0].ToString()), Convert.ToInt32(sqld[1].ToString()), Convert.ToInt32(sqld[2].ToString()), Convert.ToInt32(sqld[3].ToString())) ; bmList.Add(bm); } return bmList; }
private BoardMoves parseBoardMoves(JSONObject jObj) { BoardMoves m = new BoardMoves() { hasPlayerMove = jObj.HasField(Constants.JProtocol.playerMove), hasEnemyMove = jObj.HasField(Constants.JProtocol.enemyMove), }; if (m.hasPlayerMove) { m.playerMove = jObj.GetField(Constants.JProtocol.playerMove).str; } if (m.hasEnemyMove) { m.enemyMove = jObj.GetField(Constants.JProtocol.enemyMove).str; } return(m); }
public List <Move> GetAllowedMoves(Piece piece, out bool isKill) { return(BoardMoves.GetAllowedMoves(Pieces, piece, GameManager.Instance.IsPlayerTurn, out isKill)); }
public bool UpdateRequiredMoves(Piece piece) { RequiredMoves = BoardMoves.GetRequiredMoves(Pieces, piece, GameManager.Instance.IsPlayerTurn); return(RequiredMoves.Any()); }
public void UpdateRequiredMoves() { RequiredMoves = BoardMoves.GetRequiredMoves(Pieces, GameManager.Instance.IsPlayerTurn); }