Advertisement
Guest User

Klasse Game

a guest
Jan 19th, 2020
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.90 KB | None | 0 0
  1. package de.uniwue.gdp.pdd;
  2.  
  3. import de.uniwue.gdp.pdd.deck.Card;
  4. import de.uniwue.gdp.pdd.deck.Deck;
  5.  
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. import java.util.Optional;
  9. import java.util.function.BiPredicate;
  10.  
  11. public class Game {
  12.  
  13. private final List<Player> players;
  14. private final Deck deck;
  15.  
  16. private Player winner;
  17.  
  18. public Game(List<Player> players, Deck deck) {
  19. this.players = players;
  20. this.deck = deck;
  21. }
  22.  
  23. public void start() {
  24. // Karten verteilen
  25. for(Player p : players) {
  26. if(p.invent() == null) {
  27. System.out.println("Ein Spieler hatte keine Regel!");
  28. return;
  29. }
  30.  
  31. List<Card> cardsForPlayer = new ArrayList<>();
  32. for (int i = 1; i <= 7; i++) {
  33. cardsForPlayer.add(deck.take());
  34. }
  35.  
  36. p.startNewGame(cardsForPlayer);
  37. }
  38.  
  39. while(true) {
  40. for (Player p : players) {
  41. boolean allowedMove = true;
  42.  
  43. Card top = deck.top();
  44. Optional<Card> card = p.play(top);
  45.  
  46. if (card.isPresent()) {
  47. Card playedCard = card.get();
  48.  
  49. BiPredicate<Card, Card> playerRule = p.invent();
  50. if (playerRule.test(top, playedCard)) {
  51. for (Player otherPlayer : players) {
  52. BiPredicate<Card, Card> otherRule = otherPlayer.invent();
  53. if (!otherRule.test(top, playedCard)) {
  54. allowedMove = false;
  55. }
  56. }
  57.  
  58. if (!allowedMove) {
  59. p.take(deck.take());
  60. }
  61.  
  62. deck.play(playedCard);
  63. } else {
  64. throw new IllegalMoveException();
  65. }
  66. } else {
  67. // Spieler hat keine Karte abgelegt -> er muss eine ziehen
  68. p.take(deck.take());
  69. }
  70.  
  71. if(top != deck.top()) {
  72. informPlayers(p, top, deck.top(), allowedMove);
  73. }
  74.  
  75. if (p.numberOfCards() == 0) {
  76. winner = p;
  77. return;
  78. }
  79. }
  80. }
  81.  
  82. }
  83.  
  84. private void informPlayers(Player player, Card top, Card played, boolean valid) {
  85. for (Player p : players) {
  86. if(valid) {
  87. p.validMove(player, top, played);
  88. } else {
  89. p.invalidMove(player, top, played);
  90. }
  91. }
  92. }
  93.  
  94. public Optional<Player> winner() {
  95. if(this.winner == null) {
  96. return Optional.empty();
  97. } else {
  98. return Optional.of(this.winner);
  99. }
  100. }
  101.  
  102.  
  103.  
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement