Example #1
0
 private void Instance_HandleGamePacketEvent(DataHandler.EventManager.HandleGamePacketReceivedArgs e)
 {
     if (e.Data.startGame)
     {
         IndianPokerScreen.SetGameStart(e.Data);
     }
     else
     {
         this.IndianPokerScreen.IsExitGame = true;
         this.SetVisible(Screen.SelectedGame);
         MessageBox.Show("상대방이 게임에서 나갔습니다.");
     }
 }
        private void Instance_HandleGamePacketEvent(DataHandler.EventManager.HandleGamePacketReceivedArgs e)
        {
            ClientInfo clientInfo = clientManagement.ClientInfoDic[e.Data.clientID];

            if (e.Data.loadingComplete == true)
            {
                if (clientInfo.gameRoom == null)
                {
                    return;
                }
                //else if (clientInfo.GameRoomNumber == ) // 게임이 끝난 후, 5초 안에 매칭이 성사 될 경우 예외처리 해주어야 함.
                //return;

                // (1) 두 클라이언트가 로딩이 완료되면 게임 시작
                if (clientInfo.IsPlayGame == false)
                {
                    //게임이 완전히 끝나면 false로 바꿔주어야 함.
                    clientInfo.IsPlayGame = true;

                    //방법 1.
                    clientInfo.gamePlayer.isReadyForGame = true;

                    if (clientInfo.gameRoom.player1.isReadyForGame && clientInfo.gameRoom.player2.isReadyForGame)
                    {
                        clientInfo.gameRoom.SendGameStartMessage += new GameRoom.DelegateSendGameStartMessage(SendGameStartMessage);
                        clientInfo.gameRoom.SendPokerGameMessage += new GameRoom.DelegateSendPokerMessage(SendPokerGameMessage);
                        clientInfo.gameRoom.GameStart();
                    }

                    //방법 2.
                    #region
                    //결과는 같으나 의미하는 코드가 무엇이 더 정확한지 생각해봐야함.
                    //int playerIndex = clientInfo.gamePlayer.PlyaerIndex;
                    //switch (playerIndex)
                    //{
                    //    case 1:
                    //      gameRoomManager.GameRoomDic[clientInfo.gameRoom.gameRoomNumber].player1.isReadyForGame = true;
                    //      clientInfo.gameRoom.player1.isReadyForGame = true;
                    //    break;
                    //    case 2:
                    //      gameRoomManager.GameRoomDic[clientInfo.gameRoom.gameRoomNumber].player2.isReadyForGame = true;
                    //      clientInfo.gameRoom.player2.isReadyForGame = true;
                    //    break;
                    //}

                    //if (gameRoomManager.GameRoomDic[clientInfo.gameRoom.gameRoomNumber].player1.isReadyForGame &&
                    //    gameRoomManager.GameRoomDic[clientInfo.gameRoom.gameRoomNumber].player2.isReadyForGame)
                    //{
                    //    gameRoomManager.GameRoomDic[clientInfo.gameRoom.gameRoomNumber].SendGameStartMessage += new GameRoom.DelegateSendGameStartMessage(SendGameStartMessage);
                    //    gameRoomManager.GameRoomDic[clientInfo.gameRoom.gameRoomNumber].GameStart();
                    //}
                    #endregion

                    //방법 1-2 / 2-2.
                    #region
                    //Random random = new Random();

                    //IndianPokerGamePacket player1GamePacket = new IndianPokerGamePacket();
                    //player1GamePacket.startGame = true;
                    //player1GamePacket.playerTurn = player1.PlyaerIndex;
                    //player1GamePacket.card = (short)random.Next(CARDMINNUM, CARDMAXNUM);
                    //SendGameStartMessage(Header.Game, player1GamePacket, player1.owner);

                    //IndianPokerGamePacket player2GamePacket = new IndianPokerGamePacket();
                    //player2GamePacket.startGame = true;
                    //player2GamePacket.playerTurn = player1.PlyaerIndex;
                    //player2GamePacket.card = (short)random.Next(CARDMINNUM, CARDMAXNUM);
                    //SendGameStartMessage(Header.Game, player2GamePacket, player2.owner);
                    #endregion
                }

                // (2) 승/패 결과진행 후에 새로운 게임 시작
                else
                {
                    clientInfo.gamePlayer.isReadyForGame = true;

                    if (clientInfo.gameRoom.player1.isReadyForGame && clientInfo.gameRoom.player2.isReadyForGame)
                    {
                        clientInfo.gameRoom.GameStart();
                    }
                }
            }

            // (3) 한명의 클라이언트가 게임방에서 나올 시, 방파괴 및 게임 종료
            else if (clientInfo.IsPlayGame == true && e.Data.startGame == false)
            {
                clientInfo.gameRoom.EndGame(clientInfo.gamePlayer, e.Data);

                Dispatcher.BeginInvoke(new Action(() =>
                {
                    ListView_ClientListView.Items.Refresh();
                }));
            }
        }