diff --git a/src/main/java/com/codecool/dungeoncrawl/JSON/ActorJson.java b/src/main/java/com/codecool/dungeoncrawl/JSON/ActorJson.java new file mode 100644 index 0000000..0da23c9 --- /dev/null +++ b/src/main/java/com/codecool/dungeoncrawl/JSON/ActorJson.java @@ -0,0 +1,22 @@ +package com.codecool.dungeoncrawl.JSON; + +import com.codecool.dungeoncrawl.logic.actors.Actor; + +public class ActorJson { + private String name; + private int hp; + private int x; + private int y; + + public ActorJson(Actor actor) { + this.name = actor.getTileName(); + this.x = actor.getX(); + this.y = actor.getY(); + this.hp = actor.getHealth(); + } + /*public String convertPlayerJson(){ + return ConvertToJSON.convertObjectToJson(this); + }*/ + + +} diff --git a/src/main/java/com/codecool/dungeoncrawl/JSON/HandleJSON.java b/src/main/java/com/codecool/dungeoncrawl/JSON/HandleJSON.java new file mode 100644 index 0000000..a059dcc --- /dev/null +++ b/src/main/java/com/codecool/dungeoncrawl/JSON/HandleJSON.java @@ -0,0 +1,60 @@ +package com.codecool.dungeoncrawl.JSON; + +import com.codecool.dungeoncrawl.logic.GameMap; +import com.codecool.dungeoncrawl.logic.actors.Actor; +import com.codecool.dungeoncrawl.logic.actors.Player; +import com.codecool.dungeoncrawl.logic.items.Item; +import com.google.gson.Gson; + +import java.util.ArrayList; +import java.util.List; + +public class HandleJSON { + public static String convertObjectToJson(Object obj) { + Gson JSONObject = new Gson(); + return JSONObject.toJson(obj); + } + + public static List getEveryMember(GameMap map){ + List members = new ArrayList<>(); + for (Actor actor: map.getActors()){ + if(actor instanceof Player){ + members.add( new PlayerJson((Player) actor)); + }else{ + members.add(new ActorJson(actor)); + } + } + for (Item item : map.getItems()){ + members.add(new ItemJson(item)); + } + return members; + } + + public static String createFinalJsonString(GameMap map){ + List list = mapConverter(map); + return createStringFromJSONList(list); + } + + public static List mapConverter(GameMap map) { + List mapObjects = getEveryMember(map); + List JSONList = new ArrayList<>(); + for (Object obj : mapObjects) { + JSONList.add(convertObjectToJson(obj)); + + } + for (String objectJson : JSONList) { + System.out.println(objectJson); + } + return JSONList; + } + + public static String createStringFromJSONList(List JSONList){ + StringBuilder JSONbuilder = new StringBuilder(); + + for(String objectJson : JSONList){ + JSONbuilder.append(objectJson); + } + return JSONbuilder.toString(); + } + +} diff --git a/src/main/java/com/codecool/dungeoncrawl/JSON/ItemJson.java b/src/main/java/com/codecool/dungeoncrawl/JSON/ItemJson.java new file mode 100644 index 0000000..54c3c93 --- /dev/null +++ b/src/main/java/com/codecool/dungeoncrawl/JSON/ItemJson.java @@ -0,0 +1,20 @@ +package com.codecool.dungeoncrawl.JSON; + +import com.codecool.dungeoncrawl.logic.items.Item; + +public class ItemJson { + private String name; + private int x; + private int y; + + public ItemJson(Item item) { + this.name = item.getTileName(); + this.x = item.getX(); + this.y = item.getY(); + } + + /* public String convertPlayerJson(){ + return ConvertToJSON.convertObjectToJson(this); + }*/ + +} diff --git a/src/main/java/com/codecool/dungeoncrawl/JSON/PlayerJson.java b/src/main/java/com/codecool/dungeoncrawl/JSON/PlayerJson.java new file mode 100644 index 0000000..6e55cf9 --- /dev/null +++ b/src/main/java/com/codecool/dungeoncrawl/JSON/PlayerJson.java @@ -0,0 +1,48 @@ +package com.codecool.dungeoncrawl.JSON; + +import com.codecool.dungeoncrawl.logic.actors.Player; +import com.codecool.dungeoncrawl.logic.items.Inventory; + +public class PlayerJson { + + private String playerName; + private int hp; + private int x; + private int y; + + public PlayerJson(Player player) { + this.playerName = player.getName(); + this.inventory = player.getItemInventory(); + this.x = player.getX(); + this.y = player.getY(); + + this.hp = player.getHealth(); + + } +/* + public String convertPlayerJson(){ + return ConvertToJSON.convertObjectToJson(this); + }*/ + + public Inventory getInventory() { + return inventory; + } + + private Inventory inventory; + + public String getPlayerName() { + return playerName; + } + + public int getHp() { + return hp; + } + + public int getX() { + return x; + } + + public int getY() { + return y; + } +} diff --git a/src/main/java/com/codecool/dungeoncrawl/Main.java b/src/main/java/com/codecool/dungeoncrawl/Main.java index 42d7b52..c6aa9da 100644 --- a/src/main/java/com/codecool/dungeoncrawl/Main.java +++ b/src/main/java/com/codecool/dungeoncrawl/Main.java @@ -1,5 +1,6 @@ package com.codecool.dungeoncrawl; +import com.codecool.dungeoncrawl.JSON.HandleJSON; import com.codecool.dungeoncrawl.dao.GameDatabaseManager; import com.codecool.dungeoncrawl.logic.Cell; import com.codecool.dungeoncrawl.logic.GameMap; @@ -8,7 +9,6 @@ import javafx.animation.KeyFrame; import javafx.animation.Timeline; import javafx.application.Application; -import javafx.collections.ObservableList; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; @@ -23,6 +23,7 @@ import javafx.scene.layout.BorderPane; import javafx.scene.layout.GridPane; import javafx.scene.paint.Color; +import javafx.stage.FileChooser; import javafx.stage.Stage; import javafx.scene.text.Font; @@ -33,9 +34,11 @@ import java.io.File; +import java.io.IOException; +import java.io.PrintWriter; import java.sql.SQLException; -import java.util.Timer; -import java.util.TimerTask; +import java.util.ArrayList; +import java.util.List; public class Main extends Application { static final int CONST_10 = 10; @@ -58,15 +61,16 @@ public class Main extends Application { Media backgroundMedia; MediaPlayer backgroundMediaPlayer; GameDatabaseManager dbManager; - Timer timer = new Timer(); - + Timeline fiveSecondsWonder; + private Stage myStage; public static void main(String[] args) { launch(args); } @Override - public void start(Stage primaryStage){ + public void start(Stage primaryStage) { + myStage = primaryStage; setupDbManager(); backgroundMedia = new Media(new File("src/main/resources/background-music.wav").toURI().toString()); backgroundMediaPlayer = new MediaPlayer(backgroundMedia); @@ -99,7 +103,7 @@ public void start(Stage primaryStage){ primaryStage.setTitle("Dungeon Crawl"); primaryStage.show(); - moveMonsters(); + //moveMonsters(); } private void onKeyReleased(KeyEvent keyEvent) { @@ -110,8 +114,7 @@ private void onKeyReleased(KeyEvent keyEvent) { || exitCombinationWin.match(keyEvent) || keyEvent.getCode() == KeyCode.ESCAPE) { exit(); - } - else if(saveCombination.match(keyEvent)){ + } else if (saveCombination.match(keyEvent)) { showSaveOption(); } } @@ -146,8 +149,8 @@ private void onKeyPressed(KeyEvent keyEvent) { } } - private void moveMonsters(){ - Timeline fiveSecondsWonder = new Timeline( + private void moveMonsters() { + fiveSecondsWonder = new Timeline( new KeyFrame(Duration.seconds(5), event -> { map.actAllMapCreature(); @@ -155,7 +158,6 @@ private void moveMonsters(){ })); fiveSecondsWonder.setCycleCount(Timeline.INDEFINITE); fiveSecondsWonder.play(); - } @@ -195,8 +197,7 @@ private void setupDbManager() { } - public void gameOverDisplay(){ - timer.cancel(); + public void gameOverDisplay() { isGameOver = true; Font myFont = new Font("Serif", 36); gameOver.setText("Game\nOver!"); @@ -204,8 +205,8 @@ public void gameOverDisplay(){ refresh(); } - public void gameWonDisplay(){ - timer.cancel(); + + public void gameWonDisplay() { isGameOver = true; Font myFont = new Font("Serif", 22); gameOver.setText("Congratulation!"); @@ -228,10 +229,6 @@ private void exit() { System.exit(0); } - /*public void saveName(Label nameLabel) { - - }*/ - public void showSaveOption() { Label nameLabel = new Label("Please enter your name"); @@ -251,7 +248,34 @@ public void showSaveOption() { Label playerName = new Label(name); ui.add(playerName, 0, 0); playerName.setFont(myFont); - System.out.println(map.getPlayer().getName()); + String finalJson = HandleJSON.createFinalJsonString(map); + saveTextToFile(finalJson, saveToFile()); + }); } + + + public File saveToFile() { + FileChooser file = new FileChooser(); + file.setTitle("Save Image"); + //System.out.println(pic.getId()); + File file1 = file.showSaveDialog(myStage); + + System.out.println(file1); + return file1; + } + + private void saveTextToFile(String content, File file) { + try { + PrintWriter writer; + writer = new PrintWriter(file); + writer.println(content); + writer.close(); + } catch (IOException ex) { + System.out.println("file not found"); + } + } + + + } diff --git a/src/main/java/com/codecool/dungeoncrawl/logic/Cell.java b/src/main/java/com/codecool/dungeoncrawl/logic/Cell.java index de0ef61..380210e 100644 --- a/src/main/java/com/codecool/dungeoncrawl/logic/Cell.java +++ b/src/main/java/com/codecool/dungeoncrawl/logic/Cell.java @@ -67,8 +67,6 @@ public boolean isClosedDoor(){ public boolean isWater(){return this.type == CellType.WATER;} - public boolean isCrossedWater(){return this.type == CellType.CROSS_WATER;} - @Override public String getTileName() { return type.getTileName(); diff --git a/src/main/java/com/codecool/dungeoncrawl/logic/GameMap.java b/src/main/java/com/codecool/dungeoncrawl/logic/GameMap.java index f45b2c8..4067f83 100644 --- a/src/main/java/com/codecool/dungeoncrawl/logic/GameMap.java +++ b/src/main/java/com/codecool/dungeoncrawl/logic/GameMap.java @@ -1,10 +1,14 @@ package com.codecool.dungeoncrawl.logic; +import com.codecool.dungeoncrawl.logic.actors.Actor; import com.codecool.dungeoncrawl.logic.actors.Monsters; import com.codecool.dungeoncrawl.logic.actors.Player; import com.codecool.dungeoncrawl.logic.items.ActableItem; import com.codecool.dungeoncrawl.logic.items.Campfire; +import com.codecool.dungeoncrawl.logic.items.Item; +import java.util.ArrayList; +import java.util.List; import java.util.Random; @@ -64,7 +68,6 @@ public void repositionCenter() { } else nextY = Math.min(player.getCell().getY(), height - 11); centerCell = cells[nextX][nextY]; - } @@ -82,6 +85,35 @@ public void actAllMapCreature() { } } + public List getItems() { + + List items = new ArrayList<>(); + + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { + if (cells[x][y].getItem() != null){ + items.add(cells[x][y].getItem()); + } + } + } + return items; + } + + public List getActors() { + + List actors = new ArrayList<>(); + + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { + if (cells[x][y].getActor() != null){ + actors.add(cells[x][y].getActor()); + } + } + } + return actors; + } + + public void openDoor(int x, int y) { cells[x][y].setType(CellType.ENTRANCE); } @@ -90,11 +122,7 @@ public void crossWater(int x, int y) { cells[x][y].setType(CellType.CROSS_WATER); } - public void remakeWater(int x, int y) { - cells[x][y].setType(CellType.WATER); - } - - @Override + @Override public String toString(){ StringBuilder map = new StringBuilder(); for(int i = 0; i < height; i++){ diff --git a/src/main/java/com/codecool/dungeoncrawl/logic/actors/Player.java b/src/main/java/com/codecool/dungeoncrawl/logic/actors/Player.java index 1565ba5..22c0341 100644 --- a/src/main/java/com/codecool/dungeoncrawl/logic/actors/Player.java +++ b/src/main/java/com/codecool/dungeoncrawl/logic/actors/Player.java @@ -129,6 +129,7 @@ public boolean hasFriends() { @Override public String toString(){ - return "@"; + return name + ": " + messageLabel.toString() + "\n" + itemInventory.toString() + "\n" + + getHealth() + ",x: " + getCell().getX() + " y: " + getCell().getY(); } } \ No newline at end of file diff --git a/src/main/java/com/codecool/dungeoncrawl/logic/items/BertieBottsEveryFlavorBeans.java b/src/main/java/com/codecool/dungeoncrawl/logic/items/BertieBottsEveryFlavorBeans.java index 3b553e4..331a96f 100644 --- a/src/main/java/com/codecool/dungeoncrawl/logic/items/BertieBottsEveryFlavorBeans.java +++ b/src/main/java/com/codecool/dungeoncrawl/logic/items/BertieBottsEveryFlavorBeans.java @@ -9,7 +9,7 @@ public BertieBottsEveryFlavorBeans (Cell cell){ @Override public String getTileName(){ - return "BB's E. Flavor"; + return "BBs E. Flavor"; } @Override diff --git a/src/main/java/com/codecool/dungeoncrawl/model/PlayerModel.java b/src/main/java/com/codecool/dungeoncrawl/model/PlayerModel.java index ce69db8..2fb162b 100644 --- a/src/main/java/com/codecool/dungeoncrawl/model/PlayerModel.java +++ b/src/main/java/com/codecool/dungeoncrawl/model/PlayerModel.java @@ -15,10 +15,9 @@ public PlayerModel(String playerName, int x, int y) { } public PlayerModel(Player player) { - this.playerName = "player.getName()"; + this.playerName = player.getName(); this.x = player.getX(); this.y = player.getY(); - this.hp = player.getHealth(); }