簡體   English   中英

將多個對象添加到2D數組(TicTacToe游戲)

[英]Adding multiple objects to a 2D array (TicTacToe game)

我已經看過了,但是還沒有找到答案,所以我想問一下。

https://web.cs.dal.ca/~srini/cs1101/Assign2.1101.16.pdf這是作業詳細信息的PDF,但是我的詳細信息和代碼應該足夠。

我正在為Tic Tac Toe游戲進行多類分配,但在添加所有對象后為何無法編譯,我遇到了麻煩。 即使我已使用內容初始化整個2D數組,它仍返回null。

這是我的完整程序,我將在底部的可怕問題中包含代碼。

這是X或O對象類

public class XO{
private String name;
private static int turn = 1;

public XO(String name)
{
    if(name == "-")
    {
        name = "-";
    }
    else if(2%turn == 0)
    {
        turn++;
        name = "X";
    }
    else if (2%turn == 1)
    {
        turn++;
        name = "O";
    }
}
public String getName()
{
    return name;
}
public int getTurn()
{
    return turn;
}
public boolean equals(XO xo)
{
    if(xo.getName().equals(name))
    {
        return true;
    }
    else
        return false;
}
public String toString()
{
    return name;

}}

這是TicTakToeBoard類的板“超級”類

public class Board {
protected int rows = 2;
protected int cols = 2;

public Board(int x, int y)
{
    rows = x;
    cols = y;
}
public int getRows()
{
    return rows;
}
public int getCols()
{
    return cols;
}
public void setRows(int r)
{
    rows = r;
}
public void setCols(int c)
{
    cols = c;
}}

這是TicTacToe專用板

public class TicTakToeBoard extends Board{
private static XO board [][];
private int turnCnt = 1;

public TicTakToeBoard(int r, int c)
{
    super(r, c);
    rows = r;
    cols = c;
    board = new XO[rows][cols];
    setXOBoard(rows, cols);
}
public int getBoardRow()
{
    return rows;
}
public int getBoardCols()
{
    return cols;
}
public int getTurnCnt()
{
    return turnCnt;
}
public void setXOBoard(int r, int c)
{
    XO empty = new XO("-");
    XO[][] board = new XO[getBoardRow()][getBoardCols()];
    for (int i = 0; i < r; i++)
    {
        for (int j = 0; j < c; j++) 
        {
            board[i][j] = (empty);
        }
    }
}
public XO getXOBoard(int r, int c)
{
    return board[r][c];
}
public boolean add(int x, int y)
{
    for (int i = 0; i < rows; i++)
    {
        for (int j = 2; i > cols; j--)
        {
            if(board [x][y] != board [i][j])
            {
                if(x <= 2 || x >= 0 && y <= 2 || y >= 0)
                {
                    if(2%turnCnt == 0)
                        board[x][y] = new XO("X");
                    if(2%turnCnt == 1)
                        board[x][y] = new XO("O");
                    turnCnt++;
                    return true;
                }
                else if(x > 2 || x < 0 && y > 2 || y < 0)
                {
                    return false;
                }
            }
        }
    }
    return false;
}
public boolean winner(XO a, XO b)
{
    if(board [0][0] == a && board [1][0] == a && board [2][0] == a)
    {
        return true;
    }
    if(board [0][1] == a && board [1][1] == a && board [2][1] == a)
    {
        return true;
    }
    if(board [0][2] == a && board [1][2] == a && board [2][2] == a)
    {
        return true;
    }
    if(board [0][0] == a && board [0][1] == a && board [0][2] == a)
    {
        return true;
    }
    if(board [1][0] == a && board [1][1] == a && board [1][2] == a)
    {
        return true;
    }
    if(board [2][0] == a && board [2][1] == a && board [2][2] == a)
    {
        return true;
    }
    if(board [0][0] == a && board [1][1] == a && board [2][2] == a)
    {
        return true;
    }
    if(board [2][0] == a && board [1][1] == a && board [0][2] == a)
    {
        return true;
    }
    //Above player 1 wins, below player 2 wins
    if(board [0][0] == b && board [1][0] == b && board [2][0] == b)
    {
        return true;
    }
    if(board [0][1] == b && board [1][1] == b && board [2][1] == b)
    {
        return true;
    }
    if(board [0][2] == b && board [1][2] == b && board [2][2] == b)
    {
        return true;
    }
    if(board [0][0] == b && board [0][1] == b && board [0][2] == b)
    {
        return true;
    }
    if(board [1][0] == b && board [1][1] == b && board [1][2] == b)
    {
        return true;
    }
    if(board [2][0] == b && board [2][1] == b && board [2][2] == b)
    {
        return true;
    }
    if(board [0][0] == b && board [1][1] == b && board [2][2] == b)
    {
        return true;
    }
    if(board [2][0] == b && board [1][1] == b && board [0][2] == b)
    {
        return true;
    }
    else
        return false;
}
public String toString()
{
    return board[0][0]+"\t"
+board[1][0]+"\t"
            +board[2][0]+"\n"
+board[0][1]+"\t"
            +board[1][1]+"\t"
+board[1][2]+"\n"
            +board[0][2]+"\t"
+board[1][2]+"\n"
            +board[2][2];
}}

