繁体   English   中英

试图从“主菜单”类调用方法但它被卡住了,但是当从方法类调用时它工作完美

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM