我正在用Ruby写一个国际象棋引擎。
我有一个Game
类,它由两个属性组成:
:board
,我Board
班的一个实例。 Board
类包含两个属性:
:white
,我Player
班的一个实例。:black
,我Player
班的一个实例。 Player
类由片段位置组成,表示为位串:
:pawns, :knights, ..., :king
我希望Player
类有类似in_check?
的方法来指示该播放器是否在检查中。但是,这需要@white
知道@black,
类中的Board
的值。
有没有办法可以从@black
访问变量@white
,而无需将黑色部分的位置明确地作为参数传递给in_check
方法?
答案 0 :(得分:1)
让@white
和@black
分别向董事会询问支票。
更新
嗯,我想这里有很多假设,所以让我们写下来看看我们是否有一些共同点:
class Board
def initialize
...
@black = Player.new(self, other_args*)
@white = Player.new(self, other_args*)
...
end
def am_i_in_check?(player)
case player
when @black
return does_white_check_black?
when @white
return does_black_check_white?
end
end
...
end
class Player
...
def initialize(board,...)
...
@board=board
...
end
...
def wants_to_know_whether_it_is_checked
@board.am_i_in_check?(self)
...
end
...
end
我猜上面有隐藏的拼写错误,但它现在应该描述我的想法。
答案 1 :(得分:1)
第一个玩家可以在步骤之前或之前将消息"you're in check"
传递给另一个玩家。
访问变量不是一个好主意,它会导致未来的问题,而是传递消息。