最后,Play課程(尚未結束)

import java.util.*; 
public class Play {
public static void main(String[]args){
    Scanner k = new Scanner(System.in);
    System.out.println("Hello and welcome to this Tic Tac Toe game!");
    System.out.print("Player 1 name: ");
    String player1 = k.next();
    System.out.print("Player 2 name: ");
    String player2 = k.next();
    TicTakToeBoard b = new TicTakToeBoard(2, 2);
    XO p1 = new XO("X");
    XO p2 = new XO("O");
    for(int i = 1; i==i;i++)
    {
        if(2%i == 0)
        {
            System.out.print("Enter a spot to place your mark. First number within 0 and 2, and the second 0, 2: ");
            int x = k.nextInt();
            int y = k.nextInt();
            b.add(x, y);
            System.out.println(b);  
            if(b.winner(p1,p2)==true)
            {
                System.out.println("Congrats ");
                break;
            }
        }
        if(2%i == 1)
        {
            System.out.print("Enter a spot to place your mark. First number within 0 and 2, and the second 0, 2: ");
            int x = k.nextInt();
            int y = k.nextInt();
            b.add(x, y);
            System.out.println(b);
            if(b.winner(p1,p2)==true)
            {
                System.out.println("Congrats ");
                break;
            }
        }
    }
    System.out.println(b);
}}

大多數情況下,這是有問題的方法,但是我可能有其他錯誤的地方,我很樂意為您指出。

public boolean add(int x, int y)
{
    for (int i = 0; i < rows; i++)
    {
        for (int j = 2; i > cols; j--)
        {
            if(board [x][y] != board [i][j])
            {
                if(x <= 2 || x >= 0 && y <= 2 || y >= 0)
                {
                    if(2%turnCnt == 0)
                        board[x][y] = new XO("X");
                    if(2%turnCnt == 1)
                        board[x][y] = new XO("O");
                    turnCnt++;
                    return true;
                }
                else if(x > 2 || x < 0 && y > 2 || y < 0)
                {
                    return false;
                }
            }
        }
    }
    return false;}

我知道我在這里要求很多,但是任何幫助都將不勝感激,因為我們對2D數組或繼承的了解不是很好,所以我只需要學習講義即可。 至少可以這樣說,這項工作占用了我春假的幾天,其余的則讓我感到壓力。

非常感謝,我睡在上面,明天再來:)

for(r = 0; r >= 3; r++)
{
    for(c = 0; c >= 3; c++)
    {
        board[r][c] = new XO("-");
    }
}

您的循環不會執行任何操作; r開頭為0,0不大於r <= 3可能是您想要的。

這是使其適用於任何尺寸的電路板的方法:

char[][] board = new char[rows][cols];

for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
        board[i][j] = '-';
    }
}

您有一行:

private static XO board [][];

你從來沒有分配數組,即。 您沒有分配內存來保存XO 您需要執行以下操作:

board = new XO[rows][cols]; // allocate memory to hold your XO's
setXOBoard(rows,cols);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM