Java Craps Applet GUI麻烦

时间:2013-12-05 02:06:24

标签: java swing user-interface applet

我很难理解我的Craps游戏中repaint()的位置和时间。我知道在事件的每个实例之后,比如选择了Start Game或Roll Dice时,我需要放repaint()。但是,当我将字符串输出从“”改为“你赢了!!”在每种情况下,然后重新打印,该应用程序无法识别它。我已经扫描了网站以寻找可能的补救措施,但找不到任何类似于我正在尝试做的事情,因为我正在使用.gif用于骰子图像并正在编写applet,因此我不能只在主要方法中使用sysout。任何和所有的批评当然都是受欢迎的,我可以处理热量..

到目前为止我所拥有的:

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

1 个答案:

答案 0 :(得分:0)

在下一步中看到您的问题:在init()方法中声明局部变量:

Button rollButton = new Button("Roll Dice");
Button startButton = new Button("Start Game");

并向其添加ActionListener,但在您的actionPerformed(ActionEvent e)方法中,您将源与null进行比较:

e.getSource() == rollButton
e.getSource() == startButton

此处:rollButton == nullstartButton == null,因此,您的if语句永远不会执行,只有else语句。

init()方法中声明您的按钮,如下所示:

rollButton = new JButton("Roll Dice");
startButton = new JButton("Start Game");

我觉得它对你很有帮助。

另请阅读java中的variables