Esempio n. 1
0
    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
            });
        }
Esempio n. 3
0
    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);
        }
Esempio n. 7
0
 public List <Move> GetAllowedMoves(Piece piece, out bool isKill)
 {
     return(BoardMoves.GetAllowedMoves(Pieces, piece, GameManager.Instance.IsPlayerTurn, out isKill));
 }
Esempio n. 8
0
 public bool UpdateRequiredMoves(Piece piece)
 {
     RequiredMoves = BoardMoves.GetRequiredMoves(Pieces, piece, GameManager.Instance.IsPlayerTurn);
     return(RequiredMoves.Any());
 }
Esempio n. 9
0
 public void UpdateRequiredMoves()
 {
     RequiredMoves = BoardMoves.GetRequiredMoves(Pieces, GameManager.Instance.IsPlayerTurn);
 }