Java - 如何使实例的实例在主实例中获取变量?

时间:2015-11-21 12:54:27

标签: java arrays character instance tic-tac-toe

这是我第一次访问Stackoverflow,之前可能会问过这个问题,但是我找到这些线程时遇到了一些麻烦。我目前正在开发Tic Tac Toe Android游戏,这是我制作应用程序的第一个项目。

案例是我正在我的PlayState班上工作,游戏的主要部分将在那里进行。 PlayState是您在菜单中选择它时显示的实例。这就是我在PlayState

中完成的方式

因为我有PlayState作为实例,不想有任何静态方法。我还创建了一个EndMechanism - 类,它是作为PlayState中的实例创建的。该课程检查Wins / Lose / Draw。我想这样做的方法是让每个Tile(3x3)获得一个由循环中的变量标记的Character(X或O)。

boardTileMark[row][col] = 'x';

我已成功使用Character类:

boardTiles = new BoardTile[3][3]; // To make the Tiles 3 by 3
boardTileMark = new Character[boardTiles.length][boardTiles[0].length];

我使用真实BoardTile的大小来制作标记的大小数量。所以到目前为止一切都在运作。

然后它将EndMechanism - 类作为实例:

endMech = new EndMechanism();

到目前为止,当我按下一个正方形时,它不会详细介绍所有工作原理,它会得到一个X或O(图形)boardTile以及一个字母' x'或者' o' o在boardTileMark上给出了平行线。

现在是问题所在:

由于我想检查EndMechanism是否赢,抽奖或遗失,我真的不确定如何将这些标记带入EndMechanism,而不会复制值,然后在EndMechanism中生成相同的代码。

这就是我将boardTileMark设置为x或o的方式。

public void markBoardTiles(){
        for(int row = 0;row < boardTiles.length;row++){
            for(int col = 0;col < boardTiles[0].length;col++){
                if(boardTiles[row][col].selected() && boardTiles[row][col].cross()){
                    boardTileMark[row][col] = 'x';
                }
                else if(boardTiles[row][col].selected() && boardTiles[row][col].circle()){
                    boardTileMark[row][col] = 'o';
                }
            }
        }
    }

如果有什么令人困惑的事情请告诉我,我会更好地描述它。谢谢您的时间:))

PS:我试图让这个游戏尽可能坚固,所以我可以将它用于另一个项目。因此,保持游戏本身和同一级别的胜利检查不是我打算做的。

1 个答案:

答案 0 :(得分:0)

我认为你的描述过于宽泛,所以这个问题有点不清楚,并且包含了许多对你的问题不重要的信息,从而减少了获得答案的机会。

正如我所理解的那样,你的整个描述可以简化为:&#34;我有一个类PlayState,这个类包含二维标记数组和一个类EndMechanism的实例。类EndMechanism的实例需要访问来自PlayState1类的二维标记数组。&#34;

如果它是对的那么你真正的问题是如何访问外类的变量。这样的问题在Java中很流行,并且在其他问题中已经有了答案,例如:

access variables of outer class in Java

所以我将此问题标记为重复,但我仍会提供答案。

但在你的情况下,我不会仅为检查结束条件创建一个新类(EndMechanism),但我会将检查结束条件的函数放在PlayState类中。检查结束条件与markBoardTiles函数的功能类似,因此它应该在同一个类中。如果它在同一个类中,您将不必处理所描述的问题。通常,如果某些课程,我们说X仅使用课程Y中的变量而课程X具有与Y相同的功能,则函数来自{{} 1}}应该在班级X

但是如果你想继续使用当前的方法,你应该在你的Y类中调用PlayState.this.markBoardTiles,然后你就可以访问markBoardTiles变量了。