コード例 #1
0
    public StoneHandle Pop()
    {
        StoneHandle stone = Stones.Last();

        Stones.RemoveAt(Stones.Count - 1);
        return(stone);
    }
コード例 #2
0
    public void Push(StoneHandle stone)
    {
        float stackHeight = 0;

        foreach (StoneHandle child in Stones)
        {
            Bounds extent = child.GetComponent <Collider>().bounds;
            stackHeight = Mathf.Max(stackHeight, extent.extents.y + child.transform.position.y);
        }

        Stones.Add(stone);
        stone.transform.parent = this.transform;

        float stoneBottom = stone.GetComponent <Collider>().bounds.extents.y;

        stone.transform.localPosition = new Vector3(0, stackHeight + stoneBottom, 0);
    }
コード例 #3
0
ファイル: Match.cs プロジェクト: AnkeAnke/TakAdventures
    public void SetupGameFromBoardState(BoardState state)
    {
        PlayerReserves = new PlayerReserve[] { DarkPlayerReserve, LightPlayerReserve };

        GameState = state;
        BoardSize = state.BoardSize;

        // Setup player reserves.
        for (int player = 0; player < 2; ++player)
        {
            PlayerState playerState = GameState.GetPlayerState((Player)player);
            PlayerReserves[player].RandomSeed = 42;
            PlayerReserves[player].SetupGame(playerState);
        }

        Board.Clear();
        Board.SetupBoard();

        // Add stones to board.

        Random.InitState(42);
        for (int y = 0; y < BoardSize; ++y)
        {
            for (int x = 0; x < BoardSize; ++x)
            {
                StoneStack stones = GameState[x, y].GetReversed();
                while (stones.Count > 0)
                {
                    Stone stone = stones.Pop();
                    //StoneHandle newStone;
                    PlayerReserve owner      = PlayerReserves[(int)stone.Owner];
                    bool          isCapstone = (stone.Type == StoneType.Capstone);
                    StoneHandle   newStone   = Instantiate(isCapstone ? owner.Capstone : owner.Stone);
                    newStone.SetOwner(stone.Owner);

                    if (stone.Type == StoneType.StandingStone)
                    {
                        newStone.Flip();
                    }

                    Board[x, y].Push(newStone);
                }
            }
        }
    }