我想知道是否有任何人可以看看我的代碼,這是工作,所以你可以複製並測試它麻煩。當底欄倒數到底時,我的問題是什麼,它應該結束遊戲,然後再從頭開始。但是我認爲我錯過了一些代碼,或者我的代碼沒有正確編寫來做我想做的事情。任何人都可以查看它並查看我出錯的地方嗎?我有這個非常簡單的猜數遊戲,它幾乎完成,但我有它的一些
這是遊戲畫面的所有GUI和主():
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.Timer;
public class GameScreen {
public static void main(String[] args) throws InterruptedException {
final ProgressBar progressBar = new ProgressBar() {
@Override
public Dimension getPreferredSize() {
return new Dimension(0, 30);
}
};
final JFrame game = new JFrame();
final JButton playButton, guessButton;
final JPanel topPanel, gamePanel, rangePanel, guessPanel;
final JTextArea gameStatus;
final GuessingGame gameNumbers;
final JLabel rangeLabel = new JLabel("Range: ");
final JTextField playerName = new JTextField("", 20);
final JTextField guessInput = new JTextField("", 20);
gameStatus = new JTextArea(10, 20);
JScrollPane scroll = new JScrollPane(gameStatus);
gameNumbers = new GuessingGame();
playButton = new JButton("Play");
guessButton = new JButton("Guess");
topPanel = new JPanel();
topPanel.setBackground(Color.yellow);
topPanel.add(new JLabel("Player: "));
topPanel.add(playerName);
topPanel.add(playButton);
rangePanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
rangePanel.add(rangeLabel, BorderLayout.CENTER);
guessPanel = new JPanel();
guessPanel.add(new JLabel("Guess: "));
guessPanel.add(guessInput);
guessPanel.add(guessButton);
gamePanel = new JPanel(new BorderLayout());
gamePanel.add(rangePanel, BorderLayout.NORTH);
gamePanel.add(guessPanel);
game.setTitle("Guessing Game");
game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
game.add(topPanel, BorderLayout.NORTH);
game.add(scroll, BorderLayout.EAST);
game.add(gamePanel, BorderLayout.CENTER);
game.add(progressBar, BorderLayout.SOUTH);
gameStatus.setFocusable(false);
guessButton.setEnabled(false);
guessInput.setEnabled(false);
final Timer gameTimer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
if (progressBar.getRunStatus() == false){
System.out.println("YAY");
guessButton.setEnabled(false);
guessInput.setEnabled(false);
playButton.setEnabled(true);
playerName.setEnabled(true);
}
}
});
playButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (playerName.getText().equals("")) {
JOptionPane.showMessageDialog(gamePanel, "Invalid Player Name");
} else {
progressBar.repaint();
progressBar.StartTimer();
progressBar.setBackground(Color.gray);
gameNumbers.play();
gameStatus.append("Game Started!\n");
rangeLabel.setText(gameNumbers.toString());
guessButton.setEnabled(true);
guessInput.setEnabled(true);
playButton.setEnabled(false);
playerName.setEnabled(false);
gameTimer.start();
}
}
});
guessButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int playerGuess = Integer.parseInt(guessInput.getText());
if (gameNumbers.isGuessCorrect(playerGuess)) {
gameStatus.append("Game Over!\n");
guessButton.setEnabled(false);
guessInput.setEnabled(false);
playButton.setEnabled(true);
playerName.setEnabled(true);
JOptionPane.showMessageDialog(gamePanel, "" + playerName.getText() + " wins!");
}
if (gameNumbers.isGuessAlmostCorrect(playerGuess)) {
gameStatus.append("very close!\n");
guessInput.requestFocus();
}
if (gameNumbers.isGuessLarger(playerGuess)) {
gameStatus.append("try something smaller...\n");
guessInput.requestFocus();
}
if (gameNumbers.isGuessSmaller(playerGuess)) {
gameStatus.append("try something larger...\n");
guessInput.requestFocus();
}
}
});
game.pack();
game.setVisible(true);
}
;
}
這是我的ProgressBar類:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JPanel;
import javax.swing.Timer;
class ProgressBar extends JPanel {
public int minValue, maxValue;
private int currentValue;
public boolean running;
private ArrayList<Rectangle> rects = new ArrayList<>();
private int removeValue = 0;
public ProgressBar() {
setMaxValue();
minValue = 0;
this.running = true;
currentValue = maxValue;
this.setBackground(Color.green);
}
public void StartTimer() {
setMaxValue();
Timer progressBarCountDownTimer = new Timer(1000, new ActionListener() {
int count = getMaxValue();
@Override
public void actionPerformed(ActionEvent ae) {
if (getValue() == 0) {
setRunStatus(false);
((Timer) ae.getSource()).stop();
System.out.println("YAY");
;
} else {
count--;
System.out.println(getValue());
setValue(count);
}
setValue(count);
}
});
progressBarCountDownTimer.start();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
rects.clear();
int rectWidths = getWidth()/getMaxValue();
int startingX = 0;
for (int i = 0; i < (getMaxValue() - removeValue); i++) {
rects.add(new Rectangle(startingX, 0, rectWidths, getHeight()));
startingX += rectWidths;
}
for (Rectangle r : rects) {
g2d.setColor(Color.green);
g2d.fillRect(r.x, r.y, r.width, r.height);
}
}
public int getValue() {
return currentValue;
}
public void setRunStatus(boolean running) {
this.running = running;
}
public boolean getRunStatus() {
if (this.running == true) {
return true;
} else {
return false;
}
}
public void setValue(int value) {
int rem = value - currentValue;
removeValue -= rem;
currentValue = value;
repaint();
}
public int getMaxValue() {
return maxValue;
}
public void setMaxValue() {
maxValue = RandomValues.integer(5, 20);
}
}
這是我的猜測遊戲類():
public class GuessingGame {
int minRange, maxRange, secretNumber;
RandomValues randomValue;
public GuessingGame() {
randomValue = new RandomValues();
}
public int getMinRange() {
return minRange;
}
public int getMaxRange() {
return maxRange;
}
public void setMinRange() {
this.minRange = randomValue.integer(1, 10);
}
public void setMaxRange() {
this.maxRange = randomValue.integer(80, 100);
}
public int getSecretNumber() {
return secretNumber;
}
public void setSecretNumber() {
this.secretNumber = randomValue.integer(minRange, maxRange);
}
public void play() {
setMinRange();
setMaxRange();
setSecretNumber();
}
public boolean isGuessCorrect(int guess) {
if (guess == this.secretNumber) {
return true;
} else {
return false;
}
}
public boolean isGuessAlmostCorrect(int guess) {
if (guess >= this.secretNumber - 5 & guess <= this.secretNumber + 5 & guess != this.secretNumber) {
return true;
} else {
return false;
}
}
public boolean isGuessSmaller(int guess) {
if (guess < this.secretNumber) {
return true;
} else {
return false;
}
}
public boolean isGuessLarger(int guess) {
if (guess > this.secretNumber) {
return true;
} else {
return false;
}
}
@Override
public String toString() {
return String.format("Range: %d to %d answer: %d", getMinRange(), getMaxRange(), getSecretNumber());
}
}
最後,這只是我簡單的RandomValues類來獲得隨機數字:
import java.util.Random;
public class RandomValues {
public static int integer(int min, int max) {
Random randomNum = new Random();
int randomValue = randomNum.nextInt(max - min + 1) + min;
return randomValue;
}
}
我很抱歉,如果這是一個有點太長了,但如果你做的複製和粘貼,它的工作,並加載它只是倒計時器部分只是似乎不是想工作這樣,我希望它......如果有任何人可以幫助我,我會永遠愛他們:)
*「但如果您複製並粘貼它,」* 4次,爲4個公開課。如果其中3個是默認訪問權限,則可以使用'main(String [])'將它們移動到源代碼的末尾。從而將其減少到** 1 **複製/粘貼。 –
的描述有點vague-「它沒有做我想要什麼」 - 通過代碼閱讀和玩了之後,我想我知道它的「假設」的事,但是這將是一個猜測充其量 – MadProgrammer
KrazyKat89說實話,你似乎沒有花時間去制定這個問題。當然,有些人會回答任何問題,但是你真的應該縮小問題的範圍以便提出具體的問題 - 不要只是向人們扔一堆代碼並問「出了什麼問題?」如果你這樣做,它往往不會在這些網站上得到太好的評價。 –