@@ -4,48 +4,33 @@
import com.flowacademy.models.Gamefield.GameFieldTemplate;
import com.flowacademy.views.MapColors;

import java.util.HashMap;

public class FieldIndexValidator {
public static String fieldDescriptionValidator(GameFieldTemplate[][] map, int X, int Y){
if (X > map.length-1 || X < 0 || Y > map[X].length-1 || Y < 0){
return "Semmi.";
} else {
return map[X][Y].getDescription();
}
}

public static String fieldFarDescriptionValidator(GameFieldTemplate[][] map, int X, int Y){
if (X > map.length-1 || X < 0 || Y > map[X].length-1 || Y < 0){
return "Semmi.";
} else {
return map[X][Y].getFarDescription();
}
}
public static String fieldFarDescriptionValidator(HashMap<String, GameFieldTemplate> map, int X, int Y){

public static GameFieldTemplate fieldMoveValidator(GameFieldTemplate[][] map, GameFieldTemplate actualField, int X, int Y){
if (X > map.length-1 || X < 0 || Y > map[X].length-1 || Y < 0){
System.out.println(MapColors.ANSI_RED + "ERRE NEM LEHET MENNI!" + MapColors.ANSI_RESET);
PlayMain.setTurnNumber(PlayMain.getTurnNumber()-1);
return actualField;
} else if (!map[X][Y].isAccessable()) {
System.out.println(MapColors.ANSI_RED + map[X][Y].getNotAccessibleDescription() + MapColors.ANSI_RESET);
PlayMain.setTurnNumber(PlayMain.getTurnNumber() - 1);
return actualField;
String gameFieldKey = GameFieldKeyGenerator.gameFieldKeyGenerator(X,Y);

if (map.get(gameFieldKey).getFarDescription() != null){
return map.get(gameFieldKey).getFarDescription();
} else {
return map[X][Y];
return "Semmi.";
}
}

public static GameFieldTemplate fieldMoveValidator(HashMap<String, GameFieldTemplate> map, GameFieldTemplate actualField, int X, int Y){

public static GameFieldTemplate fieldMoveValidatorInfinit(GameFieldTemplate[][] map, GameFieldTemplate actualField, int X, int Y){
if (X > map.length-1){
PlayMain.setMapMaxX(PlayMain.getMapMaxX()+1);
return actualField;
} else if (!map[X][Y].isAccessable()) {
System.out.println(MapColors.ANSI_RED + map[X][Y].getNotAccessibleDescription() + MapColors.ANSI_RESET);
AutoFieldGenerator.fieldCompositor();

String gameFieldKey = GameFieldKeyGenerator.gameFieldKeyGenerator(X,Y);

if (!map.get(gameFieldKey).isAccessable()) {
System.out.println(MapColors.ANSI_RED + map.get(gameFieldKey).getNotAccessibleDescription() + MapColors.ANSI_RESET);
PlayMain.setTurnNumber(PlayMain.getTurnNumber() - 1);
return actualField;
} else {
return map[X][Y];
return map.get(gameFieldKey);
}
}
}
@@ -13,9 +13,10 @@ public static GameFieldTemplate createGameField(String[] splittedBlock){
int mapX = Integer.parseInt(splittedBlock[0]);
int mapY = Integer.parseInt(splittedBlock[1]);
boolean accessible;

if(splittedBlock[2].equals("G")){

if(splittedBlock[5].equals("1")) {
if(splittedBlock[5].equals("1") || splittedBlock[5].equals("1/")) {
accessible = true;
} else {
accessible = false;
@@ -24,7 +25,7 @@ public static GameFieldTemplate createGameField(String[] splittedBlock){

} else if(splittedBlock[2].equals("~")){

if(splittedBlock[5].equals("1")) {
if(splittedBlock[5].equals("1") || splittedBlock[5].equals("1/")) {
accessible = true;
} else {
accessible = false;
@@ -33,7 +34,7 @@ public static GameFieldTemplate createGameField(String[] splittedBlock){

} else if(splittedBlock[2].equals("W")){

if(splittedBlock[5].equals("1")) {
if(splittedBlock[5].equals("1") || splittedBlock[5].equals("1/")) {
accessible = true;
} else {
accessible = false;
@@ -42,7 +43,7 @@ public static GameFieldTemplate createGameField(String[] splittedBlock){

} else if(splittedBlock[2].equals("R")){

if(splittedBlock[5].equals("1")) {
if(splittedBlock[5].equals("1") || splittedBlock[5].equals("1/")) {
accessible = true;
} else {
accessible = false;
@@ -0,0 +1,26 @@
package com.flowacademy.lib;

import com.flowacademy.models.Gamefield.GameFieldTemplate;

public class GameFieldEncoder {

public static String encodeGameField (GameFieldTemplate gameField){
String accessableCode;

if (gameField.isAccessable()){
accessableCode = "1";
} else {
accessableCode = "0";
}

String decomposedStringX = Integer.toString(gameField.getX());
String decomposedStringY = Integer.toString(gameField.getY());

String gameFieldCode = decomposedStringX + ":" + decomposedStringY + ":" + gameField.getMapSign() + ":" + "-" + ":" + "-" + ":" + accessableCode + "/";



return gameFieldCode;
}

}
@@ -0,0 +1,27 @@
package com.flowacademy.lib;

public class GameFieldKeyGenerator {

public static Integer coordinateMultiplier (int a){
int coordinate = a+1000000;

return coordinate;
}

public static String gameFieldKeyGenerator (Integer x, Integer y){
String xString = Integer.toString(x);
String yString = Integer.toString(y);

return xString + ":" + yString;
}

public static Integer[] decomposeKey(String gameFieldKey){
String[] splittedStringKey = gameFieldKey.split(":");
Integer[] decomposedKey = new Integer[2];
decomposedKey[0] = Integer.parseInt(splittedStringKey[0]);
decomposedKey[1] = Integer.parseInt(splittedStringKey[1]);

return decomposedKey;
}

}
@@ -3,38 +3,49 @@
import com.flowacademy.PlayMain;
import com.flowacademy.models.Gamefield.GameFieldTemplate;

import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;


public class GameMenu {
public static void gameMenu(GameFieldTemplate[][] map, GameFieldTemplate actualField, String filePath, String[] args) {
public static void gameMenu(HashMap<String, GameFieldTemplate> map, GameFieldTemplate actualField, String filePath, String[] args) {

String mapName = args[0];
Scanner scanner = new Scanner(System.in);
System.out.print("new infinit load save save_as quit: ");
System.out.print("//new infinit //load //save //save_as quit: ");
String menuEntry = scanner.next();
System.out.println("================================================");

if (menuEntry.equals("new")) {
Map.newMap(args, filePath);
PlayerCreator.creator();
//Map.newMap(args, filePath);
//PlayerCreator.creator();
System.out.println("Jelenleg átépítés alatt");
gameMenu(map, actualField, filePath, args);
} else if (menuEntry.equals("infinit")){
Map.infinitMap(args, filePath);
PlayerCreator.creator();
AutoSaveLoad.initMap();
} else if (menuEntry.equals("load")){
System.out.print("Map name (.fmap): ");
String mapLoadName = scanner.next();
Map.load(mapLoadName,filePath);
//System.out.print("Map name (.fmap): ");
//String mapLoadName = scanner.next();
//Map.load(mapLoadName,filePath);
System.out.println("Jelenleg átépítés alatt");
gameMenu(map, actualField, filePath, args);
} else if (menuEntry.equals("save")){
Map.save(map,filePath,args);
//Map.save(map,filePath,args);
gameMenu(map,actualField, filePath, args);
System.out.println("Jelenleg átépítés alatt");
} else if (menuEntry.equals("save_as")){
System.out.print("File name: " + mapName + "_");
String savedGameName = scanner.next();
Map.saveAs(map,filePath,args,savedGameName);
//System.out.print("File name: " + mapName + "_");
//String savedGameName = scanner.next();
//Map.saveAs(map,filePath,args,savedGameName);
gameMenu(map, actualField, filePath, args);
System.out.println("Jelenleg átépítés alatt");
} else if (menuEntry.equals("quit")){
PlayMain.setQuitted(true);
} else {
System.out.println("Nem értettem, valamit elpötyögtél!");
gameMenu(map, actualField, filePath, args);
}
}
}
@@ -1,27 +1,16 @@
package com.flowacademy.lib;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.flowacademy.PlayMain;
import com.flowacademy.models.Gamefield.Fields.Grassfields;
import com.flowacademy.models.Gamefield.Fields.Rivers;
import com.flowacademy.models.Gamefield.GameFieldTemplate;
import com.flowacademy.models.Player.Player;
import com.flowacademy.models.Player.PlayerClasses.Barbarian;
import com.flowacademy.models.Player.PlayerClasses.Mage;
import com.flowacademy.models.Player.PlayerClasses.Paladin;
import com.flowacademy.models.Player.PlayerClasses.Thief;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.*;

public class Map {

public static void infinitMap(String[] args, String jsonPath) {

// ArrayList <ArrayList<GameFieldTemplate>> infinitMap = new ArrayList<>();
GameFieldTemplate[][] map;
HashMap<String, GameFieldTemplate> map = new HashMap<>();
if (args.length == 1) {
try {
String mapName = args[0];
@@ -31,7 +20,7 @@ public static void infinitMap(String[] args, String jsonPath) {
String[] splittedline = line.split("_");
PlayMain.setMapMaxX(Integer.parseInt(splittedline[1]));
PlayMain.setMapMaxY(Integer.parseInt(splittedline[2]));
map = new GameFieldTemplate[PlayMain.getMapMaxX()][PlayMain.getMapMaxY()];
//map = new GameFieldTemplate[PlayMain.getMapMaxX()][PlayMain.getMapMaxY()];
int actualFieldX = Integer.parseInt(splittedline[3]);
int actualFieldY = Integer.parseInt(splittedline[4]);
PlayMain.setTurnNumber(Integer.parseInt(splittedline[5]));
@@ -54,14 +43,21 @@ public static void infinitMap(String[] args, String jsonPath) {
int mapX = Integer.parseInt(splittedBlock[0]);
int mapY = Integer.parseInt(splittedBlock[1]);

Integer xMultiply = GameFieldKeyGenerator.coordinateMultiplier(mapX);
Integer yMultiply = GameFieldKeyGenerator.coordinateMultiplier(mapY);
String gameFieldKey = GameFieldKeyGenerator.gameFieldKeyGenerator(xMultiply, yMultiply);

map[mapX][mapY] = gameField;
map.put(gameFieldKey, gameField);
map.get(gameFieldKey).setId(gameFieldKey);

}
}

PlayMain.setMap(map);
PlayMain.setActualField(map[actualFieldX][actualFieldY]);

Integer actualXMultiply = GameFieldKeyGenerator.coordinateMultiplier(actualFieldX);
Integer actualYMultiply = GameFieldKeyGenerator.coordinateMultiplier(actualFieldY);
PlayMain.setActualField(map.get(GameFieldKeyGenerator.gameFieldKeyGenerator(actualXMultiply, actualYMultiply)));

} catch (IOException e) {
e.printStackTrace();
@@ -71,11 +67,11 @@ public static void infinitMap(String[] args, String jsonPath) {
}
}

public static void newMap(String[] args, String jsonPath) {
/*public static void newMap(String[] args, String jsonPath) {
//Az alap térképnevet (TestMap_10x10_shortform) az arg0 tartalmazza, előre bekonfigurálva
GameFieldTemplate[][] map;
Set<GameFieldTemplate> map = new HashSet<>();
if (args.length == 1) {
try {
String mapName = args[0];
@@ -85,7 +81,6 @@ public static void newMap(String[] args, String jsonPath) {
String[] splittedline = line.split("_");
PlayMain.setMapMaxX(Integer.parseInt(splittedline[1]));
PlayMain.setMapMaxY(Integer.parseInt(splittedline[2]));
map = new GameFieldTemplate[PlayMain.getMapMaxX()][PlayMain.getMapMaxY()];
int actualFieldX = Integer.parseInt(splittedline[3]);
int actualFieldY = Integer.parseInt(splittedline[4]);
PlayMain.setTurnNumber(Integer.parseInt(splittedline[5]));
@@ -123,9 +118,9 @@ public static void newMap(String[] args, String jsonPath) {
} else {
System.out.println("Incorrect starting parameters!");
}
}
}*/

public static void save(GameFieldTemplate[][] mapToSave, String savePath, String[] args) {
/*public static void save(GameFieldTemplate[][] mapToSave, String savePath, String[] args) {
ObjectMapper objectMapper = new ObjectMapper();
String mapName = args[0];
String today = new SimpleDateFormat("dd-MM-yyyy").format(new Date());
@@ -151,9 +146,9 @@ public static void save(GameFieldTemplate[][] mapToSave, String savePath, String
e.printStackTrace();
}
System.out.println("Game Saved!");
}
}*/

public static void saveAs(GameFieldTemplate[][] mapToSave, String savePath, String[] args, String nameInput) {
/* public static void saveAs(GameFieldTemplate[][] mapToSave, String savePath, String[] args, String nameInput) {
ObjectMapper objectMapper = new ObjectMapper();
String mapName = args[0];
@@ -230,5 +225,5 @@ public static void load(String mapName, String jsonPath) {
} else {
System.out.println("Incorrect starting parameters!");
}
}
}*/
}
@@ -14,7 +14,7 @@ public static void creator(){
Player character = null;
Scanner scanner = new Scanner(System.in);

System.out.println("Barbarian Mage Paladin Thief");
System.out.println("Barbarian Mage Paladin Thief \n");
System.out.println("Please enter character class:");
String scannerEntry = scanner.next();

@@ -26,6 +26,8 @@ public static void creator(){
character = new Paladin();
} else if (scannerEntry.equals("Thief")){
character = new Thief();
} else {
System.out.println("Nem értettem, valamit elpötyögtél!");
}

System.out.println("Please enter character name:");
@@ -5,14 +5,12 @@

public class SinonymHandler {

protected static String[] northSinonymes = {"észak", "északra", "fel", "felfelé", "előre", "északfelé", "arra", "oda", "mÉ", "É"};
protected static String[] southSinonymes = {"dél", "délre", "le", "lefelé", "hátra", "délfelé", "erre", "ide", "mD", "D"};
protected static String[] eastSinonymes = {"kelet", "keletre", "jobbra", "keletfelé", "jobbkézfelé", "amarra", "amoda", "mK", "K"};
protected static String[] westSinonymes = {"nyugat", "nyugatra", "balra", "nyugatfelé", "balkézfelé", "emerre", "emide", "mNY", "NY"};

protected static String[] northSinonymes = {"észak", "északra", "fel", "felfelé", "előre", "északfelé", "arra", "oda", "mÉ", "É", "é", "N", "n", "North", "north"};
protected static String[] southSinonymes = {"dél", "délre", "le", "lefelé", "hátra", "délfelé", "erre", "ide", "mD", "D", "d", "S", "s", "South", "south"};
protected static String[] eastSinonymes = {"kelet", "keletre", "jobbra", "keletfelé", "jobbkézfelé", "amarra", "amoda", "mK", "K", "k", "E", "e", "East", "east"};
protected static String[] westSinonymes = {"nyugat", "nyugatra", "balra", "nyugatfelé", "balkézfelé", "emerre", "emide", "mNY", "NY", "ny", "W", "w", "West", "west"};
protected static String[] quitSinonymes = {"kilép", "kilépés", "exit", "quit", "lépj ki"};

protected static String[] positionSinonymes = {"helyem", "position", "place", "map"};
protected static String[] positionSinonymes = {"helyem", "position", "place"};

public static String[] getNorthSinonymes() {
return northSinonymes;
@@ -5,16 +5,33 @@
import com.flowacademy.models.Npc.NpcTemplate;

public class Caves extends GameFieldTemplate{
/*public Caves (int coordinateNumber, NpcTemplate npc, Item item, boolean accessable) {
this.coordinateNumber = coordinateNumber;
this.type = "Caves";
this.description = "Sötlét és nyirkos barlangban állsz.";

public Caves(NpcTemplate npc, Item item, boolean accessable) {
this.name = "Caves";
this.mapSign = "C";
this.mapColor = "\u001B[30m";
this.description = "Sötét és nyirkos barlangban állsz.";
this.farDescription = " barlang sötétje tátong. ";
this.npc = npc;
this.item = item;
this.accessable = accessable;
this.notAccessibleDescription = "Fekete szakadék tátong a barlang szájánál, erre nem tudsz továbmenni!";
}

public Caves(int Xcoordinate, int Ycoordinate, boolean accessable) {
this.x = Xcoordinate;
this.y = Ycoordinate;
this.name = "Caves";
this.mapSign = "C";
this.mapColor = "\u001B[30m";
this.description = "Sötét és nyirkos barlangban állsz.";
this.farDescription = " barlang sötétje tátong. ";
this.npc = npc;
this.item = item;
this.accessable = accessable;
this.notAccessibleDescription = "Fekete szakadék tátong a barlang szájánál, erre nem tudsz továbmenni!";
}

public Caves() {
}*/
}
}
@@ -13,7 +13,7 @@ public Rivers(NpcTemplate npc, Item item, boolean accessable) {
this.farDescription = " folyó zúgását hallod. ";
this.npc = npc;
this.item = item;
this.accessable = accessable;
this.accessable = false;
this.notAccessibleDescription = "A folyópart túl meredek, sajnos nem tudsz tovább menni erre!";
}

@@ -27,7 +27,7 @@ public Rivers(int Xcoordinate, int Ycoordinate, boolean accessable) {
this.farDescription = " folyó zúgását hallod. ";
this.npc = npc;
this.item = item;
this.accessable = accessable;
this.accessable = false;
this.notAccessibleDescription = "A folyópart túl meredek, sajnos nem tudsz tovább menni erre!";
}
public Rivers() {
@@ -2,28 +2,40 @@

import com.flowacademy.models.Item.Item;
import com.flowacademy.models.Npc.NpcTemplate;
import com.flowacademy.views.MapColors;

public class GameFieldTemplate {
protected int x;
protected int y;
protected String id;
protected String name;
protected String mapSign;
protected String mapColor;
protected String description;
protected String farDescription;
protected NpcTemplate npc;
protected Item item;
protected boolean accessable;
protected boolean accessable = true;
protected String notAccessibleDescription;

public GameFieldTemplate() {
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getNotAccessibleDescription() {
return notAccessibleDescription;
}

public void setNotAccessibleDescription(String notAccessibleDescription) {
this.notAccessibleDescription = notAccessibleDescription;
}

public String getMapColor() {
return mapColor;
}
@@ -2,6 +2,7 @@

public class Item {
protected String name;
protected String itemSign;
protected String description;
protected int healthModifier;
protected int damageModifier;
@@ -19,6 +20,14 @@ public void setName(String name) {
this.name = name;
}

public String getItemSign() {
return itemSign;
}

public void setItemSign(String itemSign) {
this.itemSign = itemSign;
}

public String getDescription() {
return description;
}
@@ -4,6 +4,7 @@

public class NpcTemplate {
protected String name;
protected String npcSign;
protected int health;
protected int damage;
protected int defense;
@@ -18,6 +19,14 @@ public class NpcTemplate {
public NpcTemplate() {
}

public String getNpcSign() {
return npcSign;
}

public void setNpcSign(String npcSign) {
this.npcSign = npcSign;
}

public String getName() {
return name;
}
@@ -3,9 +3,11 @@
import com.flowacademy.lib.FieldIndexValidator;
import com.flowacademy.models.Gamefield.GameFieldTemplate;

import java.util.HashMap;

public class FieldViewer {

public static void viewer(GameFieldTemplate[][] map, GameFieldTemplate actualField){
public static void viewer(HashMap<String, GameFieldTemplate> map, GameFieldTemplate actualField){

System.out.println(actualField.getDescription());
System.out.println("Északra" + FieldIndexValidator.fieldFarDescriptionValidator(map, (actualField.getX()), actualField.getY()-1));
@@ -1,19 +1,76 @@
package com.flowacademy.views;

import com.flowacademy.PlayMain;
import com.flowacademy.lib.GameFieldKeyGenerator;
import com.flowacademy.models.Gamefield.GameFieldTemplate;

import java.util.ArrayList;
import java.util.HashMap;

public class HUD {
public static void hud(GameFieldTemplate[][] map, GameFieldTemplate actualField){
public static void hud(HashMap<String, GameFieldTemplate> map, GameFieldTemplate actualField){


System.out.println(" " + PlayMain.getPlayerCharacter().getName() + " a hős " + PlayMain.getPlayerCharacter().getProfession() + " ");
System.out.println("+--------------------------------------------------------+");
System.out.println("Körök:" + PlayMain.getTurnNumber() + " | HP:" +
PlayMain.getPlayerCharacter().getHealth() + " | DMG:" + PlayMain.getPlayerCharacter().getDamage() +
" | DEF:" + PlayMain.getPlayerCharacter().getDefense() + " |");
//System.out.printf(playerStatsHud()+ MapDrawer.drawMiniMap() + "\n");
System.out.printf(miniMap() + "\n");
//System.out.println(" Körök:" + PlayMain.getTurnNumber() + " | HP:" + PlayMain.getPlayerCharacter().getHealth() + " | DMG:" + PlayMain.getPlayerCharacter().getDamage() + " | DEF:" + PlayMain.getPlayerCharacter().getDefense() + " |");
System.out.println("+--------------------------------------------------------+\n");

FieldViewer.viewer(map, actualField);
}

public static String playerStatsHud(){

String playerStats =
"| Körök:" + PlayMain.getTurnNumber() + " \n" +
"| HP:" + PlayMain.getPlayerCharacter().getHealth() + " \n" +
"| DMG:" + PlayMain.getPlayerCharacter().getDamage() + " \n" +
"| DEF:" + PlayMain.getPlayerCharacter().getDefense();

return playerStats;
}

public static String miniMap() {

String[] playerStatList = new String[5];
playerStatList[0] = "| Körök:" + Integer.toString(PlayMain.getTurnNumber());
playerStatList[1] = "| HP:" + PlayMain.getPlayerCharacter().getHealth();
playerStatList[2] = "| DMG:" + PlayMain.getPlayerCharacter().getDamage();
playerStatList[3] = "| DEF:" + PlayMain.getPlayerCharacter().getDefense();
playerStatList[4] = "|";

ArrayList<String> mapSigns = new ArrayList<>();
String outputString = "";
HashMap <String, GameFieldTemplate> playmainMap = PlayMain.getMap();
int actualX = PlayMain.getActualField().getX();
int actualY = PlayMain.getActualField().getY();
int minimumMapRangeX = actualX-2;
int maximumMapRangeX = actualX+2;
int minimumMapRangeY = actualY-2;
int maximumMapRangeY = actualY+2;

System.out.println("+========================================================+");
int playerStatListIndexCount = 0;
for (int i = minimumMapRangeY; i <= maximumMapRangeY; i++) {
for (int j = minimumMapRangeX; j <= maximumMapRangeX; j++) {
if (i == actualY && j == actualX) {
mapSigns.add(MapColors.ANSI_RED + "[O]" + MapColors.ANSI_RESET);
} else if (playmainMap.get(GameFieldKeyGenerator.gameFieldKeyGenerator(j,i)) == null){
mapSigns.add("0");
} else {
mapSigns.add(playmainMap.get(GameFieldKeyGenerator.gameFieldKeyGenerator(j,i)).getMapColor() + "[" + playmainMap.get(GameFieldKeyGenerator.gameFieldKeyGenerator(j,i)).getMapSign() + "]" + MapColors.ANSI_RESET);
}
}
mapSigns.add(playerStatList[playerStatListIndexCount]);
playerStatListIndexCount++;
mapSigns.add("\n");
}

for(String x:mapSigns){
outputString += x;
}

return outputString;
}
}
@@ -1,28 +1,75 @@
package com.flowacademy.views;

import com.flowacademy.PlayMain;
import com.flowacademy.lib.GameFieldKeyGenerator;
import com.flowacademy.models.Gamefield.GameFieldTemplate;

import java.util.ArrayList;
import java.util.HashMap;

public class MapDrawer {

public static void drawMap() {
public static String drawMiniMap() {

GameFieldTemplate[][] playmainMap = PlayMain.getMap();
ArrayList<String> mapSigns = new ArrayList<>();
String outputString = null;
HashMap <String, GameFieldTemplate> playmainMap = PlayMain.getMap();
int actualX = PlayMain.getActualField().getX();
int actualY = PlayMain.getActualField().getY();
int minimumMapRangeX = actualX-2;
int maximumMapRangeX = actualX+2;
int minimumMapRangeY = actualY-2;
int maximumMapRangeY = actualY+2;

for (int i = 0; i <= playmainMap.length-1; i++) {
for (int j = 0; j <= playmainMap[i].length-1; j++) {
if (i == PlayMain.getActualField().getY() && j == PlayMain.getActualField().getX()){
System.out.printf(MapColors.ANSI_RED + "[O]" + MapColors.ANSI_RESET);
System.out.println("+========================================================+");

for (int i = minimumMapRangeY; i <= maximumMapRangeY; i++) {
for (int j = minimumMapRangeX; j <= maximumMapRangeX; j++) {
if (i == actualY && j == actualX) {
mapSigns.add(MapColors.ANSI_RED + "[O]" + MapColors.ANSI_RESET);
} else if (playmainMap.get(GameFieldKeyGenerator.gameFieldKeyGenerator(j,i)) == null){
mapSigns.add("0");
} else {
System.out.printf(playmainMap[j][i].getMapColor() + "[" + playmainMap[j][i].getMapSign() + "]" + MapColors.ANSI_RESET);
mapSigns.add(playmainMap.get(GameFieldKeyGenerator.gameFieldKeyGenerator(j,i)).getMapColor() + "[" + playmainMap.get(GameFieldKeyGenerator.gameFieldKeyGenerator(j,i)).getMapSign() + "]" + MapColors.ANSI_RESET);
}
}
System.out.printf("\n");
mapSigns.add("\n");
}

for(String x:mapSigns){
outputString += x;
}

return outputString;
}

public static void drawMap() {

HashMap <String, GameFieldTemplate> playmainMap = PlayMain.getMap();
int actualX = PlayMain.getActualField().getX();
int actualY = PlayMain.getActualField().getY();
int minimumMapRangeX = actualX-2;
int maximumMapRangeX = actualX+2;
int minimumMapRangeY = actualY-2;
int maximumMapRangeY = actualY+2;

System.out.println("+========================================================+");

for (int i = minimumMapRangeY; i <= maximumMapRangeY; i++) {
System.out.printf(" ");
for (int j = minimumMapRangeX; j <= maximumMapRangeX; j++) {
if (i == actualY && j == actualX) {
System.out.printf(MapColors.ANSI_RED + "[O]" + MapColors.ANSI_RESET);
} else if (playmainMap.get(GameFieldKeyGenerator.gameFieldKeyGenerator(j,i)) == null){
System.out.printf("0");
} else {
System.out.printf(playmainMap.get(GameFieldKeyGenerator.gameFieldKeyGenerator(j,i)).getMapColor() + "[" + playmainMap.get(GameFieldKeyGenerator.gameFieldKeyGenerator(j,i)).getMapSign() + "]" + MapColors.ANSI_RESET);
}
}
System.out.printf("\n");
}

//System.out.println("+========================================================+");

}