我在想是否有陈述,但我不确定它是如何起作用的。
if(user.position >= gameBoard[0]) //user.position is the player position on the board
passGo = true;
但是这会引发超过0的任何事情。那么一旦他们通过然后取消,我怎么能让它成为标志?
答案 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;
}
这是处理掷骰子的简单方法。然后,您需要单独编程每张机会卡。在开始/结束时不要进行所有的位置检查。它变得非常复杂。