/** 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;
}
Vous aurez probablement besoin de méthodes opérant sur deux arguments (x et y at).
Pour la conversion ID-> pièce et vice versa vous avez différentes approches disponibles. Lequel choisir dépend des exigences exactes (vitesse, taille du jeu ...). Assurez-vous donc de masquer les détails d'implémentation, afin de pouvoir les modifier ultérieurement.
Je commencerais avec une vraie solution facile:
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;
}
}
espoir que vous permet de démarrer. Tout le code est écrit sans compilateur à proximité, donc il inclura des fautes de frappe et bien sûr des bogues, qui peuvent être distribués sous licence creative commons.
L'approche de garder les pièces dans un ensemble devrait bien fonctionner s'il n'y a pas beaucoup de pièces. Cela devrait fonctionner mieux qu'un tableau 2D tant que la plupart des cartes ne contiennent pas de pièces. Le tout suppose actuellement qu'il n'y a pas de chevauchement des pièces. Si vous avez besoin de ces getPieceOnTile, vous devez retourner une collection de pièces. Un ensemble si l'ordre n'a pas d'importance, une liste si c'est le cas.
Du code pour getPixelPosition() et j'accepte votre réponse :) –
Geez ClickUpvote prend un indice. Utiliser l'écran comme modèle n'est pas un bon design. utiliser un modèle de mémoire. la couleur et la position sont des attributs indépendants. Vous pouvez également utiliser le modèle de mémoire pour stocker d'autres attributs. http://www.fastgraph.com/qfrip.html comme exemple – jim
Sans connaître l'attribut x, y comment puis-je dessiner l'image-objet sur l'écran pour indiquer qu'il est déplacé d'un carreau à l'autre?! –