Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package de.uniwue.gdp.pdd;
- import de.uniwue.gdp.pdd.deck.Card;
- import de.uniwue.gdp.pdd.deck.Deck;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Optional;
- import java.util.function.BiPredicate;
- public class Game {
- private final List<Player> players;
- private final Deck deck;
- private Player winner;
- public Game(List<Player> players, Deck deck) {
- this.players = players;
- this.deck = deck;
- }
- public void start() {
- // Karten verteilen
- for(Player p : players) {
- if(p.invent() == null) {
- System.out.println("Ein Spieler hatte keine Regel!");
- return;
- }
- List<Card> cardsForPlayer = new ArrayList<>();
- for (int i = 1; i <= 7; i++) {
- cardsForPlayer.add(deck.take());
- }
- p.startNewGame(cardsForPlayer);
- }
- while(true) {
- for (Player p : players) {
- boolean allowedMove = true;
- Card top = deck.top();
- Optional<Card> card = p.play(top);
- if (card.isPresent()) {
- Card playedCard = card.get();
- BiPredicate<Card, Card> playerRule = p.invent();
- if (playerRule.test(top, playedCard)) {
- for (Player otherPlayer : players) {
- BiPredicate<Card, Card> otherRule = otherPlayer.invent();
- if (!otherRule.test(top, playedCard)) {
- allowedMove = false;
- }
- }
- if (!allowedMove) {
- p.take(deck.take());
- }
- deck.play(playedCard);
- } else {
- throw new IllegalMoveException();
- }
- } else {
- // Spieler hat keine Karte abgelegt -> er muss eine ziehen
- p.take(deck.take());
- }
- if(top != deck.top()) {
- informPlayers(p, top, deck.top(), allowedMove);
- }
- if (p.numberOfCards() == 0) {
- winner = p;
- return;
- }
- }
- }
- }
- private void informPlayers(Player player, Card top, Card played, boolean valid) {
- for (Player p : players) {
- if(valid) {
- p.validMove(player, top, played);
- } else {
- p.invalidMove(player, top, played);
- }
- }
- }
- public Optional<Player> winner() {
- if(this.winner == null) {
- return Optional.empty();
- } else {
- return Optional.of(this.winner);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement