我在Java上创建了通用战舰游戏,并在下面包含了一段代码。我获得的用户输入与使用控制台的方式相同,因为在GUI上我有一个JLabel充当print语句,JTextField接受用户输入,然后JButton“提交”输入。
问题是因为我创建程序首先在没有GUI的情况下工作,现在正在将程序转换为程序,我认为动作监听器正在逃避它的自我。我已经在用户输入船舶位置的地方启动了代码片段,他们已经选择了他们想要的每种类型船舶的数量。在这一点上,虽然我希望用户输入例如1(选择水平)然后A4以A4开始船,此后程序将保持循环直到所需数量的船已经放置。
然而,该程序反而跳过,从不提示用户输入方向并将标签更改为“输入猜测”(下一个在CPU上拍摄的方法)并且控制台打印 “你想要船Sub水平还是垂直? 对于水平输入数字1 或者对于垂直输入数字2: CPU镜头为:42 CPU射击的结果是:小姐 输入猜测“ 基本上跳过用户关于放置或方向的任何输入,正如我所说,我认为这可能是由于动作监听器,虽然我不确定,理想情况下程序会运行并且一旦到达任何label1.getText();程序将“暂停”直到用户输入文本然后按下提交按钮然后继续运行。
所以我的问题是有没有办法在不更改整个程序的情况下将“break”或“pause”插入代码中?
for (int i = 0; i < ship.size(); i++)
{
final int shipNumber = i;
while (!worked)
{
playerLocationToSet.clear();
worked = true;
label1.setText("Would you like the ship " + ship.get(shipNumber).getName() + " horizontal(enter 1) or vertical(enter 2) ?");
System.out.println("Would you like the ship " + ship.get(shipNumber).getName() + " horizontal or vertical ?");
System.out.println("For horizontal enter number 1");
System.out.println("Or for vertical enter number 2: ");
button1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent f){
int addLetter;
int addNumber;
String orientString = textField1.getText();
int orient = Integer.parseInt(orientString);
// horizontal
if (orient == 1)
{
addLetter = 0;
addNumber = 1;
}
// vertical
else if (orient == 2)
{
addLetter = 1;
addNumber = 0;
}
int letterNumber = 0;
label1.setText("Where would you like to start " + ship.get(shipNumber).getName() + "?");
String start = textField1.getText();
start = start.toUpperCase();
int letter = start.charAt(0);
int number = start.charAt(1) - 48;
for (int x = 0; x < alphabet.length; x++)
{
if(alphabet[x] == letter)
{
letterNumber = x + 1;
}
}
for (int j = 0; j <ship.get(shipNumber).getSize(); j++)
{
String position = "" + letterNumber + number;
playerLocationToSet.add(position);
letterNumber = letterNumber + addLetter;
number = number + addNumber;
for (int t = 0; t < ship.size(); t++) }
});
ship.get(i).setLocation(playerLocationToSet);
}
}
}
private void playerShoot()
{
String guess;
String result;
char[] alphabet = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
char letter;
int number;
int guessLetter = 0;
String finalGuess;
while (!CPUship.isEmpty())
{
result = "miss";
label1.setText("Enter a guess");
System.out.println("Enter a guess");
guess = textField1.getText();
guess = guess.toUpperCase();
letter = guess.charAt(0);
number = guess.charAt(1) - 48;
对于我想尝试的这么长的问题抱歉,尽可能清楚。随意问任何问题,无疑我错过了什么。 提前致谢
答案 0 :(得分:3)
有没有办法插入这个&#34; break&#39;或者&#34;暂停&#34;
没有查看代码或代码结构,但一般情况下,您会使用JOptionPane来提示用户输入。这将创建一个模态JDialog,它将停止处理,直到对话框关闭。
阅读How to Make Dialogs上Swing教程中的部分,了解更多信息和示例。