[英]Trying to call a method from a "main-menu" class but it is stuck, however when called from the methods class it works perfect
For a coding challenge, I decided to make the game battleship.为了应对编码挑战,我决定制作游戏战舰。 However, when calling the runGameAgainstAi() method, it refuses to work and simply draws the grid instead of allowing functionality, It may be stuck in the while loop but I have been unable to pinpoint the exact issue.然而,当调用 runGameAgainstAi() 方法时,它拒绝工作并简单地绘制网格而不是允许功能,它可能卡在 while 循环中但我无法查明确切的问题。 Any idea is appreciated.任何想法表示赞赏。
runGameAgainstAI code:运行GameAgainstAI代码:
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!");
}
}
Self Testing main method for run game against ai:对ai运行游戏的自测主要方法:
else {
try {
cui = new ClientUI();
cui.runGameAgainstAI();
}
Main-menu code in separate class trying to call the runGameAgainstAI Method尝试调用 runGameAgainstAI 方法的单独类中的主菜单代码
else if (evt.getSource() == btnSinglePlayer) {
try {
ClientUI c = new ClientUI();
c.runGameAgainstAI();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
At first glance, the code will be endlessly in this loop.乍一看,代码会在这个循环中无穷无尽。 Need to update cpuGameTurn inside the if...需要在 if... 中更新 cpuGameTurn
cpuGameTurn = "Picking";
while (true) {
sleep(100);
if (cpuGameTurn.equals("Picking")) {
servermsg.setText("Select a cell and fire!");
}
.
.
.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.