Пример #1
0
    public void NoDragonTile()
    {
        Administrator a  = new Administrator();
        Board         b  = new Board(new Vector2Int(6, 6));
        SPlayer       p1 = new SPlayer();
        SPlayer       p2 = new SPlayer();
        SPlayer       p3 = new SPlayer();

        b.AddNewPlayer(p1, new PlayerLocation(new Vector2Int(0, 0), 7));
        b.AddNewPlayer(p2, new PlayerLocation(new Vector2Int(0, 0), 4));
        b.AddNewPlayer(p3, new PlayerLocation(new Vector2Int(0, 0), 5));

        Debug.Assert(b.CurrentDeck.DragonTileHand == null, "No player has Dragon tile beforehand");

        Tile oldTile = p1.MyHand.RemoveFromHand(p1.MyHand.Pieces[1]);

        oldTile.SetCoordinate(new Vector2Int(0, 0));
        oldTile.SetRotation(Direction.DOWN);

        TurnOutput to = a.PlayATurn(b.CurrentDeck.Pieces, b.CurrentPlayersIn, b.CurrentPlayersOut, b, oldTile);

        Assert.AreEqual(2, to.PlayersOut.Count, "Two players were eliminated");
        Assert.AreEqual(1, to.PlayersIn.Count, "Players eliminated removed from Players in");
        Assert.False(to.ContinueGame, "Game end has been detected");
        Assert.IsNull(b.CurrentDeck.DragonTileHand, "No player has Dragon tile afterwards");
    }
Пример #2
0
    public void Play()
    {
        TurnOutput currentTurnStatus = new TurnOutput();

        currentTurnStatus.ContinueGame = true;
        int numTurns = 0;

        while (currentTurnStatus.ContinueGame)
        {
            SPlayer currentSPlayer = m_board.GetCurrentPlayer();

            Tile t = currentSPlayer.SelectTile(m_board, m_board.CurrentDeck.Pieces.Count);
            if (!LegalPlay(currentSPlayer, m_board, t))
            {
                currentSPlayer.KickPlayerReplaceAI();
                t = currentSPlayer.SelectTile(m_board, m_board.CurrentDeck.Pieces.Count);
            }

            t.SetCoordinate(currentSPlayer.Location.Coordinate);
            currentSPlayer.MyHand.RemoveFromHand(t);

            currentTurnStatus = PlayATurn(m_board.CurrentDeck.Pieces, m_board.CurrentPlayersIn,
                                          m_board.CurrentPlayersOut, m_board, t);
            currentSPlayer.MyPlayer.EndGame(currentTurnStatus.b, playerToColors(currentTurnStatus.PlayersIn));

            if (!LegalHand(currentSPlayer.MyHand, m_board))
            {
                currentSPlayer.KickPlayerReplaceAI();
            }
            m_board.AdvancePlayers();
        }
    }
Пример #3
0
    private TurnOutput getTurnOutput(Board b)
    {
        TurnOutput to = new TurnOutput();

        to.PlayersIn    = b.CurrentPlayersIn;
        to.PlayersOut   = b.CurrentPlayersOut;
        to.b            = b;
        to.DrawPile     = b.CurrentDeck.Pieces;
        to.ContinueGame = (to.PlayersIn.Count > 1);
        return(to);
    }
Пример #4
0
    TurnOutput PlayATurn(List <Tile> DrawPile, List <SPlayer> PlayersIn, List <SPlayer> PlayersOut, Board b, Tile PlacedTile)
    {
        TurnOutput to           = new TurnOutput();
        SPlayer    ActivePlayer = PlayersIn[0];

        foreach (SPlayer p in b.GetAdjacentPlayers(PlacedTile))
        {
            b.MovePlayer(p, PlacedTile);
        }
        b.CurrentDeck.DrawCard(ActivePlayer);
        to.DrawPile   = b.CurrentDeck.DrawDeck;
        to.PlayersIn  = b.CurrentPlayersIn;
        to.PlayersOut = b.CurrentPlayersOut;
        to.b          = b;
        Debug.Log(PlayersIn.Count);
        to.ContinueGame = (PlayersIn.Count > 1);
        return(to);
    }