Witam,
jestem początkujący w programowaniu w języku java. W ramach kursu stworzyłem gry staki w wersji konsolowej. Uznałem, że temat jest ciekawy i warto by spróbować w ramach nauki przekształcić je w aplikacje okienkowe. I tu tutaj złapała mnie mała "ciemnota". Plansza w wersji konsolowej generowała po prostu za wypełniana tablic za pomocą znaków - 'O' -statek, " " - puste pole itd. Jak przekształcić to w aplikacji okienkowej? Za pomocą buttonów? Rysowanie prostokątów? Proszę bardzo o podpowiedzi.
Pozdrawiam
Pierwsza rzecz jaka przychodzi mi na myśl to użycie biblioteki, np. libGDX (która bazuje na LWJGL) i renderowanie w niej obiektów właśnie na podstawie tablicy 2D. Ja renderowanie w swojej wersji gry Tetris zrobiłem w ten sposób:
public void render(SpriteBatch batch)
{
int current;
for (int x = 0; x < Board.X; x++)
{
for (int y = 0; y < Board.Y; y++)
{
current = board[x][y];
if (board[x][y] != E)
{
if (current < 10 && current > 0)
{
texture = new Texture(Gdx.files.internal("core/assets/tile.png"));
}
else if (current > 10)
{
texture = new Texture(Gdx.files.internal("core/assets/ltile.png"));
}
sprite = new Sprite(texture);
sprite.setPosition(x * sprite.getWidth(), Main.HEIGHT - 50f - y * sprite.getHeight());
sprite.draw(batch);
}
}
}
}
Oczywiście można to robić w JavaFX, ale jeśli chcesz brać się za robienie gier 2D to libGDX to najlepsze rozwiązanie.
Dzięki, jednak myślałem, że przydałoby się zacząć od podstaw, czyli nauczyć się najpeirw JavaFX a dopiero potem drążyć inne tematy.
No wiesz, JavaFX to biblioteka, libGDX też. Różnią się zastosowaniem: JavaFX to aplikacje okienkowe, a libGDX to gry na wszystkie 3 systemy operacyjne i Androida.
Mam taki fragment kodu:
public class Main {
enum State {
EMPTY, HIT, MISS, SUNK
}
private static final int WIELKOSC_PLANSZY = 10;
public static void main(String[] args) {
State [][] board = new State[WIELKOSC_PLANSZY][WIELKOSC_PLANSZY];
fillBoard(board);
printLetter();
printBoard(board);
}
private static void fillBoard(State[][] board) {
for (int i = 0; i < WIELKOSC_PLANSZY; i++) {
for (int j = 0; j <WIELKOSC_PLANSZY ; j++) {
board[i][j] = getRandomShip(Math.random());
}
}
}
static void printLetter() {
System.out.print(" ");
for (int i = 0; i < WIELKOSC_PLANSZY; i++) {
System.out.print((char) ('A' + i));
}
System.out.print('\n');
}
static void printBoard(State [][] board) {
for (int i = 0; i < WIELKOSC_PLANSZY; i++) {
int numberToPrint = i + 1;
if (numberToPrint < WIELKOSC_PLANSZY) {
System.out.print(' ');
}
System.out.print(numberToPrint);
for (int j = 0; j < WIELKOSC_PLANSZY; j++) {
char shipValue = stateToChar(board[i][j]) ;
System.out.print(shipValue);
}
System.out.print('\n');
}
}
private static char stateToChar(State state) {
char value;
switch (state) {
case EMPTY:
value = ' ';
break;
case HIT:
value = '0';
break;
default:
value = '?';
}
return value;
}
private static State getRandomShip(double random) {
if (random < 0.2) {
return State.HIT;
} else if (random > 0.8){
return State.EMPTY;
} else
return State.MISS;
}
}
I chciałbym go przerobić na zasadzie - Stan - np. prostokąty, które w zależności od stanu zmieniają swój kolor i w tej sposób tworzy mi się ładna plansza. Kompletnie nie wiem jak z tym ruszyć. Bardzo proszę o pomoc.