private void GetPlayerFromDatabase()
    {
        //Databaseden diğer oyuncuların anlık olaran position değerlerini almamızı sağlar.
        roomRef.Child("GameScene").GetValueAsync().ContinueWith(task =>
        {
            DataSnapshot snapshot = task.Result;
            if (snapshot.GetRawJsonValue() != null)
            {
                int i = 0;
                foreach (DataSnapshot ds in snapshot.Children)
                {
                    Player otherPlayer = JsonUtility.FromJson <Player>(ds.GetRawJsonValue());

                    //Eğer ki ilgili oyuncu aktif oyuncu ile aynı ID'ye sahipse bu oyuncuyu atla.
                    if (otherPlayer.userId == auth.CurrentUser.UserId)
                    {
                        continue;
                    }

                    Player.PlayerPosition otherPlayerTransform = JsonUtility.FromJson <Player.PlayerPosition>(ds.Child("Transform").GetRawJsonValue());

                    //otherPlayers GameObject dizisindeki prefabların position değerleri ilgili oyunculara göre güncellenir.
                    float x = otherPlayerTransform.position.x;
                    float y = otherPlayerTransform.position.y;
                    float z = otherPlayerTransform.position.z;
                    otherPlayers[i].transform.position = new Vector3(x, y, z);
                    i++;
                }
            }
        });
    }
    private void SendMeToDatabase()
    {
        //Aktif oyuncunun position bilgilerini Database'e göndermesini sağlar.
        Player.PlayerPosition myPosition = new Player.PlayerPosition();
        myPosition.position = player.position;
        roomRef.Child("GameScene").Child(auth.CurrentUser.UserId).Child("Transform").SetRawJsonValueAsync(JsonUtility.ToJson(myPosition));

        //Aktif oyuncunun bitiş noktasına olan mesafesini de Database'e gönderir. Böylelikle bu mesafelere göre anlık sıralama yapılır.
        GameSceneDistances myDistance = new GameSceneDistances();

        myDistance.nick     = DatabaseManager.nick;
        myDistance.distance = Vector3.Distance(player.position, finishObject.position);
        roomRef.Child("GameSceneDistances").Child(auth.CurrentUser.UserId).SetRawJsonValueAsync(JsonUtility.ToJson(myDistance));
    }
Exemple #3
0
        void PlayCountDownOver(Player player)
        {
            if (player.Position == Player.PlayerPosition.Self)
            {
//                player.SortCard(true, 0, 0);
//                TipsBt.isEnabled = false;
//                PassBt.isEnabled = false;
//                PlayBt.isEnabled = false;
//                player.IsTurn = false;
//                _currentTime = 0;
//                Players[1].IsTurn = true;
//                player.SelectedCards.Clear();
//                player.ReadyPlayCards.Clear();

//                var cardObjects = _gameController.AiPlay(player);
                var cardObjects = _gameController.AvdAi(player);
                if (cardObjects != null && cardObjects.Count > 0)
                {
                    player.PlayCards.Clear();
                    player.PlayCards.AddRange(cardObjects);
                    player.PlayedCards.AddRange(cardObjects);
                }
                player.PlayCard(cardObjects.ToArray());
                player.SortCard(true, 0, 0);

                TipsBt.isEnabled  = false;
                PassBt.isEnabled  = false;
                PlayBt.isEnabled  = false;
                player.IsTurn     = false;
                Players[1].IsTurn = true;
//                player.SelectedCards.Clear();
//                player.ReadyPlayCards.Clear();
                _currentTime = 0;
            }
            if (player.Position != Player.PlayerPosition.Self)
            {
                //测试
//                CardObject playerCard = player.Cards[player.Cards.Count - 1];
//                player.PlayCard(new[]{playerCard});

//                var cardObjects = _gameController.AiPlay(player);
                var cardObjects = _gameController.AvdAi(player);

                if (cardObjects != null && cardObjects.Count > 0)
                {
                    player.PlayCards.Clear();
                    player.PlayCards.AddRange(cardObjects);
                    player.PlayedCards.AddRange(cardObjects);
                }
                player.PlayCard(cardObjects.ToArray());

                player.SortCard(true, 0, 0);
                TipsBt.isEnabled = false;
                PassBt.isEnabled = false;
                PlayBt.isEnabled = false;
                player.IsTurn    = false;
                _currentTime     = 0;

                Player.PlayerPosition playerPosition = currentPlayer.Position + 1;
                int next = (int)playerPosition % Players.Count;
                Players[next].IsTurn = true;
            }
        }
