/** size of a tile in pixel (for one dimension)*/
int TILE_SIZE_IN_PIXEL = 4;
/** size of a piece in tiles (for one dimension)*/
int PIECE_SIZE_IN_TILE = 5;
public int tileToPixel(int positionInTiles){
return TILE_SIZE_IN_PIXEL * positionInTiles;
}
/** returns the tile coordinate to which the given tile coordinate belongs
Note: tileToPixel(pixelToTile(x)) only returns x if x is the upper or left edge of a tile
*/
public int pixelToTile(int positionInPixel){
return positionInPixel/TILE_SIZE_IN_PIXEL;
}
Sie werden wahrscheinlich wollen, dass Methoden auch mit zwei Argumenten arbeiten (x und y at).
Für die ID-> Stückumwandlung und umgekehrt stehen Ihnen verschiedene Ansätze zur Verfügung. Welche zu wählen ist, hängt von den genauen Anforderungen ab (Geschwindigkeit, Größe des Spiels ...). Stellen Sie daher sicher, dass Sie die Implementierungsdetails ausblenden, damit Sie sie später ändern können.
würde ich mit einer echten einfachen Lösung starten:
public class Piece{
/** x position measured in tiles */
private int x;
/** y position measured in tiles */
private int y;
/** I don't think you need this, but you asked for it. I'd pass around Piece instances instead */
private final Long id;
public void getX(){
return x;
}
public void getY(){
return y;
}
public void getID(){
return id;
}
}
public class Board(){
private Set<Long,Piece> pieces = new HashMap<Piece>(pieces);
public Piece getPieceOnTile(int tileX, int tileY){
for(Piece piece:pieces){
if (isPieceOnTile(piece, tileX, tileY)) return piece;
}
}
private boolean isPieceOnTile(piece, tileX, tileY){
if (piece.getX() < tileX) return false;
if (piece.getX() > tileX + PIECE_SIZE_IN_TILE) return false;
if (piece.getY() < tileY) return false;
if (piece.getY() > tileY + PIECE_SIZE_IN_TILE) return false;
return true;
}
}
Hoffnung, die Du gestartet wird. Der gesamte Code wird ohne einen Compiler in der Nähe geschrieben, so dass Tippfehler und natürlich Bugs enthalten sind, die unter der Creative-Commons-Lizenz vertrieben werden.
Der Ansatz, die Teile in einem Satz zu behalten, sollte gut funktionieren, wenn es nicht zu viele Teile gibt. Es sollte besser funktionieren als ein 2D-Array, solange die meisten Board-Bereiche kein Stück enthalten. Das Ganze geht derzeit davon aus, dass es keine überlappenden Teile gibt. Wenn Sie diese benötigen, muss getPieceOnTile eine Sammlung von Stücken zurückgeben. Ein Set, wenn die Reihenfolge keine Rolle spielt, eine Liste, wenn es so ist.
Irgendein Code für das getPixelPosition() und ich werde deine Antwort annehmen :) –
Geez ClickUpvote nehmen einen Hinweis. Verwenden Sie den Bildschirm als das Modell ist kein gutes Design. Verwenden Sie ein Speichermodell. Farbe und Position ist ein unabhängiges Attribut. Sie können das Speichermodell auch zum Speichern anderer Attribute verwenden. http://www.fastgraph.com/qfrip.html als Beispiel – jim
Ohne das x, y-Attribut zu kennen, wie kann ich das Sprite auf dem Bildschirm zeichnen, um anzuzeigen, dass es von einer Kachel zur anderen verschoben wurde?! –