2017-05-02 7 views
0

基本的に私はjavafxを使用してゲームボードを作成しています。セルの状態に応じて現時点で文字値を返すセル状態クラスがあります。だから基本的には、セルが空の場合' 'を返します。もし私がそれにプレーヤーを持っていれば、'@'などのセルの状態が返されます。私は文字の代わりに画像を返すことができるかどうか疑問に思っていました。イメージを返す方法

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状態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

これを参照してください(http://stackoverflow.com/questions/13258790/how-to-use-getters-to-return-an-image-in-java) –

+0

@ user7790438 awtイメージです。この質問は、異なるImageタイプを持つJavaFXに関するものです。 – jewelsea

+0

@ jewelsea私はイメージにセルを設定する方法の簡単な例を教えていただけますか、私はちょっと混乱しています。 – javanoob

答えて

0

私はあなたが戻って画像のバイト配列を使用し、画面

+0

どのように私はそれをやって行くだろうかについてのヒント? – javanoob

1

enums are classes tooにそれを表示することができますね。したがって、CellState列挙があなたの状態を表現しているように、おそらく、特定の状態のすべての関連情報をCellStateクラスに直接エンコードするのが最適です。それには、キャラクターとイメージが含まれます。

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); 
    } 
} 

次に、あなたのセルのAPIは、以前のようにおくが、あなたはgetCellStateCharacter()方法をドロップし、cell.getCellState().getChar()とその使い方を交換し、同様に画像のために、それはcell.getCellState().getImage()だろうことができます。

イメージ・コンストラクタが見る、から画像を取得する場所を理解するには、次の

あなたがイメージが瓶にパッケージ化されたときにクラスパス(例えばから画像を取得したい場合)を使用することができます:

上記は、クラスパス内の同じフォルダから画像を取得します。ここで、CellState.clasファイルがあります。

+0

私は画像にセルを設定する方法の簡単な例を教えてもらえますか?ちょっと混乱しています。 – javanoob

+0

この[noughts and crosses game]のSquareとSquareSkinのクラスをご覧ください(https://gist.github.com/jewelsea/5115901)。それはあなたのセルのコンセプトに似ています。必要以上に複雑ですが、うまくいけばigを理解できます。基本的にImageViewを親ノード(通常はStackPaneやGridPaneなどのレイアウトペイン)に配置し、親ノードをシーンに追加する必要があります。 – jewelsea

+0

こんにちは、ご迷惑をおかけして申し訳ありません。上記の質問に私のコードの別の部分を追加しました。その瞬間、あなたのコードを私の中に実装するのは苦労しています。あなたはこれで私を助けることができるでしょうか?私は実際に文字を表示する必要はありません、画像だけ – javanoob

関連する問題