Java Tic Tac Toe 错误

标签 java string arraylist gridworld

根据规范,我必须使用 GridWorld 制作一个功能正常的 Tic Tac Toe 游戏。我已经完成了大部分类(class),但有一个方法我一直坚持不下去。我不知道如何检查对角线或垂直方向是否有赢家。下面是方法。

public String getWinner()
{
    Grid<Piece> grid = getGrid();
    if(grid == null)
    {
        return "no winner";
    }

    String winner = "";
    for (int r = 0; r<grid.getNumRows(); r++)
    {
        Piece row0 = grid.get(new Location(r,0));
        Piece row1 = grid.get(new Location(r,1));
        Piece row2 = grid.get(new Location(r,2));

        if(row0 == null || row1 == null || row2 == null)
        {
            continue;
        }

        if(row0.getName().equals(row1.getName()) && row0.getName().equals(row2.getName()))
        {
            winner = row0.getName()+ " wins horizontally!";
            break;
        }
    }

    //check for vertical winner

    //check for diagonal winner


    if(isWorldFull() && winner.length() == 0)
    {
        winner =  "cat's game - no winner!\n\n";
    }
    else if(!isWorldFull() && winner.length() == 0)
    {
        winner = "no winner";
    }

    return winner;
}

任何和所有的帮助将不胜感激。

最佳答案

// vertically
for (int c = 0; r<grid.getNumCols(); c++)
{
    Piece col0 = grid.get(new Location(0,c));
    Piece col1 = grid.get(new Location(1,c));
    Piece col2 = grid.get(new Location(2,c));

    if(col0 == null || col1 == null || col2 == null)
    {
        continue;
    }

    if(col0.getName().equals(col1.getName()) && col0.getName().equals(col2.getName()))
    {
        winner = col0.getName()+ " wins vertically!";
        break;
    }
}

// diagonal 1
for (int x = 0; r<grid.getNumRows(); x++)
{
    Piece d0 = grid.get(new Location(x,x));
    Piece d1 = grid.get(new Location(x,x));
    Piece d2 = grid.get(new Location(x,x));

    if(d0 == null || d1 == null || d2 == null)
    {
        continue;
    }

    if(d0.getName().equals(d1.getName()) && d0.getName().equals(d2.getName()))
    {
        winner = d0.getName()+ " wins diagonally!";
        break;
    }
}

// diagonal 2
for (int x = 0; r<grid.getNumRows(); x++)
{
    Piece d0 = grid.get(new Location(x,2-x));
    Piece d1 = grid.get(new Location(x,2-x));
    Piece d2 = grid.get(new Location(x,2-x));

    if(d0 == null || d1 == null || d2 == null)
    {
        continue;
    }

    if(d0.getName().equals(d1.getName()) && d0.getName().equals(d2.getName()))
    {
        winner = d0.getName()+ " wins diagonally!";
        break;
    }
}

请注意,您可以将用于比较三个单元格 (row0,1,2,col0,1,2,d0,1,2) 的代码提取到一个单独的方法中,如下所示:

boolean check3Pieces(Piece p0, Piece p1, Piece p2, String caption) {
    if(p0 == null || p1 == null || p2 == null)
    {
        return false;
    }

    if(p0.getName().equals(p1.getName()) && p0.getName().equals(p2.getName()))
    {
        winner = p0.getName()+ " " + caption;
        return true;
    }
    return false;
}

关于Java Tic Tac Toe 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21592109/

相关文章:

java - 使用 Axis2 创建 Web 服务的步骤 - 客户端代码

c# - 如何从目录 c# 中读取所有文件?

java - ArrayList 的不安全或未经检查的操作

java - 为什么我的 ArrayList 中填充有重复的节点值?

java - 在一个类中调用 getName() 方法有效,但在另一个类中则无效

java - Jena/ARQ : Difference between Model, 图形和数据集

java - 修改自定义注解的参数值

java - 今天第一次使用 eclipse...而且 eclipse 我真的不喜欢它。还有哪些其他更清洁的替代方案?

c++ - 如何从文件中生成 "2 dimentional vector"行 X 字?

javascript - 从字符串中提取唯一字符并保留字符串之间的空格