![](/img/trans.png)
[英]method works only in main class but not when called from its other class
[英]Trying to call a method from a "main-menu" class but it is stuck, however when called from the methods class it works perfect
为了应对编码挑战,我决定制作游戏战舰。 然而,当调用 runGameAgainstAi() 方法时,它拒绝工作并简单地绘制网格而不是允许功能,它可能卡在 while 循环中但我无法查明确切的问题。 任何想法表示赞赏。
运行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!");
}
}
对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!");
}
.
.
.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.