试图从“主菜单”类中调用方法,但是它被卡住了,但是当从方法类中调用时,它可以正常工作

时间:2020-01-20 22:56:20

标签: java

为了进行编码挑战,我决定制造游戏战舰。但是,当调用runGameAgainstAi()方法时,它拒绝工作,只是绘制网格而不是允许功能,它可能停留在while循环中,但我无法查明确切的问题。任何想法表示赞赏。

runGameAgainstAI代码:

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();
        }

    }

1 个答案:

答案 0 :(得分:0)

乍一看,此循环中的代码将无休止。需要在...内部更新cpuGameTurn ...

cpuGameTurn = "Picking";
while (true) {

    sleep(100);

    if (cpuGameTurn.equals("Picking")) {
        servermsg.setText("Select a cell and fire!");
    } 
.
.
.
相关问题