一旦他/她通过垄断GO,我怎么能只给玩家一次?

时间:2013-11-11 16:45:45

标签: java

我在想是否有陈述,但我不确定它是如何起作用的。

if(user.position >= gameBoard[0])     //user.position is the player position on the board
          passGo = true;

但是这会引发超过0的任何事情。那么一旦他们通过然后取消,我怎么能让它成为标志?

3 个答案:

答案 0 :(得分:0)

用户已经通过了GO,如果他在移动开始时已经在GO之前,并且在移动结束之后已经过GO。所以考虑记录以前的位置......

答案 1 :(得分:0)

考虑到垄断的规则和游戏玩法,要明白游戏本身区分跨越空间移动和直接传送到空间。 (例如,“直接去监狱。不要通过去,不要收200美元。”)

因此,如果您的代码正在执行此操作,那么您将错过Monopoly的那部分:

user.position = newposition;

相反,请考虑在用户的当前位置和新位置之间循环。在伪代码中,更像是这样的东西:

while (user.position != newposition) {
    // move the user to the next position
    // apply the rules for that position
    // in special cases where movement is interrupted, break out of the loop
}

在这种情况下,您将在循环的每次迭代中应用游戏逻辑。如果循环中的“当前”位置是Go,那么您应用收集$ 200的逻辑。在用户被“传输”(例如直接进入Jail)的情况下,通过明确地将user.position更改为Jail位置来中断循环,因此循环永远不会越过Go。

这样你就不会把自己埋没在数学和逻辑中,试图找出用户在哪里,用户在哪里,以及两者之间发生了什么。相反,你正在从一个空间移动到另一个空间并沿途应用游戏规则。

答案 2 :(得分:0)

掷骰子时:

user.position += diceRoll;
if(user.position >= 40)
{
    //award $200
    user.position -= 40;
}

这是处理掷骰子的简单方法。然后,您需要单独编程每张机会卡。在开始/结束时不要进行所有的位置检查。它变得非常复杂。