Exemple #4
0
        private void CheckLoadLord()
        {
            bool isCalledT = true;

            foreach (Player player in Players)
            {
                isCalledT &= player.IsCalled;
            }
            if (isCalledT)
            {
                var s = calledList.Aggregate("", (current, player) => current + (" " + player.Position));
                Debug.Log(s);

                bool allNotCall = true;
                foreach (Player player in Players)
                {
                    allNotCall &= player.CallWeight == 1;
                }
                if (allNotCall)
                {
                    Debug.Log("没一个人叫,重开");
                }

                bool allCall = true;
                foreach (Player player in Players)
                {
                    allCall &= player.CallWeight == 2;
                }
                if (allCall && firstOne.IsCalled)
                {
                    Debug.Log("全叫地主了, 第一个再叫");
                    firstOne.IsCalled = false;
                }

                if (calledList.Count == 1)
                {
                    Debug.Log("只有一个人叫地主," + calledList[0].Position + "是地主");
                    calledList[0].IsLord = true;
                    _gameStatus          = GameStatus.GameGiveLandLordCard;
                }
                if (calledList.Count == 2)
                {
                    if (calledList[0].CallWeight == 2 && calledList[1].CallWeight == 2)
                    {
                        Debug.Log("2个人都叫了地主,让第一个人再叫");
                        calledList[0].IsCalled = false;
                    }
                    if (calledList[0].CallWeight == 3 && calledList[1].CallWeight == 2)
                    {
                        Debug.Log("2个人都叫了地主,第1个人没叫,第2个人是地主:" + calledList[1].Position);
                        calledList[1].IsLord = true;
                        _gameStatus          = GameStatus.GameGiveLandLordCard;
                    }
                }
                if (calledList.Count == 3)
                {
                    foreach (Player player in calledList)
                    {
                        Debug.Log(player.Position + ":" + player.CallWeight);
                    }
                    if (calledList[0].Position == Player.PlayerPosition.Self &&
                        calledList[1].Position == Player.PlayerPosition.Right &&
                        calledList[2].Position == Player.PlayerPosition.Left)
                    {
                        if (firstOne.IsCalled && calledList[2].CallWeight == 2 && calledList[1].CallWeight == 2 &&
                            calledList[0].CallWeight == 3)
                        {
                            Debug.Log("这里");
                            Debug.Log(calledList[2].Position + "是地主");
                            calledList[2].IsLord = true;
                            _gameStatus          = GameStatus.GameGiveLandLordCard;
                        }
                    }

                    int right, left;
                    int self = right = left = 0;
                    foreach (Player player in calledList)
                    {
                        switch (player.Position)
                        {
                        case Player.PlayerPosition.Self:
                            self++;
                            break;

                        case Player.PlayerPosition.Right:
                            right++;
                            break;

                        case Player.PlayerPosition.Left:
                            left++;
                            break;
                        }
                    }
                    if (self == 2)
                    {
                        Debug.Log("self是地主");
                        foreach (Player player in Players)
                        {
                            switch (player.Position)
                            {
                            case Player.PlayerPosition.Self:
                                player.IsLord = true;
                                _gameStatus   = GameStatus.GameGiveLandLordCard;
                                break;
                            }
                        }
                    }
                    if (right == 2)
                    {
                        Debug.Log("right是地主");
                        foreach (Player player in Players)
                        {
                            switch (player.Position)
                            {
                            case Player.PlayerPosition.Right:
                                player.IsLord = true;
                                _gameStatus   = GameStatus.GameGiveLandLordCard;
                                break;
                            }
                        }
                    }
                    if (left == 2)
                    {
                        Debug.Log("left是地主");
                        foreach (Player player in Players)
                        {
                            switch (player.Position)
                            {
                            case Player.PlayerPosition.Left:
                                player.IsLord = true;
                                _gameStatus   = GameStatus.GameGiveLandLordCard;
                                break;
                            }
                        }
                    }
                }
                if (calledList.Count == 4)
                {
                    int right, left;
                    int self = right = left = 0;
                    foreach (Player player in calledList)
                    {
                        switch (player.Position)
                        {
                        case Player.PlayerPosition.Self:
                            self++;
                            break;

                        case Player.PlayerPosition.Right:
                            right++;
                            break;

                        case Player.PlayerPosition.Left:
                            left++;
                            break;
                        }
                    }
                    if (self == 2)
                    {
                        Debug.Log("self是地主");
                        foreach (Player player in Players)
                        {
                            switch (player.Position)
                            {
                            case Player.PlayerPosition.Self:
                                player.IsLord = true;
                                _gameStatus   = GameStatus.GameGiveLandLordCard;
                                break;
                            }
                        }
                    }
                    if (right == 2)
                    {
                        Debug.Log("right是地主");
                        foreach (Player player in Players)
                        {
                            switch (player.Position)
                            {
                            case Player.PlayerPosition.Right:
                                player.IsLord = true;
                                _gameStatus   = GameStatus.GameGiveLandLordCard;
                                break;
                            }
                        }
                    }
                    if (left == 2)
                    {
                        Debug.Log("left是地主");
                        foreach (Player player in Players)
                        {
                            switch (player.Position)
                            {
                            case Player.PlayerPosition.Left:
                                player.IsLord = true;
                                _gameStatus   = GameStatus.GameGiveLandLordCard;
                                break;
                            }
                        }
                    }
                }
            }
            else
            {
                if (currentPlayer.IsCalled)
                {
                    Player.PlayerPosition playerPosition = currentPlayer.Position + 1;
                    int next = (int)playerPosition % Players.Count;
                    currentPlayer = Players[next];
                }
                else
                {
                    if (_currentTime == 0)
                    {
                        CallLandLord(currentPlayer);
                    }
                }
            }
        }
