-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathSlotMachine.java
281 lines (248 loc) · 7.98 KB
/
SlotMachine.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
/*
Programmed by: Waldir Bolanos
Date: 07/29/14
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Random;
public class SlotMachine extends JFrame
{
private JLabel ImageLabelOne; // Holds an image
private JLabel ImageLabelTwo; // Holds an image
private JLabel ImageLabelTres; // Holds an image
private JTextField fieldOne;
private JTextField fieldTwo;
private JTextField fieldTres;
/**
* Constructor
*/
public SlotMachine( )
{
super( "Slot Machine" ); // Set the title bar text.
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); // Specify what happens when the close button is clicked.
// Create panels
JPanel imagesPanel = new JPanel( new GridLayout( 1, 3 ) );
JPanel numberPanel = new JPanel( new GridLayout( 2, 3 ) );
JPanel buttonPanel = new JPanel( );
// Create Button
JButton Spin = new JButton( "Spin" );
JButton upBet = new JButton( "Rise Bet" );
JButton lowBet = new JButton( "Lower Bet" );
JButton maxBet = new JButton( "Max Bet" );
JButton reset = new JButton( "Reset" );
// Read the image file into an ImageIcon object.
ImageIcon ImageOne = new ImageIcon( "blank.png" );
ImageIcon ImageTwo = new ImageIcon( "blank.png" );
ImageIcon ImageTres = new ImageIcon( "blank.png" );
ImageLabelOne = new JLabel("", ImageOne, JLabel.LEFT );
ImageLabelTwo = new JLabel("", ImageTwo, JLabel.CENTER );
ImageLabelTres = new JLabel("", ImageTres, JLabel.RIGHT );
fieldOne = new JTextField( "3" );
fieldTwo = new JTextField( "0" );
fieldTres = new JTextField( "100" );
fieldOne.setEditable ( false );
fieldTwo.setEditable ( false );
fieldTres.setEditable( false );
// Register an action listener with the buttons.
Spin.addActionListener ( new SpinButtonListener( ) );
upBet.addActionListener ( new UpBetButtonListener( ) );
lowBet.addActionListener( new LowBetButtonListener( ) );
maxBet.addActionListener( new MaxBetButtonListener( ) );
reset.addActionListener ( new ResetBetButtonListener( ) );
buttonPanel.add( Spin );
buttonPanel.add( upBet );
buttonPanel.add( lowBet );
buttonPanel.add( maxBet );
buttonPanel.add( reset );
numberPanel.add( new JLabel( "Bet: " ) );
numberPanel.add( new JLabel( "Winnigs: " ) );
numberPanel.add( new JLabel( "Balance: " ) );
numberPanel.add( fieldOne );
numberPanel.add( fieldTwo );
numberPanel.add( fieldTres );
imagesPanel.add( ImageLabelOne );
imagesPanel.add( ImageLabelTwo );
imagesPanel.add( ImageLabelTres );
// Set Borders
imagesPanel.setBorder ( BorderFactory.createTitledBorder( "Wheels" ) );
numberPanel.setBorder ( BorderFactory.createTitledBorder( "Numbers" ) );
// Add the panels to the content pane.
add( imagesPanel, BorderLayout.NORTH );
add( numberPanel, BorderLayout.CENTER );
add( buttonPanel, BorderLayout.SOUTH );
// Pack and display the window.
pack( );
setVisible( true );
}
/**
* String to int
*/
private int stringToInt ( String toConvert )
{
return Integer.parseInt( toConvert );
}
/**
* Int to String
*/
private String intToString ( int toConvert )
{
return Integer.toString( toConvert );
}
/**
* updateTextField
*/
private void updateTextField( int textField, int ammount )
{
int cuttentNumber;
if( textField == 1 )
{
cuttentNumber = stringToInt( fieldOne.getText( ) );
fieldOne.setText( intToString ( ammount ) );
}
else if ( textField == 2 )
{
cuttentNumber = stringToInt( fieldTwo.getText( ) );
fieldTwo.setText( intToString ( ammount ) );
}
else if ( textField == 3 )
{
cuttentNumber = stringToInt( fieldTres.getText( ) );
fieldTres.setText( intToString ( ammount ) );
}
}
/**
* getCurrentBet
* @return The value of the current bet.
*/
private int getCurrentBet ( )
{
return stringToInt( fieldOne.getText( ) );
}
/**
* getCurrentWinning
* @return The value of the current Winning.
*/
private int getCurrentWinning ( )
{
return stringToInt( fieldTwo.getText( ) );
}
/**
* getCurrentBalance
* @return The value of the current balance.
*/
private int getCurrentBalance ( )
{
return stringToInt( fieldTres.getText( ) );
}
/**
* randomSlot generates a random slot
* @return The value of a random image
*/
public String randomSlot( )
{
String[] slots = { "Twilight.png", "Rainbow.png", "Apple.png", "Pinky.png", "Rarity.png", "Fluttershy.png", "blank.png" };
int idx = new Random( ).nextInt( slots.length );
String random = ( slots[idx] );
return random;
}
/**
* Private ResetBetButtonListener class that resets defaults
*/
private class ResetBetButtonListener implements ActionListener
{
public void actionPerformed( ActionEvent e )
{
updateTextField( 1, 3 );
updateTextField( 2, 0 );
updateTextField( 3, 100 );
}
}
/**
* Private UpBetButtonListener class that handles upBet
*/
private class UpBetButtonListener implements ActionListener
{
public void actionPerformed( ActionEvent e )
{
if( getCurrentBet( ) < getCurrentBalance( ) )
updateTextField( 1, getCurrentBet( ) + 1 ); // Up current Bet
else
updateTextField( 1, getCurrentBalance( ) ); // Set current Bet to current balance
}
}
/**
* Private MaxBetButtonListener class that sets bet to current balance
*/
private class MaxBetButtonListener implements ActionListener
{
public void actionPerformed( ActionEvent e )
{
updateTextField( 1, getCurrentBalance( ) ); // Set bet to current balance
}
}
/**
* Private LowBetButtonListener class that handles LowBet
*/
private class LowBetButtonListener implements ActionListener
{
public void actionPerformed( ActionEvent e )
{
if( getCurrentBet( ) > 1 )
updateTextField( 1, getCurrentBet( ) - 1 ); // Low current Bet
if( getCurrentBet( ) > getCurrentBalance( ) )
updateTextField( 1, getCurrentBalance( ) ); // Set current Bet to current balance
}
}
/**
* Private SpinButtonListener class that handles spin
*/
private class SpinButtonListener implements ActionListener
{
public void actionPerformed( ActionEvent e )
{
if( getCurrentBalance( ) > 0 && getCurrentBet( ) <= getCurrentBalance( ) )
{
String randomOne = randomSlot( );
String randomTwo = randomSlot( );
String randomTres = randomSlot( );
// Read the image file into an ImageIcon object.
ImageIcon ImageOne = new ImageIcon( randomOne );
ImageIcon ImageTwo = new ImageIcon( randomTwo );
ImageIcon ImageTres = new ImageIcon( randomTres );
// Display the image in the label.
ImageLabelOne.setIcon ( ImageOne );
ImageLabelTwo.setIcon ( ImageTwo );
ImageLabelTres.setIcon( ImageTres );
if ( randomOne.equals ( randomTwo ) && randomTres.equals( randomOne ) && !randomOne.equals ( "blank.png" ) )
{
// update to user wins 3 x bet
updateTextField( 2, ( getCurrentBet( ) * 3 ) ); // Update Current Winnings
updateTextField( 3, ( getCurrentBet( ) * 3 ) + getCurrentBalance( ) ); // Update Current Balance (Win)
}
else if( ( randomOne.equals( randomTwo ) && !randomOne.equals( "blank.png" ) ) ||
( randomOne.equals( randomTres ) && !randomOne.equals( "blank.png" ) ) ||
( randomTwo.equals( randomTres ) && !randomTwo.equals( "blank.png" ) ) )
{
// update to user wins 2 x bet
updateTextField( 2, ( getCurrentBet( ) * 2 ) ); // Update Current Winnings
updateTextField( 3, ( getCurrentBet( ) * 2 ) + getCurrentBalance( ) ); // Update Current Balance (Win)
} else
{
updateTextField( 2, -getCurrentBet( ) ); // Update Current Winnings
updateTextField( 3, getCurrentBalance( ) - getCurrentBet( ) ); // Update Balance after bet
if( getCurrentBet( ) > getCurrentBalance( ) )
updateTextField( 1, getCurrentBalance( ) ); // Update Current bet
}
} else
JOptionPane.showMessageDialog( null, "Out of Mula!" );
}
}
/**
* Run the SlotMachineTest
*/
public static void main( String[] args )
{
new SlotMachine( );
}
}