Thank you all. This is the whole code.
PanelBatohu:
package main;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.VBox;
import logika.Batoh;
import util.ObserverZmenyBatohu;
public class PanelBatohu implements ObserverZmenyBatohu {
private VBox vBox;
private FlowPane panelVeci;
private Batoh batoh;
public PanelBatohu (Batoh batoh) {
this.batoh = batoh;
batoh.zaregistrujPozorovatele(this);
init();
}
private void init() {
vBox = new VBox();
vBox.setPrefWidth(100);
panelVeci = new FlowPane();
Label label = new Label("Panel batohu");
vBox.getChildren().addAll(label, panelVeci);
aktualizuj();
}
public VBox getPanel() {
return vBox;
}
@Override
public void aktualizuj() {
panelVeci.getChildren().clear();
String nazevObrazku;
for (String jmenoVeci : batoh.getSeznamVeci().keySet()){
nazevObrazku = "/zdroje/"+ jmenoVeci + ".png";
ImageView vecImageView = new ImageView(new Image
(Tajemny_ostrov_Adventura.class.getResourceAsStream(nazevObrazku),
100, 100, false, false));
panelVeci.getChildren().add(vecImageView);
}
}
}
and Tajemny_ostrov_Adventura (start class):
package main;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.FlowPane;
import javafx.scene.paint.Paint;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import logika.Hra;
import logika.IHra;
import uiText.TextoveRozhrani;
import java.awt.*;
public class Tajemny_ostrov_Adventura extends Application {
private BorderPane borderPane;
private TextArea centerTextArea;
private IHra hra;
private FlowPane dolniFlowPane;
private Label zadejPrikazLabel;
private TextField prikazTextField;
private OknoProstoru oknoProstoru;
private PanelVychodu panelVychodu;
private PanelBatohu panelBatohu;
public static void main(String[] args) {
if (args.length == 0) {
launch(args);
} else {
if (args[0].equals("-text")) {
IHra hra = new Hra();
TextoveRozhrani ui = new TextoveRozhrani(hra);
ui.hraj();
} else {
System.out.println("Neplatny parametr");
}
}
}
@Override
public void start(Stage primaryStage) {
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent e) {
Platform.exit();
System.exit(0);
}
});
borderPane = new BorderPane();
hra = new Hra();
nastavTextArea();
borderPane.setCenter(centerTextArea);
nastavDolniPanel();
borderPane.setBottom(dolniFlowPane);
oknoProstoru = new OknoProstoru(hra.getHerniPlan());
borderPane.setTop(oknoProstoru.getPanel());
panelVychodu = new PanelVychodu(hra.getHerniPlan());
borderPane.setRight(panelVychodu.getList());
panelBatohu = new PanelBatohu(hra.getBatoh());
borderPane.setLeft(panelBatohu.getPanel());
Scene scene = new Scene(borderPane, 900, 650);
primaryStage.setTitle("Tajemný ostrov");
primaryStage.setScene(scene);
prikazTextField.requestFocus();
primaryStage.show();
}
private void nastavTextArea() {
centerTextArea = new TextArea();
centerTextArea.setText(hra.vratUvitani());
centerTextArea.setEditable(false);
}
private void nastavDolniPanel () {
dolniFlowPane = new FlowPane();
zadejPrikazLabel = new Label("Zadej příkaz: ");
zadejPrikazLabel.setFont(Font.font("TimesRoman", FontWeight.BOLD, 20));
prikazTextField = new TextField();
dolniFlowPane.setAlignment(Pos.CENTER);
dolniFlowPane.getChildren().addAll (zadejPrikazLabel, prikazTextField );
prikazTextField.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
String radek = prikazTextField.getText();
String text = hra.zpracujPrikaz(radek);
centerTextArea.appendText("\n" + radek + "\n");
centerTextArea.appendText("\n" + text + "\n");
prikazTextField.setText("");
if (hra.konecHry()) {
prikazTextField.setEditable(false);
}
};
});
}
}
Hra
package logika;
/**
* Třída Hra - třída představující logiku adventury.
*
* Toto je hlavní třída logiky aplikace. Tato třída vytváří instanci třídy HerniPlan, která inicializuje mistnosti hry
* a vytváří seznam platných příkazů a instance tříd provádějící jednotlivé příkazy.
* Vypisuje uvítací a ukončovací text hry.
* Také vyhodnocuje jednotlivé příkazy zadané uživatelem.
*
*@author Michael Kolling, Lubos Pavlicek, Jarmila Pavlickova, Jan Novotný
*@version pro školní rok 2016/2017, ZS 2019/2020
*/
public class Hra implements IHra {
private SeznamPrikazu platnePrikazy; // obsahuje seznam přípustných příkazů
private HerniPlan herniPlan;
private boolean konecHry = false;
private Batoh batoh;
/**
* Vytváří hru a inicializuje místnosti (prostřednictvím třídy HerniPlan) a seznam platných příkazů.
*/
public Hra() {
herniPlan = new HerniPlan();
batoh = new Batoh();
platnePrikazy = new SeznamPrikazu();
platnePrikazy.vlozPrikaz(new PrikazNapoveda(platnePrikazy));
platnePrikazy.vlozPrikaz(new PrikazJdi(herniPlan));
platnePrikazy.vlozPrikaz(new PrikazSeber(herniPlan));
platnePrikazy.vlozPrikaz(new PrikazKonec(this));
platnePrikazy.vlozPrikaz(new PrikazBatoh(herniPlan));
platnePrikazy.vlozPrikaz(new PrikazZahod(herniPlan));
platnePrikazy.vlozPrikaz(new PrikazOdemkni(herniPlan));
platnePrikazy.vlozPrikaz(new PrikazVybojuj(herniPlan));
}
/**
* Vrátí úvodní zprávu pro hráče.
*/
public String vratUvitani() {
return "Vítejte!\n" +
"Hraješ za dobrodruha Jindřicha, který se nachází ve své lodi,\n" +
"kterou připlul na tajemný ostrov.\n" +
"Tvým cílem je najít prababiččin poklad ukrytý v hoře.\n" +
"Aby jsi poklad získal, musíš nejprve najít meč, který je schovaný v jeskyni.\n" +
"Klíč k tajné schránce v jeskyni najdeš u lesní víly.\n" +
"K získání pokladu musíš mečem otevřít bránu k pokladu\n" +
"a zabít místního strážce.\n" +
"Napište 'nápověda', pokud si nevíte rady, jak hrát dál.\n" +
"\n" +
herniPlan.getAktualniProstor().dlouhyPopis();
}
/**
* Vrátí závěrečnou zprávu pro hráče.
*/
public String vratEpilog() {
return "Dík, že jste si zahráli. Brzy se zase vraťte! Ahoj.";
}
/**
* Vrací true, pokud hra skončila.
*/
public boolean konecHry() {
return konecHry;
}
/**
* Metoda zpracuje řetězec uvedený jako parametr, rozdělí ho na slovo příkazu a další parametry.
* Pak otestuje zda příkaz je klíčovým slovem např. jdi.
* Pokud ano spustí samotné provádění příkazu.
*
*@param radek text, který zadal uživatel jako příkaz do hry.
*@return vrací se řetězec, který se má vypsat na obrazovku
*/
public String zpracujPrikaz(String radek) {
String [] slova = radek.split("[ \t]+");
String slovoPrikazu = slova[0];
String []parametry = new String[slova.length-1];
for(int i=0 ;i<parametry.length;i++){
parametry[i]= slova[i+1];
}
String textKVypsani=" .... ";
if (platnePrikazy.jePlatnyPrikaz(slovoPrikazu)) {
IPrikaz prikaz = platnePrikazy.vratPrikaz(slovoPrikazu);
textKVypsani = prikaz.provedPrikaz(parametry);
if (herniPlan.jeVyhra()){
konecHry = true;
textKVypsani += "\n + výhra!"; //\n je odřádkování
}
}
else {
textKVypsani="Nevím co tím myslíš? Tento příkaz neznám! ";
}
return textKVypsani;
}
/**
* Nastaví, že je konec hry, metodu využívá třída PrikazKonec,
* mohou ji použít i další implementace rozhraní Prikaz.
*
* @param konecHry hodnota false= konec hry, true = hra pokračuje
*/
void setKonecHry(boolean konecHry) {
this.konecHry = konecHry;
}
/**
* Metoda vrátí odkaz na herní plán, je využita hlavně v testech,
* kde se jejím prostřednictvím získává aktualní místnost hry.
*
* @return odkaz na herní plán
*/
public HerniPlan getHerniPlan(){
return herniPlan;
}
/**
* Metoda vrátí odkaz na batoh.
*
*
* @return odkaz na batoh
*/
public Batoh getBatoh(){
return batoh;
}
}