У меня проблема с моим кодом для простой игры, похожей на BlackJack в Swing.Пользователь может взять две карты, и программа может правильно рассчитать две карты, но когда пользователь хочет нажать кнопку (я использую JButton), чтобы получить новую карту, она не идет по плану.
Примечание: это очень простая версия.Нет карт выше 10.
Например: первые карты = 2 + 5 = 7 Пользователь нажимает «Новая карта», чтобы получить новую.Новая карта 4 -> то есть 7 + 4 = 11 ==== даже не близка к тому, чтобы ее ударили, однако программа иногда сообщает пользователю, что она сломана.
Где в моем коде ошибка?Где я могу улучшить и исправить это?
/*
*Write a program that draws a card of value 1 to 10.
*Determine the sum of the cards so far.
*Keep drawing cards while the sum is less than 16. Output the total sum.
*If the sum is greater than 21 output “Bust”.
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Random;//random number generator
import java.util.ArrayList;//Array lists
class CardGame extends JFrame implements ActionListener
{
JLabel välkommenMessage = new JLabel ("Welcome to BlackJack ");
JTextArea spelRegler = new JTextArea("Klicka på 'Draw Card' för att få dina två första kort.\nOm kortsumman är under 16, fortsätt dra kort.\nKommer du över 21 förlorar du. ");
JButton cardButton = new JButton ("Draw Card");
JButton newCard = new JButton ("New Card");
JLabel kortText = new JLabel("");
static JLabel blackJackSumma = new JLabel ("");
static JLabel displayNewCard = new JLabel("");
JLabel stödlinjenText = new JLabel ("18+. Stödlinjen: 020-819 100");
static Random randomCard = new Random();
public CardGame (){
super("Card Game");
setSize (270,250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible (true);
Container contentArea = getContentPane();
contentArea.setBackground(Color.white);
FlowLayout flowManager = new FlowLayout();
contentArea.setLayout(flowManager);
spelRegler.setEditable(false);
cardButton.addActionListener(this);
newCard.addActionListener(this);
contentArea.add(välkommenMessage);
contentArea.add(spelRegler);
contentArea.add(stödlinjenText);
contentArea.add(cardButton);
contentArea.add(kortText);
contentArea.add(displayNewCard);
contentArea.add(blackJackSumma);
contentArea.add(newCard);
setContentPane(contentArea);
}
public static int cardDraw () {
int card = randomCard.nextInt(10) + 1;
return card;
}
public static ArrayList<Integer> drawTwoCards(){
ArrayList<Integer> cards = new ArrayList<Integer>();
for(int i = 0; i < 2; i++)
{
cards.add(cardDraw());
}
return cards;
}
public static int cardsSumma(ArrayList<Integer> cards){
int total = 0;
for(int card :cards){
total = total + card;
}
return total;
}
public static void spelaKort(ArrayList<Integer> cards){
int newCard = cardDraw(); //call for method
cards.add(newCard);
displayNewCard.setText("Your card: " + newCard);
blackJackSumma.setText("Total: "+ cardsSumma(cards));
if (cardsSumma(cards)== 21){
blackJackSumma.setText("You win");
return;
}
else if (cardsSumma(cards)> 21){
blackJackSumma.setText("BUSTED!");
return;
}
else{
blackJackSumma.setText("Total: " + cardsSumma(cards));
System.out.print(cardsSumma(cards));
spelaKort(cards);
}
}
public void actionPerformed (ActionEvent event){
if (event.getSource()== cardButton){
ArrayList<Integer> cards = drawTwoCards();
kortText.setText("Card: " + cards.get(0) +" and " + cards.get(1)+ " Total: " + cardsSumma(cards));
if (cardsSumma(cards)< 21){
spelRegler.setText("Press 'New Card' to continue");
}
}
if (event.getSource()==newCard){
ArrayList<Integer> cards = drawTwoCards();
spelaKort(cards);
}
}
}
public class Worksheet37a {
public static void main(String[] args) {
CardGame Win = new CardGame();
}
}