有很多类,因此我只是要简化问题。基本上我有不同的物体的2D阵列:如果对象无法在二维数组中移动,则返回true
对象:
'*' - Blockcade
'.' - Dot
' ' - Empty
'A' - Player
'B' - Player
***************
**** * * ******
**** **** * *
*..A* *B**
***************
我所定义的方法,其getObject(x, y)
在由x
和y
坐标指定的位置返回的对象。
玩家有方法:getX()
和getY()
它返回玩家对象的x
和y
坐标。
我想要做的是创建一个方法,如果两个玩家的周围图块都是'*'
对象或'.'
对象,则返回true。因此,例如,如果玩家的右侧,左侧,顶部和底部图块被'*'
和'.'
对象包围,则该方法应该返回true。
***************
**** * * ******
**** **** * * = True
*..A* *B**
***************
***************
**** * * ******
**** **** *
*..A B** = False
***************
我试过,我想这样做的方法是如下:
public Boolean cantMove() {
return (((game.getObject(player1.getX(), player1.getY() + 1) instanceof Blockcade) || (game
.getObject(player1.getX(), player1.getY() + 1) instanceof Dot))
&& ((game.getObject(player1.getX(), player1.getY() - 1) instanceof Blockcade) || (game
.getObject(player1.getX(), player1.getY() - 1) instanceof Dot))
&& ((game.getObject(player1.getX() + 1, player1.getY()) instanceof Blockcade) || (game
.getObject(player1.getX() + 1, player1.getY()) instanceof Dot))
&& ((game.getObject(player1.getX() - 1, player1.getY()) instanceof Blockcade) || (game
.getObject(player1.getX() - 1, player1.getY()) instanceof Dot))
&& ((game.getObject(player2.getX(), player2.getY() + 1) instanceof Blockcade) || (game
.getObject(player2.getX(), player2.getY() + 1) instanceof Dot))
&& ((game.getObject(player2.getX(), player2.getY() - 1) instanceof Blockcade) || (game
.getObject(player2.getX(), player2.getY() - 1) instanceof Dot))
&& ((game.getObject(player2.getX() + 1, player2.getY()) instanceof Blockcade) || (game
.getObject(player2.getX() + 1, player2.getY()) instanceof Dot)) && ((game
.getObject(player2.getX() - 1, player2.getY()) instanceof Blockcade) || (game
.getObject(player2.getX() - 1, player2.getY()) instanceof Dot)));
}
这似乎相当混乱,我觉得如果有一个更好的方式来做到这一点,使代码甚至更好。我不太确定是否有其他方法,所以我希望有人能帮助我。用我现在所拥有的,如果我要添加另一个播放器,例如'C',那么代码会变得更大,并且看起来像是代码的重用。我想知道是否有人知道更好的方法来处理这种情况,或知道一种简化这种方法的方法。谢谢你对那些谁帮助:)