Java 试图从“调用”中调用方法;“主菜单”;类,但它被卡住了,但是当从methods类调用时,它工作得非常好
为了应对编码挑战,我决定制作游戏《战舰》。但是,当调用runGameAgainstAi()方法时,它拒绝工作,只绘制网格而不允许使用功能,它可能会陷入while循环,但我无法确定确切的问题。任何想法都值得赞赏 runGameAgainstAI代码:Java 试图从“调用”中调用方法;“主菜单”;类,但它被卡住了,但是当从methods类调用时,它工作得非常好,java,Java,为了应对编码挑战,我决定制作游戏《战舰》。但是,当调用runGameAgainstAi()方法时,它拒绝工作,只绘制网格而不允许使用功能,它可能会陷入while循环,但我无法确定确切的问题。任何想法都值得赞赏 runGameAgainstAI代码: public void runGameAgainstAI() throws IOException, InterruptedException { // create the CPU object and initialize variab
public void runGameAgainstAI() throws IOException, InterruptedException {
// create the CPU object and initialize variables for the game
cpu = new CPU();
title.setText("Player 1");
cpuGameTurn = "Picking";
btnFire.setEnabled(true);
boolean hasWon = false;
// game loop
while (true) {
sleep(100);
// this is reserved for when the human player is selecting a cell
// by firing a valid shot, cpuGameTurn is set to "Picked"
if (cpuGameTurn.equals("Picking")) {
servermsg.setText("Select a cell and fire!");
}
// upon shooting, the cpu checks if the shot hit
// this condition is met when the btnFire is clicked
// while selecting a valid cell
else if (cpuGameTurn.equals("Picked")) {
// check if the shot hit the cpu ships
boolean hit = cpu.checkHit(eb.getRclick(), eb.getCclick());
// place a corresponding marker
if (hit) {
eb.placeHitMarker(eb.getRclick(), eb.getCclick());
} else {
eb.placeMissMarker(eb.getRclick(), eb.getCclick());
}
// create the shot record
sl.insert(new ShotRecord(eb.getRclick(), eb.getCclick(), hit, "You"));
txaSList.setText(sl.toString());
// if the cpu lost break, hasWon will be true
hasWon = cpu.checkLost();
if (hasWon) {
break;
}
// set the turn to cpu
cpuGameTurn = "cpu";
}
// when it is the cpu turn
else if (cpuGameTurn.equals("cpu")) {
// get the cpu shot, and check if it hit
int shot[] = cpu.shoot();
boolean hit = pb.checkEnemyShot(shot[0], shot[1]);
// create the shot record
sl.insert(new ShotRecord(shot[0], shot[1], hit, "CPU"));
txaSList.setText(sl.toString());
// if the cpu won break, hasWon will be false
if (pb.hasLost()) {
break;
}
// set the turn back to waiting for human to shoot
cpuGameTurn = "Picking";
}
}
if (hasWon) {
servermsg.setText("You won!");
} else {
servermsg.setText("You lost!");
}
}
针对ai运行游戏的自我测试主要方法:
else {
try {
cui = new ClientUI();
cui.runGameAgainstAI();
}
试图调用runGameAgainstAI方法的单独类中的主菜单代码
else if (evt.getSource() == btnSinglePlayer) {
try {
ClientUI c = new ClientUI();
c.runGameAgainstAI();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
乍一看,代码将无休止地在这个循环中。需要在if中更新cpuGameTurn
cpuGameTurn = "Picking";
while (true) {
sleep(100);
if (cpuGameTurn.equals("Picking")) {
servermsg.setText("Select a cell and fire!");
}
.
.
.