У меня есть два класса, BlackJack
и BlackJackPane
, BlackJack
имеет метод с именем dealCards()
, который дает класс с именем Player
a Card
путем цикла от первого Player
до последнего Player
дважды, как в реальной игре в блэкджек, где каждому игроку сдается по одной карте за раз.
BlackJackPane
- это JFrame, который содержит JButtons и JLabels. JButton deal
при нажатии имеет .actionCommand("deal")
и ActionListener
с лямбда-выражением, которое вызывает переменную экземпляра blackjack
в BlackJackPane
для раздачи карт, blackjack.dealCards()
. ActionListener
также определяет, какую карту из обычной колоды из 52 карт сдается Player
для отображения правильных Card
, которые есть у Player
.
Я бы предпочел иметь dealCards()
метод в BlackJack
ждет после передачи Card
в Player
, чтобы JLabel был создан и отображен в JFrame, однако я не знаю, как заставить это работать между классами. Я открыт для других творческих возможностей или советов, как улучшить мой код.
Я пытаюсь сохранить классы инкапсулированными, а ввод / вывод ограничен BlackJackPane
.
Это мой класс BlackJack
public class BlackJack
{
private final Deck deck;
private final ArrayList<Player> player;
private final int numOfPlayers;
public BlackJack(int players)
{
this.numOfPlayers = players + 1; // +1 for dealer, dealer is always first in arrayList
this.deck = new Deck(Deck.TYPE[0]);
this.player = new ArrayList();
for (int i = 0; i < players + 1; i++)
{
this.player.add(new Player((i == 0))); //i == 0 is to say true to Player constructor that it is the dealer or cpu
}
}
public void DealCards()
{
deck.shuffle();
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < player.size(); j++)
{
player.get(j).getHand().add(deck.getCard(0));
deck.remove(0);
}
}
}
}
Это BlackJackPane
public class BlackJackPane extends JFrame
{
private BlackJack blackjack;
private JLabel pokerTable;
private JButton hit, stay, split, deal, hiddenCard;
public BlackJackPane(BlackJack blackjack) throws IOException
{
this.blackjack = blackjack;
display();
}
private void display() throws IOException
{
deal.addActionListener((event) ->
{
if (event.getActionCommand().equals("deal"))
{
blackjack.DealCards();
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < blackjack.getNumOfPlayers(); j++)
{
if (blackjack.getPlayer(j).isCpu() && i != 1) //One card dealer has is face down
{
} else
{
if (blackjack.getPlayer(j).getHand().get(i).getFace() == 0) // face = 2
{
if (blackjack.getPlayer(j).getHand().get(i).getSuit() == 0) //clubs
{
//Code to make and display the JLabel within the JFrame
} else if (blackjack.getPlayer(j).getHand().get(i).getSuit() == 1) //diamonds
{
} else if (blackjack.getPlayer(j).getHand().get(i).getSuit() == 2) //hearts
{
} else //spades
{
}
} else if() //and so on for 52 cards
}
}
}
}
});
}
}