I'm having a difficult time understanding where and when to repaint()
in my Craps game. I understand that after every instance of an event, like when Start Game or Roll Dice is selected, I need to put repaint()
. However when I change the string output from "" to "You've Won!!" in each case and then reprint, the app does not recognize it. I have scanned the site for possible remedies, but cannot find anything like what I'm trying to do, as I'm using .gif's for the dice images and am writing an applet, thus I cannot just sysout in a main method. Any and all criticism is of course welcome, I can handle the heat..
What I have so far:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.*;
import java.util.Random;
public class Craps extends JApplet implements ActionListener {
Random gen = new Random();
// constant variables for game status
final int WON = 0, loss = 1, CONTINUE = 2;
// other variables used
boolean firstRoll = true; // true if first roll of dice
int diceSum = 1; // sum of the dice
int aPoint = 1; // point if no win/loss on first roll
int stillGame = CONTINUE; // game not over yet
int dice1 = gen.nextInt(6) + 1;
int dice2 = gen.nextInt(6) + 1;
int diceSec, dice2Sec;
int Horizon = gen.nextInt(260) + 25;
int secHorizon = gen.nextInt(260) + 25;
int Vertical = gen.nextInt(150) + 40;
int SecVerto = gen.nextInt(150) + 40;
Image[] dice = new Image[6];
int Low = 35, High = 335;
int Up = 50, Down = 250;
int wins = 0;
String s1 = "";
// GUI
JButton rollButton, startButton;
public void init() {
Button rollButton = new Button("Roll Dice");
Button startButton = new Button("Start Game");
setSize(400, 400);
setLayout(null);
for (int i = 0; i < 6; i++) {
dice[i] = getImage(getCodeBase(), "dice" + (i + 1) + ".gif");
}
// create button to start the game
startButton.setBounds(40, 300, 100, 20);
add(startButton);
startButton.addActionListener(this);
startButton.setEnabled(true);
// create button to roll dice
rollButton.setBounds(230, 300, 100, 20);
add(rollButton);
rollButton.addActionListener(this);
rollButton.setEnabled(true);
} // end of init
public void paint(Graphics g) {
super.paint(g);
// draw craps table
g.setColor(Color.red);
g.fillRect(1, 1, 400, 400);
// draw playing field
g.setColor(Color.green);
g.fillRoundRect(25, 40, 310, 210, 75, 75);
// paint the images of the dice
g.drawImage(dice[dice1 - 1], Horizon, Vertical, 32, 32, this);
g.drawImage(dice[dice2 - 1], secHorizon, SecVerto, 32, 32, this);
g.setColor(Color.black);
g.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 22));
g.drawString(s1, 33, 280);
}
public void actionPerformed(ActionEvent e) {
// first roll of dice
Horizon = gen.nextInt(260) + 25;
secHorizon = gen.nextInt(260) + 25;
Vertical = gen.nextInt(150) + 40;
SecVerto = gen.nextInt(150) + 40;
if (e.getSource() == rollButton) {
// while (stillGame == CONTINUE) {
if (firstRoll) {
diceSum = diceRoller(); // roll dice
// repaint();
switch (diceSum) {
// user victory on first roll
case 7:
case 11:
stillGame = WON;
s1 = "You Win";
wins++;
break;
// user loss on first roll
case 2:
case 3:
case 12:
stillGame = loss;
s1 = "You Lose";
break;
default:
stillGame = CONTINUE;
aPoint = diceSum;
firstRoll = false;
s1 = "The Point is " + aPoint + "";
break;
} // end switch
// end if (firstRoll) statement
repaint();
}
else {
diceSum = diceRoller(); // roll dice
// determine game status
if (diceSum == aPoint) // win by making point
s1 = "You Win!!";
else if (diceSum == 7) // lose by rolling seven
s1 = "Suck It";
}
// end while loop
} // end if structure body
// subsequent roll of dice
else {
diceSum = diceRoller(); // roll dice
// determine game status
if (diceSum == aPoint) { // win by making point
s1 = "You Win!!";
stillGame = WON;
} else if (diceSum == 7) { // lose by rolling seven
s1 = "You've Lost";
stillGame = loss;
}
}// end else structure
if (e.getSource() == startButton) {
s1 = "";
}
repaint();
}
// roll dice, calculate sum and display results
public int diceRoller() {
int sum;
dice1 = gen.nextInt(6) + 1; // pick random dice values
dice2 = gen.nextInt(6) + 1;
sum = dice1 + dice2; // sum die values
return sum; // return the sum of dice
} // end method rollDice
} // end
Seems your problem in next: in init()
method you declare local variables:
Button rollButton = new Button("Roll Dice");
Button startButton = new Button("Start Game");
and add ActionListener
to them, but in your actionPerformed(ActionEvent e)
method you compare source with null :
e.getSource() == rollButton
e.getSource() == startButton
here : rollButton == null
and startButton == null
, because of that, your if
statement never execute, only else
statement.
Declare your buttons in init()
method like next:
rollButton = new JButton("Roll Dice");
startButton = new JButton("Start Game");
I think it helps you.
Also read about variables in java.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.