idk why it works now, help
This commit is contained in:
90
Mau/Game.cs
90
Mau/Game.cs
@@ -1,90 +0,0 @@
|
||||
using System.Net.WebSockets;
|
||||
|
||||
namespace MauMau_Server.Mau;
|
||||
|
||||
public class Game
|
||||
{
|
||||
public readonly Deck Deck = new();
|
||||
public Card CurrentCard;
|
||||
public List<Player> Players = new();
|
||||
public Player CurrentPlayer;
|
||||
public int TurnDirection = 1;
|
||||
|
||||
public Game()
|
||||
{
|
||||
CurrentCard = Deck.DrawCard();
|
||||
Deck.AddCardToUsedDeck(CurrentCard);
|
||||
}
|
||||
|
||||
public void AddPlayerToGame(string playerId, WebSocket socket)
|
||||
{
|
||||
var player = new Player("Koetje " + playerId.Split('-')[0], playerId, socket)
|
||||
{
|
||||
Hand = Deck.DrawCards(8)
|
||||
};
|
||||
Players.Add(player);
|
||||
if (Players.Count == 1) CurrentPlayer = player;
|
||||
}
|
||||
|
||||
public void RemovePlayer(string playerId)
|
||||
{
|
||||
var player = GetPlayer(playerId);
|
||||
Players.Remove(player);
|
||||
}
|
||||
|
||||
public void PlayCard(string playerId, Card card)
|
||||
{
|
||||
var player = GetPlayer(playerId);
|
||||
if (CurrentPlayer != player) return;
|
||||
var hand = player.Hand;
|
||||
if (!IsCardInHand(hand, card) || !IsCardPlayable(CurrentCard, card)) return;
|
||||
Deck.AddCardToUsedDeck(card);
|
||||
hand.Remove(GetSameCardFromHand(hand, card));
|
||||
CurrentCard = card;
|
||||
CurrentPlayer = GetNextPlayer();
|
||||
}
|
||||
|
||||
public Player GetNextPlayer()
|
||||
{
|
||||
var index = Players.IndexOf(CurrentPlayer);
|
||||
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));
|
||||
}
|
||||
|
||||
private static Card GetSameCardFromHand(IEnumerable<Card> hand, Card card)
|
||||
{
|
||||
return hand.FirstOrDefault(handCard => IsSameCard(handCard, card));
|
||||
}
|
||||
|
||||
private static bool IsCardPlayable(Card currentCard, Card playedCard)
|
||||
{
|
||||
return IsSameCardType(currentCard, playedCard) || IsSameCardValue(currentCard, playedCard);
|
||||
}
|
||||
|
||||
private static bool IsCardInHand(IEnumerable<Card> hand, Card card)
|
||||
{
|
||||
return hand.Any(handCard => IsSameCard(handCard, card));
|
||||
}
|
||||
|
||||
private static bool IsSameCard(Card card1, Card card2)
|
||||
{
|
||||
return IsSameCardType(card1, card2) && IsSameCardValue(card1, card2);
|
||||
}
|
||||
|
||||
private static bool IsSameCardType(Card card1, Card card2)
|
||||
{
|
||||
return card1.CardType == card2.CardType;
|
||||
}
|
||||
|
||||
private static bool IsSameCardValue(Card card1, Card card2)
|
||||
{
|
||||
return card1.CardValue == card2.CardValue;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user