private void PlayerPrompt(IHanabiPlayer player, RequestPromptCard prompt) { player.Room.Prompt(player, prompt); }
public void DispatchRequest(IPlayer player, string message) { IHanabiPlayer hanabiPlayer = player as IHanabiPlayer; if (hanabiPlayer == null) { return; } Command command = JsonConvert.DeserializeObject <Command>(message); ActionType action = ( ActionType )Enum.Parse(typeof(ActionType), command.Action, false); switch (action) { case ActionType.EnterGame: { RequestEnterGame request = JsonConvert.DeserializeObject <RequestEnterGame>(command.Payload); PlayerEnterGame(hanabiPlayer, request); break; } case ActionType.ExitGame: { RequestExitGame request = JsonConvert.DeserializeObject <RequestExitGame>(command.Payload); PlayerExitGame(hanabiPlayer, request); break; } case ActionType.GetRoomList: { PlayerGetRoomList(hanabiPlayer); break; } case ActionType.JoinRoom: { RequestJoinRoom request = JsonConvert.DeserializeObject <RequestJoinRoom>(command.Payload); PlayerJoinRoom(hanabiPlayer, request); break; } case ActionType.QuitRoom: { RequestQuitRoom request = JsonConvert.DeserializeObject <RequestQuitRoom>(command.Payload); PlayerQuitRoom(hanabiPlayer, request); break; } case ActionType.Message: { // TODO: break; } case ActionType.Ready: { PlayerReady(hanabiPlayer); break; } case ActionType.PromptCard: { RequestPromptCard request = JsonConvert.DeserializeObject <RequestPromptCard>(command.Payload); PlayerPrompt(hanabiPlayer, request); break; } case ActionType.PlayCard: { RequestPlayCard request = JsonConvert.DeserializeObject <RequestPlayCard>(command.Payload); PlayerPlayCard(hanabiPlayer, request); break; } case ActionType.DiscardCard: { RequestDiscardCard request = JsonConvert.DeserializeObject <RequestDiscardCard>(command.Payload); PlayerDiscardCard(hanabiPlayer, request); break; } default: break; } }
/// <summary> /// 提示玩家卡牌資訊 /// </summary> /// <param name="player">行動的玩家</param> /// <param name="prompt">提示資訊</param> public void Prompt(IHanabiPlayer player, RequestPromptCard prompt) { if (!IsCurrentPlayer(player)) { ResponsePromptCard invalidResponse = new ResponsePromptCard(); invalidResponse.Result = PromptCardResult.InvalidTurn; invalidResponse.PromptInformation = prompt.PromptInformation; SendCommandToPlayer(player, ActionType.PromptCard, invalidResponse); return; } IHanabiPlayer targetPlayer = this.GetPlayer(prompt.Nickname); if (targetPlayer == null) { ResponsePromptCard invalidResponse = new ResponsePromptCard(); invalidResponse.Result = PromptCardResult.InvalidPlayer; invalidResponse.PromptInformation = prompt.PromptInformation; SendCommandToPlayer(player, ActionType.PromptCard, invalidResponse); return; } PromptCardResult result = PromptCardResult.InvalidPrompt; switch (prompt.PromptInformation) { case ( int )CardValueType.Value1: case ( int )CardValueType.Value2: case ( int )CardValueType.Value3: case ( int )CardValueType.Value4: case ( int )CardValueType.Value5: result = Rule.PromptCard(( CardValueType )prompt.PromptInformation, targetPlayer, Board); break; case ( int )CardColorType.Blue: case ( int )CardColorType.Green: case ( int )CardColorType.Yellow: case ( int )CardColorType.Red: case ( int )CardColorType.White: result = Rule.PromptCard(( CardColorType )prompt.PromptInformation, targetPlayer, Board); break; } if (result != PromptCardResult.Success) { ResponsePromptCard invalidResponse = new ResponsePromptCard(); invalidResponse.Result = result; invalidResponse.PromptInformation = prompt.PromptInformation; SendCommandToPlayer(player, ActionType.PromptCard, invalidResponse); return; } // 通知被提示玩家的命令 ResponsePromptCard notify = new ResponsePromptCard(); notify.Result = result; notify.Nickname = prompt.Nickname; notify.PromptInformation = prompt.PromptInformation; notify.Token = Board.Tokens.Info; // 通知其他玩家的命令 ResponsePromptCard response = new ResponsePromptCard(); response.Result = result; response.Nickname = prompt.Nickname; response.PromptInformation = prompt.PromptInformation; response.Token = Board.Tokens.Info; foreach (var handCard in targetPlayer.Cards) { CardInfo responseInfo = handCard.Info; response.Cards.Add(responseInfo); CardInfo notifyInfo = handCard.Info; notifyInfo.Color = ( int )CardColorType.Unknown; notifyInfo.Value = ( int )CardValueType.Unknown; notify.Cards.Add(notifyInfo); } foreach (var notifyPlayer in Players) { if (notifyPlayer == targetPlayer) { SendCommandToPlayer(notifyPlayer, ActionType.PromptCard, notify); } else { SendCommandToPlayer(notifyPlayer, ActionType.PromptCard, response); } } NextActivePlayer(); NotifyNextPlayer(); }