Я пытаюсь создать игровой автомат в Java. В этом игровом автомате я завершил базовое начало проекта. У меня есть аниматоры, которые попадают в случайное пространство (вишня, бланк, семь и т. Д.), Фон, кнопки для старта и ставки в дебюте, однако мне нужно выяснить окончание слота; как сделать так, чтобы результаты игрового автомата отображались без нажатия пользователем кнопки. Я считаю, что для этого лучше всего погрузиться в мир потоков. Однако, когда я попытался создать простую тему, аниматоры перестали работать, а когда я вынул эту тему, аниматоры работали. Это довольно загадка.
Вот часть кода, если это поможет объяснение:
public class SlotMachineOpeningGraphic extends JPanel implements Runnable
{
JLayeredPane layeredPane= new JLayeredPane ();
JFrame frame = new JFrame();
public Thread thread;
public volatile boolean running = false;
Player plyr = new Player ();
public static final long startTime = System.currentTimeMillis ();
JLabel numberBet = new JLabel ("" + plyr.getBet()); //things that change on JFrame
JLabel numberAccount = new JLabel (""+ plyr.getAccount ());
JButton betButton = new JButton ("Bet ++");
JButton playAgain = new JButton ("Start");
public SlotMachineOpeningGraphic()
{
layeredPane.setPreferredSize(new Dimension(750, 460));//changes size to image with border for buttons
//andlabels
ImageIcon bG = new ImageIcon ("/Users/Documents/slotmachine.png");//background file
JLabel backGround = new JLabel (bG);
backGround.setBounds (70,0, bG.getIconWidth(), bG.getIconHeight());//won't display if you do not set bounds
layeredPane.add (backGround, new Integer (0));//add to first layer
/*add buttons and labels to give user options
* and information, placed in layer 2 */
playAgain.setBounds (110,420, 100, 25);
layeredPane.add (playAgain, new Integer (2));
playAgain.addActionListener (new Start());
betButton.setBounds (320,420, 100, 25);
layeredPane.add (betButton, new Integer (2));
betButton.addActionListener (new SlotBB ());
JButton mainMenu = new JButton ("Main Menu");
mainMenu.setBounds (520,420, 100, 25);
layeredPane.add (mainMenu, new Integer (2));
long checkTime = System.currentTimeMillis ();
System.out.println ("Total execution time : " + (checkTime - startTime));
JLabel bet = new JLabel ("Bet:");
bet.setBounds (620, 320, 100, 30);
Font font = new Font ("Corsiva Hebrew",bet.getFont().getStyle(),30); //desired font & size
bet.setFont (font);
layeredPane.add (bet, new Integer (2));
numberBet.setBounds (620, 340, 100, 30);
layeredPane.add (numberBet, new Integer (2));
numberBet.setFont (font);
JLabel account = new JLabel ("Account: ");
account.setBounds (5, 320, 150, 30);
account.setFont (font);
layeredPane.add (account, new Integer (2));
numberAccount.setBounds (5, 340, 150, 30);
numberAccount.setFont (font);
layeredPane.add (numberAccount, new Integer (2));
add(layeredPane);
JComponent newContentPane = layeredPane;
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
frame.setBackground (Color.white);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public void run ()
{
try {
Thread.sleep (20);
System.out.println ("works");
}
catch (Exception e) {
System.out.println ("doesn't work");
}
}
class Start extends JPanel implements ActionListener
{
public void actionPerformed (ActionEvent event)
{
SlotAnimator a0 = new SlotAnimator (40);
a0.setBounds(155, 85, 100, 90);
layeredPane.add (a0, new Integer (1));
SlotAnimator a1 = new SlotAnimator (85);
a1.setBounds(320, 85, 100, 90);
layeredPane.add (a1, new Integer (1));
SlotAnimator a2 = new SlotAnimator (135);
a2.setBounds(470, 85, 100, 90);
layeredPane.add (a2, new Integer (1));
playAgain.setText ("play again?");
hearSound();
thread = new Thread (new SlotMachineOpeningGraphic ());
thread.start ();
}
}
public static void main (String [] args)
{
new SlotMachineOpeningGraphic();
}
}
Есть предложения по подходу? Буду очень признателен!