Я пытаюсь перетасовать колоду из 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();
}
}