if ステートメントを考えていましたが、どのように機能するかわかりません..
if(user.position >= gameBoard[0]) //user.position is the player position on the board
passGo = true;
しかし、これは 0 を超えるものに対して開始されます。
if ステートメントを考えていましたが、どのように機能するかわかりません..
if(user.position >= gameBoard[0]) //user.position is the player position on the board
passGo = true;
しかし、これは 0 を超えるものに対して開始されます。
モノポリーのルールとゲームプレイを考えると、ゲーム自体が空間を移動することと空間に直接テレポートすることを区別していることを理解してください。(たとえば、「刑務所に直接行きます。Go を渡さないでください。200 ドルを収集しないでください。」)
したがって、コードがこれを行っている場合、モノポリーのその部分が欠けています。
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 を超えることはありません。
こうすることで、ユーザーがどこにいて、どこにいて、その間に何が起こったのかを把握しようとする数学とロジックに没頭する必要がなくなります。代わりに、宇宙から宇宙へと移動し、途中でゲームのルールを適用します。
ユーザーが移動の開始時に GO の前にいて、移動の終了時に GO の後にいた場合、ユーザーは GO を通過したことになります。そのため、以前の位置も記録することを検討してください...
サイコロを振ると:
user.position += diceRoll;
if(user.position >= 40)
{
//award $200
user.position -= 40;
}
これはサイコロを振るための簡単なものです。次に、それぞれのチャンス カードを個別にプログラムする必要があります。ターンの開始時/終了時にすべての位置チェックを行わないでください。非常に複雑になります。