Exemple #5
0
        private void Update()
        {
            Debug.Log("当前状态:" + _gameStatus);
            switch (_gameStatus)
            {
            case GameStatus.GameNoStart:
                MenuButtons.gameObject.SetActive(true);
                GameButtons.gameObject.SetActive(false);
                break;

            case GameStatus.GameStart:
                //延迟执行
                InvokeRepeating("WaitForCardReady", 2, 1);
                break;

            case GameStatus.GameCall:
                PlayBt.isEnabled = false;
                TipsBt.isEnabled = false;
                PassBt.isEnabled = false;
                CheckLoadLord();
                break;

            case GameStatus.GameGiveLandLordCard:
                _textController.HideAllTexts();
                foreach (Player player in Players)
                {
                    if (player.IsLord)
                    {
                        Debug.Log(player.Position + "是地主");
                        _diZhuPlayer = player;
                    }
                }
                foreach (CardObject co in DiPaiList)
                {
                    co.ReverseCard();
                    CardObject instantiate = InstantiateCard(co.Card, table.transform, true);
                    _diZhuPlayer.AddCard(instantiate);
                }
                _diZhuPlayer.SortCard(true);
                _gameStatus          = GameStatus.Gaming;
                currentPlayer        = _diZhuPlayer;
                currentPlayer.IsTurn = true;
                break;

            case GameStatus.Gaming:
                Debug.Log("游戏开了");
                Debug.Log("该" + currentPlayer.Position + "出了");
                GameButtons.gameObject.SetActive(true);
                MenuButtons.gameObject.SetActive(false);
                CallLandLordBt.gameObject.SetActive(false);
                PassLandLordBt.gameObject.SetActive(false);

                if (currentPlayer.IsTurn && currentPlayer.Position == Player.PlayerPosition.Self)
                {
                    TipsBt.isEnabled = true;
                    PassBt.isEnabled = true;
                    PlayBt.isEnabled = true;
                }

                var playerId = Players.FindIndex(p => p.Position == currentPlayer.Position);
                int preId1;
                if (playerId - 1 < 0)
                {
                    preId1 = 2;
                }
                else
                {
                    preId1 = playerId - 1;
                }
                int preId2;
                if (preId1 - 1 < 0)
                {
                    preId2 = 2;
                }
                else
                {
                    preId2 = preId1 - 1;
                }
                Player preplayer1 = Players[preId1];
                Player preplayer2 = Players[preId2];

//                    //第一次出牌
//                    if (currentPlayer.ChuPaiCishu == 0 && preplayer1.ChuPaiCishu == 0 && preplayer2.ChuPaiCishu == 0) {
//                        TipsBt.isEnabled = false;
//                        PassBt.isEnabled = false;
//                        PlayBt.isEnabled = true;
//                    }
//                    //其他人都不要, 自己重出
//                    if (currentPlayer.ChuPaiCishu > 0 && preplayer1.ChuPaiCishu == -1 && preplayer2.ChuPaiCishu == -1) {
//                        TipsBt.isEnabled = true;
//                        PassBt.isEnabled = false;
//                        PlayBt.isEnabled = true;
//                    }
                if (currentPlayer.PlayedStatus == Player.PlayerStatus.Passed &&
                    preplayer1.PlayedStatus == Player.PlayerStatus.Passed &&
                    preplayer2.PlayedStatus == Player.PlayerStatus.Passed)
                {
                    TipsBt.isEnabled = false;
                    PassBt.isEnabled = false;
                    PlayBt.isEnabled = true;
                }
                if (currentPlayer.PlayedStatus == Player.PlayerStatus.Played &&
                    preplayer1.PlayedStatus == Player.PlayerStatus.Passed &&
                    preplayer2.PlayedStatus == Player.PlayerStatus.Passed)
                {
                    TipsBt.isEnabled = true;
                    PassBt.isEnabled = false;
                    PlayBt.isEnabled = true;
                }

                if (!currentPlayer.IsTurn)
                {
                    Player.PlayerPosition playerPosition = currentPlayer.Position + 1;
                    int next = (int)playerPosition % Players.Count;
                    currentPlayer = Players[next];
                }
                else
                {
                    if (_currentTime == 0)
                    {
                        PlayCard(currentPlayer);
                    }
                }
                break;
            }
        }