/// <summary> /// Deal card. /// </summary> /// <param name="host">The host.</param> /// <param name="data">Data received from client.</param> public static void DealCard(PirateHost host, PirateMessage data) { Contract.Requires(host != null && data != null && data.Head == PirateMessageHead.Xcrd); var player = PirateMessage.GetPlayerName(data); if(player == null) { return; } var pclient = host.PlayerFromString(player); if(pclient == null) { return; } var card = Card.FromString(data.Body); if(card == null) { return; } pclient.GetCard(card); Console.WriteLine("Host: Sending card " + card.ToShortString() + " to " + pclient); var msg = new PirateMessage(PirateMessageHead.Xcrd, card.ToString()); host.SendMessage(pclient, msg); if(host.Game.Round.CardsDealt == host.Game.Round.TotalCards) { RequestBets(host); } }
/// <summary> /// Play card from player. /// </summary> /// <param name="host">The host.</param> /// <param name="data">Data received from client.</param> public static void PlayCard(PirateHost host, PirateMessage data) { Contract.Requires(host != null && data != null && data.Head == PirateMessageHead.Pcrd); var playerName = PirateMessage.GetPlayerName(data); var player = host.PlayerFromString(playerName); var card = Card.FromString(data.Body); if(!player.CardPlayable(card, host.Game.Round.BoardCards.FirstCard)) { ErrorMessage(host, player, PirateError.CardNotPlayable); var returnCard = new PirateMessage(PirateMessageHead.Xcrd, card.ToString()); host.SendMessage(player, returnCard); RequestCard(host, player); return; } Console.WriteLine(player.Name + " plays " + card.ToShortString()); var msg = new PirateMessage( PirateMessageHead.Pcrd, PirateMessage.ConstructBody(player.ToString(), card.ToString())); foreach(var pclient in host.GetPlayers()) { host.SendMessage(pclient, msg); } player.PlayCard(card); //host.Game.Round.PlayCard(player, card); if(!host.Game.Round.Finished) { RequestCard(host, host.PlayerFromIndex(host.Game.Round.CurrentPlayer)); }else { host.Game.NewRound(); } }