public void PlayCard(Player player, Card card) { // move card to Skat if (GamePlayer == player && SkatTaken && !GameStarted) { if (Skat.Count < 2) { player.Cards.Remove(card); Skat.Add(card); } } else if (GameStarted && CurrentPlayer == player) { if (Stitch.Count == 3) { CollectStitch(player); if (player.Cards.Count == 0) { return; // game ended } } if (IsValidForStitch(card)) { player.Cards.Remove(card); CurrentPlayer = GetNextPlayer(player); Stitch.Add(card); if (Stitch.Count == 3) { var stichPlayer = GetStitchPlayer(); stichPlayer.Stitches.AddRange(Stitch); CurrentPlayer = stichPlayer; } } } }
public void GiveUp() { // add all cards on the game player's hand to the stitch of one opponent player Player opponentPlayer = null; foreach (var p in Players) { if (p != GamePlayer && opponentPlayer == null) { opponentPlayer = p; p.Stitches.AddRange(GamePlayer.Cards); p.Stitches.AddRange(GamePlayer.Stitches); p.Stitches.AddRange(p.Cards); p.Stitches.AddRange(Skat); p.Stitches.AddRange(Stitch); p.Cards.Clear(); GamePlayer.Cards.Clear(); GamePlayer.Stitches.Clear(); Skat.Clear(); Stitch.Clear(); } else if (p != GamePlayer && opponentPlayer != null) { opponentPlayer.Stitches.AddRange(p.Cards); p.Cards.Clear(); } } var game = GamePlayer.Game; GameValue = game.GetGameValue(MatadorsJackStraight, GamePlayer.Stitches, Skat, CurrentBidValue, true); GamePlayer.Score += GameValue.Score; }
public SkatTable(string player1, string player2, string player3, string player4 = null) { if (player4 != null) { Players.Add(new Player(player1, PlayerPosition.Forehand)); Players.Add(new Player(player2, PlayerPosition.Middlehand)); Players.Add(new Player(player3, PlayerPosition.Rearhand)); InactivePlayer = new Player(player4, PlayerPosition.Inactive); TablePlayers.Add(InactivePlayer); TablePlayers.AddRange(Players); } else { Players.Add(new Player(player1, PlayerPosition.Rearhand)); Players.Add(new Player(player2, PlayerPosition.Forehand)); Players.Add(new Player(player3, PlayerPosition.Middlehand)); TablePlayers.AddRange(Players); } SkatResult = new SkatResult(); CurrentHistory = new GameHistory(); var deck = Card.GenerateDeck(); foreach (var player in Players) { player.Cards.AddRange(Card.Draw(deck, 10)); player.SortCards(); CurrentHistory.PlayerCards.Add((player.Name, new List <Card>(player.Cards))); } Skat.AddRange(Card.Draw(deck, 2)); CurrentHistory.Skat.AddRange(Skat); var s = new HashSet <int>(); // farbe for (int m = 2; m < 18; m++) // mit 10 spielt 11 hand 12 schneider 13 angesagt 14 schwarz 15 angesagt 16 ouvert 17 { s.Add(m * 9); s.Add(m * 10); s.Add(m * 11); s.Add(m * 12); } // grand for (int m = 2; m < 12; m++) // mit 4 spielt 5 hand 6 schneider 7 angesagt 8 schwarz 9 angesagt 10 overt 11 { s.Add(m * 24); } // null s.Add(23); // null hand s.Add(35); // null ouvert s.Add(46); // null ouvert hand s.Add(59); BidValues = s.ToList <int>(); BidValues.Sort(); }
public void StartNewRound() { GameCounter += 1; foreach (var p in Players) { p.Stitches.Clear(); p.Cards.Clear(); p.Game = new Game(GameType.Grand); switch (p.Position) { case PlayerPosition.Middlehand: p.Position = PlayerPosition.Forehand; p.BidStatus = BidStatus.Accept; break; case PlayerPosition.Rearhand: p.Position = PlayerPosition.Middlehand; p.BidStatus = BidStatus.Bid; break; case PlayerPosition.Forehand: p.Position = PlayerPosition.Rearhand; p.BidStatus = BidStatus.Wait; break; default: break; } } MatadorsJackStraight = null; GameStarted = false; GamePlayer = null; GameValue = null; SkatTaken = false; CurrentPlayer = null; Stitch.Clear(); Skat.Clear(); LastStitch.Clear(); using (var rng = new RNGCryptoServiceProvider()) { var deck = Card.GenerateDeck(); foreach (var player in Players) { player.Cards.AddRange(Card.Draw(rng, deck, 10)); } Skat.AddRange(Card.Draw(rng, deck, 2)); } BidSaid = false; BidValueIndex = -1; BidExceeded = false; }
public SkatTable(string player1, string player2, string player3) { Players.Add(new Player(player1, PlayerPosition.Rearhand)); Players.Add(new Player(player2, PlayerPosition.Forehand)); Players.Add(new Player(player3, PlayerPosition.Middlehand)); using (var rng = new RNGCryptoServiceProvider()) { var deck = Card.GenerateDeck(); foreach (var player in Players) { player.Cards.AddRange(Card.Draw(rng, deck, 10)); player.SortCards(); } Skat.AddRange(Card.Draw(rng, deck, 2)); } var s = new HashSet <int>(); // farbe for (int m = 2; m < 18; m++) // mit 10 spielt 11 hand 12 schneider 13 angesagt 14 schwarz 15 angesagt 16 ouvert 17 { s.Add(m * 9); s.Add(m * 10); s.Add(m * 11); s.Add(m * 12); } // grand for (int m = 2; m < 12; m++) // mit 4 spielt 5 hand 6 schneider 7 angesagt 8 schwarz 9 angesagt 10 overt 11 { s.Add(m * 24); } // null s.Add(23); // null hand s.Add(35); // null ouvert s.Add(46); // null ouvert hand s.Add(59); BidValues = s.ToList <int>(); BidValues.Sort(); }
public void PickupSkat(Player player, Card card) { Skat.Remove(card); player.Cards.Add(card); }
public void PerformPlayerAction(Player player, ActionType actionType) { switch (actionType) { case ActionType.TakeSkat: SkatTaken = true; break; case ActionType.PlayHand: SetGameOption(player, player.Game.Option | GameOption.Hand); break; case ActionType.StartGame: StartGame(player); break; case ActionType.DoNotPlayHand: var gameOption = player.Game.Option & ~GameOption.Hand; if (player.Game.Type != GameType.Null) { gameOption &= ~GameOption.Ouvert; } SetGameOption(player, gameOption); break; case ActionType.Bid: BidSaid = true; MoveNextBidValue(); break; case ActionType.PassBid: player.BidStatus = BidStatus.Pass; foreach (var p in Players) { if (p.Position == PlayerPosition.Rearhand && p.BidStatus != BidStatus.Pass) { p.BidStatus = BidStatus.Bid; break; } } BidSaid = false; break; case ActionType.HoldBid: BidSaid = false; break; case ActionType.PassHold: BidSaid = false; player.BidStatus = BidStatus.Pass; foreach (var p in Players) { if (p.Position == PlayerPosition.Rearhand && p.BidStatus != BidStatus.Pass) // weitersagen { p.BidStatus = BidStatus.Bid; } else if (p.Position == PlayerPosition.Middlehand && p.BidStatus != BidStatus.Pass) // hoeren { p.BidStatus = BidStatus.Accept; } } break; default: break; } if (actionType == ActionType.PassBid || actionType == ActionType.PassHold || actionType == ActionType.Bid) { // find if all player have given up Player gamePlayer = null; var cntPassen = 0; foreach (var p in Players) { if (p.BidStatus != BidStatus.Pass) { gamePlayer = p; continue; } cntPassen++; } // all gave up if (cntPassen == 3) { GamePlayer = Players[0]; GameValue = new GameValue { Score = 0 }; GameStarted = true; foreach (var p in Players) { p.Cards.Clear(); p.Stitches.Clear(); } Skat.Clear(); Stitch.Clear(); CurrentHistory.GamePlayerScore = 0; CurrentHistory.GameValue = 0; SkatResult.History.Add(CurrentHistory); SkatResult.EndedUtc = DateTime.UtcNow; } // two player gave up, remaing playing is the game player else if (gamePlayer != null && cntPassen == 2) { if (gamePlayer.Position == PlayerPosition.Forehand && CurrentBidValue == 0) { gamePlayer.BidStatus = BidStatus.Bid; } else { GamePlayer = gamePlayer; GameStarted = false; SkatTaken = false; } } } }
public void StartNewRound() { GameCounter += 1; if (InactivePlayer == null) { foreach (var p in Players) { p.Stitches.Clear(); p.Cards.Clear(); p.Game = new Game(GameType.Grand); switch (p.Position) { case PlayerPosition.Middlehand: p.Position = PlayerPosition.Forehand; p.BidStatus = BidStatus.Accept; break; case PlayerPosition.Rearhand: p.Position = PlayerPosition.Middlehand; p.BidStatus = BidStatus.Bid; break; case PlayerPosition.Forehand: p.Position = PlayerPosition.Rearhand; p.BidStatus = BidStatus.Wait; break; default: break; } } } else { var nextPlayers = new Player[3]; var newPlayer = InactivePlayer; newPlayer.Position = PlayerPosition.Rearhand; newPlayer.BidStatus = BidStatus.Wait; newPlayer.Stitches.Clear(); newPlayer.Cards.Clear(); newPlayer.Game = new Game(GameType.Grand); nextPlayers[2] = newPlayer; foreach (var p in Players) { p.Stitches.Clear(); p.Cards.Clear(); p.Game = new Game(GameType.Grand); if (p.Position == PlayerPosition.Forehand) { InactivePlayer = p; p.Position = PlayerPosition.Inactive; p.BidStatus = BidStatus.Wait; } else if (p.Position == PlayerPosition.Middlehand) { p.Position = PlayerPosition.Forehand; p.BidStatus = BidStatus.Accept; nextPlayers[0] = p; } else if (p.Position == PlayerPosition.Rearhand) { p.Position = PlayerPosition.Middlehand; p.BidStatus = BidStatus.Bid; nextPlayers[1] = p; } } Players.Clear(); Players.AddRange(nextPlayers); } MatadorsJackStraight = null; GameStarted = false; GamePlayer = null; GameValue = null; IsSpeedUp = false; SkatTaken = false; CurrentPlayer = null; Stitch.Clear(); Skat.Clear(); LastStitch.Clear(); CurrentHistory = new GameHistory(); var deck = Card.GenerateDeck(); foreach (var player in Players) { player.Cards.AddRange(Card.Draw(deck, 10)); player.SortCards(); CurrentHistory.PlayerCards.Add((player.Name, new List <Card>(player.Cards))); } Skat.AddRange(Card.Draw(deck, 2)); CurrentHistory.Skat.AddRange(Skat); BidSaid = false; BidValueIndex = -1; }
static void Main(string[] args) { var skat = new Skat(); }