Использование темы для игры в карты. каждый игрок показывает карту по одному - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь перетасовать колоду из 52 карт и раздаю ее случайным образом четырем людям. Начиная игру (матч), каждый игрок будет показывать одну карту за раз, пока все не покажут карты.

Я застрял в том, как использовать нить, которая после того, как игрок1 покажет одну карту, будет ждать, пока другие 3 не покажут карты, а затем игрок1 покажет вторую и так далее.

Также как использовать фрагментарный код хранения каждого прогона и поместить его в БД.

Карта. java

   public class Card {

private int suit;
private int rank;
private static String[] suits = { "Clubs", "Diamonds", "Hearts", "Spades" };
private static String[] ranks = { "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King" };

public int getSuit() {
    return suit;
}

public int getRank() {
    return rank;
}

public Card(int suit, int rank) {
    super();
    this.suit = suit;
    this.rank = rank;
}

@Override
public String toString() {
    return suits[suit] + "-" + ranks[rank];
    }

}

Player. java

public class Player implements Runnable {
private String name;
private List<Card> cards;

public Player(String name) {
    super();
    this.name = name;
}

public String getName() {
    return name;
}

public List<Card> getCards() {
    return cards;
}

public void setCards(List<Card> cards) {
    this.cards = cards;
}

@Override
public String toString() {
    return name + " shows cards: " + cards;
}

@Override
public void run() {
    System.out.println("ssss");
    synchronized (Player.class) {
        try {
            Thread.sleep(3000);
        } catch (Exception e) {
        }
    }
    }
}

Матч. java

 public class Match {
private int id;
private List<Player> players;

private Match() {
    id += 1;
    players = new ArrayList<Player>();
}

private static class MatchClass {
    private static Match match = new Match();
}

public static Match getInstance() {
    return MatchClass.match;
}

public void addPlayer(Player player) {
    if (players.size() <= 3) {
        players.add(player);
    } else {
        System.out.println("Player full");
    }
}

public void dealCard() {
    List<Card> deck = new ArrayList<>(52);
    for (int a = 0; a <= 3; a++) {
        for (int b = 0; b <= 12; b++) {
            deck.add(new Card(a, b));
        }
    }
    Collections.shuffle(deck);

    int j = 0;
    for (int i = 0; i < players.size(); i++) {
        List<Card> card = new ArrayList<>();
        while (j < (i + 1) * 13) {
            card.add(deck.get(j));
            j++;
        }
        players.get(i).setCards(card);
    }
}

public List<Player> getPlayers() {
    return players;
}

public void startMatch() {
    players.forEach(p -> p.run());

    }
}

Тест. java

 public class Test {
public static void main(String[] args) {
    Match m = Match.getInstance();

    m.addPlayer(new Player("1"));
    m.addPlayer(new Player("2"));
    m.addPlayer(new Player("3"));
    m.addPlayer(new Player("4"));

    m.dealCard();
    m.startMatch();

    }
}
...