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)); }
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; } }
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); } } } }
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; } }