元の質問に対するコメントに基づいて、それはセマンティクスの問題であることを理解しています。
プレーヤーの観点からは、ボードはマトリックスではありません。あなたが暗示しているように、最後の位置(16 * 4 = 64)の後にプレーヤーを最初の位置に「テレポート」するのは単なる直線です。
そして、GameEngine の観点からは、行上の位置をマトリックスの境界上のセルに変換する問題です。
したがって、GamePiece
オブジェクトにはposition
0 で初期化されたプロパティがあると考えてください。 には、 で初期化されたBoardGame
プロパティと、 equalsである別のプロパティがあります。boardSide
16
boardLength
boardSide * 4
ここで、プレーヤーが移動しようとするたびに、ボードから「落ちない」ことを確認してから、画面上に適切に配置する必要があります。
コードは次のようになります。
// When updating the game state
private void move(GamePiece piece, int spaces) {
int destination = piece.position + spaces;
if (destination >= BoardGame.boardLength) {
destination -= BoardGame.boardLength;
}
piece.position = destination;
}
// When updating the game view
private void updateView() {
(...)
// Considering you store the game pieces on the gamePieces collection
for (GamePiece p: gamePieces) {
int side = Math.floor(p.position % BoardGame.boardSide); // Either 0, 1, 2 or 3
switch (side) {
case 0: // Top
// Place Piece method takes: the piece, the X position and the Y position
BoardGame.placePiece(p, BoardGame.boardSide - p.position, 0);
break;
case 1: // Right
break;
case 2: // Bottom
break;
case 3: // Left
break;
}
}
(...)
}
PS:私は今とても急いでいて、コードを適切に仕上げることができません。これが役立つことを願っていますが、後で戻って終了しようとします。