首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GameOver不出现

GameOver不出现
EN

Stack Overflow用户
提问于 2021-09-16 12:06:44
回答 1查看 38关注 0票数 0

我编写了一个TicTacToe游戏。我创建了一个列表来检查游戏是否已经结束或者还在继续(checkGameOver)。而另一个看起来很相似,但它是为了检查谁赢了,应该打印出来,那个玩家1或2已经赢了。当我运行游戏时,当我玩顶部的行字段12,2,3。计算机打印的信息,进程已经完成。但是当我打四、五、六或其他任何一场比赛的时候,游戏不会结束。

如果你知道这个问题,请告诉我,我不能把全部代码发给你。

代码语言:javascript
运行
复制
   *public static boolean checkGameOver(char [][] gameBoard){
    List topRow = Arrays.asList(1, 2, 3);
    List midRow = Arrays.asList(4, 5, 6);
    List botRow = Arrays.asList(7, 8, 9);

    List leftCol = Arrays.asList(1, 4, 7);
    List midCol = Arrays.asList(2, 5, 8);
    List rightCol = Arrays.asList(3, 6, 9);

    List cross1 = Arrays.asList(1, 5, 9);
    List cross2 = Arrays.asList(7, 5, 3);

    List<List> gameOver = new ArrayList<List>();
    gameOver.add(topRow);
    gameOver.add(midRow);
    gameOver.add(botRow);
    gameOver.add(leftCol);
    gameOver.add(midCol);
    gameOver.add(rightCol);
    gameOver.add(cross1);
    gameOver.add(cross2);

    for(List l : gameOver) {
        if(playerPositions.containsAll(l) || computerPositions.contains(l)) {
            return true;
        } else {
            return false;
        }
    }

    return false;
}

public static String checkWinner(char [][] gameBoard) {

    List topRow = Arrays.asList(1, 2, 3);
    List midRow = Arrays.asList(4, 5, 6);
    List botRow = Arrays.asList(7, 8, 9);

    List leftCol = Arrays.asList(1, 4, 7);
    List midCol = Arrays.asList(2, 5, 8);
    List rightCol = Arrays.asList(3, 6, 9);

    List cross1 = Arrays.asList(1, 5, 9);
    List cross2 = Arrays.asList(7, 5, 3);

    List<List> gameOver = new ArrayList<List>();
    gameOver.add(topRow);
    gameOver.add(midRow);
    gameOver.add(botRow);
    gameOver.add(leftCol);
    gameOver.add(midCol);
    gameOver.add(rightCol);
    gameOver.add(cross1);
    gameOver.add(cross2);

    for(List l : gameOver) {
        if(playerPositions.containsAll(l)) {
            return "Glückwunsch du hast gewonnen!";
        } else if(computerPositions.contains(l)) {
            return "Computer hat gewonnen!";
        } else if(playerPositions.size() + computerPositions.size() == 9) {
            return "Unentschieden!";
        }
    }

    return "";
}*
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-16 12:08:44

删除"return false;“。

代码语言:javascript
运行
复制
    for(List l : gameOver) {
        if(playerPositions.containsAll(l) || computerPositions.contains(l)) {
            return true;
        } else {
            return false;  // Remove this.
        }
    }

假设gameOver不是空的,这个循环只对第一个元素执行,因为它总是从循环体内部返回。

在检查是否有胜利者的方法和检查谁是胜利者的方法中,复制游戏而不是逻辑是远远不够理想的。

应该将枚举定义为checkGameOver方法的返回值:

代码语言:javascript
运行
复制
enum Winner {
  PLAYER, COMPUTER, NONE
}

然后你就可以做这样的事情:

代码语言:javascript
运行
复制
for(List l : gameOver) {
   if (playerPositions.containsAll(l)) return Winner.PLAYER;
   if (computerPositions.containsAll(l)) return Winner.COMPUTER;
}
return Winner.NONE;

然后,您可以检查方法的返回值(例如,使用开关),以打印出相应的消息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69208115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档