Not force closing all rooms may be a good idea

This commit is contained in:
2023-03-22 20:50:37 +01:00
parent 6baefc875b
commit 8debac4f70
4 changed files with 65 additions and 14 deletions

View File

@@ -33,7 +33,7 @@ public class Game
Players.Remove(player);
}
public void handleAction(string playerId, ActionDTO action)
public void HandleAction(string playerId, ActionDTO action)
{
var player = GetPlayer(playerId);
if (CurrentPlayer != player) return;
@@ -49,7 +49,6 @@ public class Game
DrawCard(player);
break;
}
}
private void PlayCard(Player player, Card card)
@@ -59,7 +58,46 @@ public class Game
Deck.AddCardToUsedDeck(card);
hand.Remove(GetSameCardFromHand(hand, card));
CurrentCard = card;
CurrentPlayer = GetNextPlayer();
HandleNextPlayer(card);
}
private void HandleNextPlayer(Card card)
{
switch (card.CardValue)
{
case CardValue.TWO:
{
var nextPlayer = GetNextPlayer();
var cardsToDraw = Deck.DrawCards(2);
foreach (var drawnCard in cardsToDraw)
{
nextPlayer.Hand.Add(drawnCard);
}
CurrentPlayer = GetNextPlayer(2);
break;
}
case CardValue.SEVEN:
case CardValue.KING:
break;
case CardValue.EIGHT:
CurrentPlayer = GetNextPlayer(2);
break;
case CardValue.ACE:
TurnDirection *= -1;
CurrentPlayer = GetNextPlayer();
break;
case CardValue.THREE:
case CardValue.FOUR:
case CardValue.FIVE:
case CardValue.SIX:
case CardValue.NINE:
case CardValue.TEN:
case CardValue.JACK:
case CardValue.QUEEN:
default:
CurrentPlayer = GetNextPlayer();
break;
}
}
private void DrawCard(Player player)
@@ -68,15 +106,19 @@ public class Game
CurrentPlayer = GetNextPlayer();
}
private Player GetNextPlayer()
private Player GetNextPlayer(int numberOfPlayers = 1)
{
var index = Players.IndexOf(CurrentPlayer);
index += TurnDirection;
if (index >= Players.Count) index = 0;
if (index < 0) index = Players.Count - 1;
for (var i = 0; i < numberOfPlayers; i++)
{
index += TurnDirection;
if (index >= Players.Count) index = 0;
if (index < 0) index = Players.Count - 1;
}
return Players[index];
}
public Player GetPlayer(string playerId)
{
return Players.FirstOrDefault(p => p.IsMe(playerId));