コード例 #1
0
ファイル: Game.cs プロジェクト: litsungyi/Hanabi
        private void PlayerQuitRoom(IHanabiPlayer player, RequestQuitRoom request)
        {
            RoomInfo       roomInfo = new RoomInfo();
            QuitRoomResult result   = QuitRoomResult.Fail;

            if (player.RoomStatus != PlayerRoomStatus.Idle)
            {
                RoomIndexType roomIndex = new RoomIndexType(request.RoomIndex);
                if (Rooms.ContainsKey(roomIndex))
                {
                    Room room = Rooms[roomIndex];
                    room.Players.Remove(player);
                    roomInfo = room.Info;
                    player.OnQuitRoom();

                    if (room.Players.Count == 0)
                    {
                        room.Clear();
                    }
                    result = QuitRoomResult.Success;
                }
            }

            ResponseQuitRoom response = new ResponseQuitRoom();

            response.Result = result;
            response.Room   = roomInfo;

            SendCommand(player, ActionType.QuitRoom, response);
        }
コード例 #2
0
ファイル: Game.cs プロジェクト: litsungyi/Hanabi
        private void PlayerJoinRoom(IHanabiPlayer player, RequestJoinRoom request)
        {
            RoomInfo       roomInfo = new RoomInfo();
            JoinRoomResult result   = JoinRoomResult.Fail;

            if (player.RoomStatus == PlayerRoomStatus.Idle)
            {
                RoomIndexType roomIndex = new RoomIndexType(request.RoomIndex);
                if (Rooms.ContainsKey(roomIndex))
                {
                    Room room = Rooms[roomIndex];
                    if (room.Players.Count < room.Setting.MaxPlayers)
                    {
                        room.Players.Add(player);
                        roomInfo = room.Info;
                        player.OnJoinRoom(room);

                        result = JoinRoomResult.Success;
                    }
                }
            }

            ResponseJoinRoom response = new ResponseJoinRoom();

            response.Result = result;
            response.Room   = roomInfo;

            SendCommand(player, ActionType.JoinRoom, response);
        }
コード例 #3
0
ファイル: TestCommand.cs プロジェクト: litsungyi/Hanabi
        public void TestGame_JoinRoomFail()
        {
            NicknameType         nickname = new NicknameType("Caesar");
            Mock <IHanabiPlayer> player   = new Mock <IHanabiPlayer>();

            player.SetupGet <NicknameType>(x => x.nickname).Returns(nickname);

            RoomIndexType index = new RoomIndexType(0);

            player.Setup(x => x.OnEnterGame(nickname));
            int count = 0;

            player.Setup(x => x.SendCommand(It.IsAny <Command>()))
            .Callback <Command>(c =>
            {
                switch (++count)
                {
                case 1:
                    VerifyEnterGame(c, ExitGameResult.Success);
                    break;

                case 2:
                    VerifyJoinRoom(c, JoinRoomResult.Fail, 0);
                    break;
                }
            });

            GameNameType gameName = new GameNameType("Hanabi");
            Game         game     = new Game(gameName);

            PlayerEnter(game, player.Object, nickname);
            PlayerJoinRoom(game, player.Object, index);

            player.VerifyAll();
        }
コード例 #4
0
ファイル: TestCommand.cs プロジェクト: litsungyi/Hanabi
        public void TestGame_JoinRoomSuccess()
        {
            NicknameType         nickname1 = new NicknameType("Caesar");
            NicknameType         nickname2 = new NicknameType("Jenny");
            Mock <IHanabiPlayer> player1   = new Mock <IHanabiPlayer>();
            Mock <IHanabiPlayer> player2   = new Mock <IHanabiPlayer>();

            player1.SetupGet <NicknameType>(x => x.nickname).Returns(nickname1);
            player2.SetupGet <NicknameType>(x => x.nickname).Returns(nickname2);

            RoomIndexType index = new RoomIndexType(0);

            player1.Setup(x => x.OnEnterGame(nickname1));
            player1.Setup(x => x.OnJoinRoom(It.Is <Room>(r => r.RoomIndex == index)));
            int count1 = 0;

            player1.Setup(x => x.SendCommand(It.IsAny <Command>()))
            .Callback <Command>(c =>
            {
                switch (++count1)
                {
                case 1:
                    VerifyEnterGame(c, ExitGameResult.Success);
                    break;
                }
            });

            player2.Setup(x => x.OnEnterGame(nickname2));
            player2.Setup(x => x.OnJoinRoom(It.Is <Room>(r => r.RoomIndex == index)));
            int count2 = 0;

            player2.Setup(x => x.SendCommand(It.IsAny <Command>()))
            .Callback <Command>(c =>
            {
                switch (++count2)
                {
                case 1:
                    VerifyEnterGame(c, ExitGameResult.Success);
                    break;

                case 2:
                    VerifyJoinRoom(c, JoinRoomResult.Success, 2);
                    break;
                }
            });

            GameNameType gameName = new GameNameType("Hanabi");
            Game         game     = new Game(gameName);

            PlayerEnter(game, player1.Object, nickname1);

            PlayerEnter(game, player2.Object, nickname2);
            PlayerJoinRoom(game, player2.Object, index);

            player1.VerifyAll();
            player2.VerifyAll();
        }
コード例 #5
0
ファイル: Game.cs プロジェクト: litsungyi/Hanabi
        private void GameBegin(RoomIndexType roomIndex)
        {
            Room room = Rooms[roomIndex];

            if (room != null)
            {
                Status = GameStatus.Playing;

                room.BeginGame();
            }
        }
コード例 #6
0
ファイル: TestCommand.cs プロジェクト: litsungyi/Hanabi
        private void PlayerJoinRoom(Game game, IHanabiPlayer player, RoomIndexType roomIndex)
        {
            RequestJoinRoom request = new RequestJoinRoom();

            request.RoomIndex = roomIndex.Index;

            Command command = new Command();

            command.action  = ActionType.JoinRoom.ToString();
            command.payload = JsonConvert.SerializeObject(request);
            game.DispatchRequest(player, JsonConvert.SerializeObject(command));
        }