我有一个有2个玩家的游戏。当玩家轮到其他玩家时,其他玩家无法点击他的棋子(位于TilePane中)。当玩家进行游戏时,计数器会增加,因此很容易检查它的转弯。
public void switchPlayer() {
if (this.counter % 2 == 0) {
drawer.getBlackPane().getStyleClass().remove("play");
drawer.getWhitePane().getStyleClass().add("play");
drawer.getBlackPane().setDisable(true);
drawer.getWhitePane().setDisable(false);
} else {
drawer.getWhitePane().getStyleClass().remove("play");
drawer.getBlackPane().getStyleClass().add("play");
drawer.getWhitePane().setDisable(true);
drawer.getBlackPane().setDisable(false);
}
}
css风格在Pane周围绘制绿色边框,其中包含玩家轮到它的碎片。
我怎么能避免这种重复?我想添加一个布尔值和一个Pane作为这个方法的参数,但我似乎无法解决这个问题。
答案 0 :(得分:2)
只需将play
css类替换为disabled
伪类(请参阅CSS reference)。
E.g。 (假设您已将player-pane
类添加到黑色和白色窗格中):
.player-pane {
/* style for active player pane */
}
.player-pane:disabled {
/* style for inactive player pane */
}
您还可以使用布尔变量(+否定)来设置disable
属性:
public void switchPlayer() {
boolean whiteTurn = (this.counter % 2 == 0);
drawer.getBlackPane().setDisable(whiteTurn);
drawer.getWhitePane().setDisable(!whiteTurn);
}
答案 1 :(得分:1)
你可以做到
private void updateTurns(Node active, Node inactive) {
inactive.getStyleClass().remove("play");
active.getStyleClass().add("play");
inactive.setDisable(true);
active.setDisable(false);
}
然后
public void switchPlayer() {
if (this.counter % 2 == 0) {
updateTurns(drawer.getWhitePane(), drawer.getBlackPane());
} else {
updateTurns(drawer.getBlackPane(), drawer.getWhitePane());
}
}