根据您对原始问题的评论,我理解这是语义问题。
从玩家的角度来看,棋盘不是矩阵,正如您所暗示的那样,它只是一条直线,恰好在最后一个位置(16 * 4 = 64)之后将玩家“传送”到第一个位置。
从 GameEngine 的角度来看,就是将线上的位置转换为矩阵边界上的单元格。
因此,假设您的GamePiece
对象有一个position
属性,用 0 初始化。 具有用 0初始化BoardGame
的属性和另一个等于 的属性。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:我现在很着急,无法正确完成代码。希望这会有所帮助,但我稍后会回来并尝试完成它。