2017-05-02 5 views
0

so im Grunde bin ich ein Spielbrett mit javafx erstellen und ich habe eine Zelle Zustandsklasse, die einen Zeichenwert im Moment abhängig von was in der Zelle zurückgibt. Also im Grunde, wenn die Zelle leer ist, gibt es ' ' zurück, wenn ich einen Spieler darin hat, gibt es '@' und so weiter für verschiedene Zellenzustände zurück. Ich habe mich nur gefragt, wie ich ein Bild anstelle von Zeichen zurückgeben könnte.Wie man ein Bild

public class Cell { 

    CellState cellState; 

    public Cell(CellState newCellState) { 
     cellState = newCellState; 
    } 

    public CellState getCellState() { 
     return cellState; 
    } 

    public void setCellState(CellState newCellState) 
    { 
     cellState = newCellState; 
    } 

    public char displayCellState() 
    { 
     return getCellStateCharacter(cellState); 
    } 

    public char getCellStateCharacter(CellState newCellState) 
    { 
     switch (newCellState) 
     { 
     case EMPTY: 
      return ' '; 
     case PLAYER: 
      return '@'; 
     case MONSTER: 
      return '&'; 
     case POISON: 
      return '*'; 
     case BLOCKED: 
      return '#'; 
     default: 
      return ' '; 
     } 

    } 


} 

MY CELL STATE CLASS

public enum CellState 
    { 
    EMPTY, 
    PLAYER, 
    MONSTER, 
    POISON, 
    BLOCKED 
    }; 



public class GameBoard { 
static final int BOARD_WIDTH = 10; 
static final int BOARD_HEIGHT = 10; 

Cell[][] boardCells; 
int width; 
int height; 

public GameBoard() 
{ 
    boardCells = new Cell[BOARD_WIDTH][BOARD_HEIGHT]; 

    width = BOARD_WIDTH; 
    height = BOARD_HEIGHT; 
} 

public void initGameBoard() 
{ 
    for (int i = 0; i < height; ++i) 
    { 
     for (int j = 0; j < width; ++j) 
     { 
      boardCells[j][i] = new Cell(CellState.EMPTY); 
     } 
    } 

    boardCells[0][0].setCellState(CellState.PLAYER); 

    boardCells[2][4].setCellState(CellState.MONSTER); 
    boardCells[2][6].setCellState(CellState.MONSTER); 

    boardCells[7][8].setCellState(CellState.POISON); 

    boardCells[5][0].setCellState(CellState.BLOCKED); 
    boardCells[5][1].setCellState(CellState.BLOCKED); 
    boardCells[5][2].setCellState(CellState.BLOCKED); 
    boardCells[5][3].setCellState(CellState.BLOCKED); 

} 

public String displayBoard() 
{ 
    String output = ""; 
    output +="| |"; 
    for (int i = 0; i < width; ++i) 
    { 
     output +=i + "|"; 
    } 
    output +="\n"; 

    for (int j = 0; j < height; ++j) 
    { 
     output +="|" + j + "|"; 
     for (int k = 0; k < width; ++k) 
     { 
      output +=boardCells[k][j].displayCellState() + "|"; 
     } 
     output +="\n"; 

    } 

    return output; 
} 

}

+0

Siehe diese [Frage] (http://stackoverflow.com/questions/13258790/how-to-use-getters-to-return-an-image-in-java) –

+0

@ user7790438 mit Ausnahme dieser verknüpften Frage, wenn für ein AWT-Bild und diese Frage bezieht sich auf JavaFX, das einen anderen Image-Typ hat. – jewelsea

+0

@jewelsea Könntest du mir ein kurzes Beispiel geben, wie ich eine Zelle zu einem Bild machen könnte? Ich bin nur ein bisschen verwirrt. – javanoob

Antwort

0

Ich denke, man Byte-Array für die Bild Rückkehr verwenden, und dann zeigen auf dem Bildschirm

+0

Irgendwelche Tipps, wie ich das machen würde? – javanoob

1

enums are classes too. Da die CellState-Enumeration Ihre Zustände repräsentiert, ist es wahrscheinlich am besten, alle relevanten Informationen für einen bestimmten Status direkt in die CellState-Klasse zu codieren. Das würde den Charakter und das Bild einschließen.

import javafx.scene.image.Image; 

public enum CellState { 
    EMPTY(' ', "empty.png"), 
    PLAYER('@', "player.png"), 
    MONSTER('&', "monster.png"), 
    POISON('*', "poison.png"), 
    BLOCKED('#', "blocked.png"); 

    private final char cellChar; 
    private final Image cellImage; 

    CellState(char cellChar, String imageLoc) { 
    this.cellChar = cellChar; 
    this.image = new Image(imageLoc); 
    } 

    public char getChar() { 
    return cellChar; 
    } 

    public Image getImage() { 
    return cellImage; 
    } 

    @Override 
    public String toString() { 
    return Character.toString(cellChar); 
    } 
} 

Dann halten Sie Ihr Handy API wie zuvor, aber Sie können die getCellStateCharacter() Drop-Methode und seine Verwendung mit cell.getCellState().getChar(), ersetzen und in ähnlicher Weise für Bild würde es cell.getCellState().getImage() sein.

Um zu verstehen, wo das Bild Konstruktor aus dem Bild wird, finden Sie unter:

Wenn Sie ein Bild aus dem Classpath (zB wenn das Bild in einem Glas verpackt erhalten möchten), können Sie verwenden:

new Image(getClass().getResourceAsStream("player.png")) 

Das oben wird das Bild aus dem gleichen Ordner in dem classpath holen, wo die CellState.clas s Datei befindet sich.

+0

Könnten Sie mir ein kurzes Beispiel dafür geben, wie ich eine Zelle zu einem Bild machen würde? Ich bin nur ein bisschen verwirrt. – javanoob

+0

Siehe die Square- und SquareSkin-Klassen dieses Spiels [Nullen und Kreuze] (https://gist.github.com/jewelsea/5115901). Das ist ähnlich wie bei Ihrem Zellenkonzept. Es ist ein bisschen komplizierter als Sie brauchen, aber hoffentlich können Sie es verstehen. Im Grunde müssen Sie ImageView in einen übergeordneten Knoten (normalerweise ein Layoutbereich wie StackPane oder GridPane) einfügen und den übergeordneten Knoten zu einer Szene hinzufügen. – jewelsea

+0

Hallo, Entschuldigung für die Unannehmlichkeiten Ich habe gerade einen anderen Teil meines Codes zu meiner Frage oben hinzugefügt. Es ist nur, dass ich eine harte Zeit habe, Ihr Stück Code in meinen zu implementieren. Könntest du mir dabei helfen? Ich brauche eigentlich nicht die Charaktere angezeigt werden, nur die Bilder – javanoob