Pretty print game engine info
parent
0495018430
commit
b9a58c61d1
|
@ -7,7 +7,6 @@ public class Main {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
GameEngine engine = new GameEngine();
|
GameEngine engine = new GameEngine();
|
||||||
|
|
||||||
engine.printState();
|
|
||||||
engine.run();
|
engine.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,10 +2,14 @@ package ca.cosc3p91.a2.game;
|
||||||
|
|
||||||
import ca.cosc3p91.a2.gameobjects.*;
|
import ca.cosc3p91.a2.gameobjects.*;
|
||||||
import ca.cosc3p91.a2.player.*;
|
import ca.cosc3p91.a2.player.*;
|
||||||
|
import ca.cosc3p91.a2.util.Print;
|
||||||
|
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
public class GameEngine implements Runnable {
|
public class GameEngine implements Runnable {
|
||||||
|
|
||||||
private Player player;
|
private Player player;
|
||||||
|
boolean running = true;
|
||||||
|
|
||||||
private int pillageFactor;
|
private int pillageFactor;
|
||||||
|
|
||||||
|
@ -16,22 +20,54 @@ public class GameEngine implements Runnable {
|
||||||
public GameEngine() {
|
public GameEngine() {
|
||||||
player = new Player();
|
player = new Player();
|
||||||
VillageStage vInitialStage = new VillageStage(100, 0, 2, 30, 0,
|
VillageStage vInitialStage = new VillageStage(100, 0, 2, 30, 0,
|
||||||
0, 12, 12, 12);
|
0, 1000, 2500, 5000);
|
||||||
map = new Map(new Village_Hall(1, vInitialStage), 30);
|
map = new Map(new VillageHall(1, vInitialStage), 30);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void printState() {
|
private void printState() {
|
||||||
// Print toPrint = new Print("~ Current Village Buildings ~",2);
|
Print resourcesPrinter = new Print("Current Village Resources", 2);
|
||||||
|
|
||||||
System.out.println("In Map:\n");
|
resourcesPrinter.addColumn(new Print.Column("Resource Type"));
|
||||||
System.out.println("\t~ Current Village Buildings ~\n");
|
resourcesPrinter.addColumn(new Print.Column("Max"));
|
||||||
for (Building b : map.contains) {
|
resourcesPrinter.addColumn(new Print.Column("Amount"));
|
||||||
System.out.println("\t|> " + b.getClass().getSimpleName() + " lvl: " + b.getLevel() + " health: " + b.getHealth());
|
|
||||||
}
|
resourcesPrinter.addRow(new Print.Row(
|
||||||
System.out.println("\n\t~ Current Village Inhabitants ~\n\n");
|
"Wood",
|
||||||
for (Inhabitant i : map.inhabitants) {
|
Integer.toString(map.getTownHall().getWoodCapacity()),
|
||||||
System.out.println("\t|> " + i.getClass().getSimpleName() + " lvl: " + i.getLevel());
|
Integer.toString(map.getTownHall().getCurrentWood())));
|
||||||
}
|
|
||||||
|
resourcesPrinter.addRow(new Print.Row(
|
||||||
|
"Iron",
|
||||||
|
Integer.toString(map.getTownHall().getIronCapacity()),
|
||||||
|
Integer.toString(map.getTownHall().getCurrentIron())));
|
||||||
|
|
||||||
|
resourcesPrinter.addRow(new Print.Row(
|
||||||
|
"Gold",
|
||||||
|
Integer.toString(map.getTownHall().getGoldCapacity()),
|
||||||
|
Integer.toString(map.getTownHall().getCurrentGold())));
|
||||||
|
|
||||||
|
Print.print(resourcesPrinter.createTable(true, false, true));
|
||||||
|
|
||||||
|
Print buildingPrinter = new Print("Village Buildings", 2, resourcesPrinter.getWidth());
|
||||||
|
buildingPrinter.addColumn(new Print.Column("Name"));
|
||||||
|
buildingPrinter.addColumn(new Print.Column("Level"));
|
||||||
|
buildingPrinter.addColumn(new Print.Column("Health"));
|
||||||
|
|
||||||
|
for (Building b : map.contains)
|
||||||
|
buildingPrinter.addRow(new Print.Row(b.getClass().getSimpleName(),
|
||||||
|
Integer.toString(b.getLevel()),
|
||||||
|
Integer.toString(b.getHealth())));
|
||||||
|
|
||||||
|
Print.print(buildingPrinter.createTable(true, false, true));
|
||||||
|
|
||||||
|
Print inhabs = new Print("Village Inhabitants", 2, buildingPrinter.getWidth());
|
||||||
|
inhabs.addColumn(new Print.Column("Name"));
|
||||||
|
inhabs.addColumn(new Print.Column("Level"));
|
||||||
|
|
||||||
|
for (Inhabitant i : map.inhabitants)
|
||||||
|
inhabs.addRow(new Print.Row(i.getClass().getSimpleName(), Integer.toString(i.getLevel())));
|
||||||
|
|
||||||
|
Print.print(inhabs.createTable(true, true, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void attackVillage(Map map) {
|
public void attackVillage(Map map) {
|
||||||
|
@ -46,6 +82,10 @@ public class GameEngine implements Runnable {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
Scanner sc = new Scanner(System.in);
|
||||||
|
while (running) {
|
||||||
|
printState();
|
||||||
|
int in = sc.nextInt();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ public class Map {
|
||||||
|
|
||||||
static int MAXSIZE = 400;
|
static int MAXSIZE = 400;
|
||||||
|
|
||||||
private Village_Hall townHall;
|
private VillageHall townHall;
|
||||||
|
|
||||||
private int guardTime;
|
private int guardTime;
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ public class Map {
|
||||||
|
|
||||||
public List<Inhabitant> inhabitants;
|
public List<Inhabitant> inhabitants;
|
||||||
|
|
||||||
public Map(Village_Hall villageHall, int gTime) {
|
public Map(VillageHall villageHall, int gTime) {
|
||||||
contains = new ArrayList<>();
|
contains = new ArrayList<>();
|
||||||
inhabitants = new ArrayList<>();
|
inhabitants = new ArrayList<>();
|
||||||
this.townHall = villageHall;
|
this.townHall = villageHall;
|
||||||
|
@ -45,4 +45,8 @@ public class Map {
|
||||||
this.guardTime = gTime;
|
this.guardTime = gTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public VillageHall getTownHall(){
|
||||||
|
return townHall;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,5 +12,5 @@ public class Farm extends ResourceBuilding {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void harvest(Village_Hall hall) {}
|
public void harvest(VillageHall hall) {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ public class IronMine extends ResourceBuilding {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void harvest(Village_Hall hall) {
|
public void harvest(VillageHall hall) {
|
||||||
hall.addCurrentIron(getHarvestRate());
|
hall.addCurrentIron(getHarvestRate());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ public class LumberMine extends ResourceBuilding {
|
||||||
upgrade(baseStage);
|
upgrade(baseStage);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void harvest(Village_Hall hall) {
|
public void harvest(VillageHall hall) {
|
||||||
hall.addCurrentWood(getHarvestRate());
|
hall.addCurrentWood(getHarvestRate());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,14 +20,14 @@ public abstract class ResourceBuilding extends Building {
|
||||||
this.harvest_rate += stage.getHarvestRateIncrease();
|
this.harvest_rate += stage.getHarvestRateIncrease();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void update(Village_Hall hall){
|
public void update(VillageHall hall){
|
||||||
if (nextHarvestTime.occurred()){
|
if (nextHarvestTime.occurred()){
|
||||||
harvest(hall);
|
harvest(hall);
|
||||||
nextHarvestTime = Time.getTime().offsetTime(harvestMinTime);
|
nextHarvestTime = Time.getTime().offsetTime(harvestMinTime);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void harvest(Village_Hall hall);
|
protected abstract void harvest(VillageHall hall);
|
||||||
|
|
||||||
public int getHarvestRate(){
|
public int getHarvestRate(){
|
||||||
return harvest_rate;
|
return harvest_rate;
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
package ca.cosc3p91.a2.gameobjects;
|
package ca.cosc3p91.a2.gameobjects;
|
||||||
|
|
||||||
import ca.cosc3p91.a2.util.Time;
|
|
||||||
|
|
||||||
public class SaulGoodMine extends ResourceBuilding {
|
public class SaulGoodMine extends ResourceBuilding {
|
||||||
|
|
||||||
public static String resource = "gold";
|
public static String resource = "gold";
|
||||||
|
@ -12,7 +10,7 @@ public class SaulGoodMine extends ResourceBuilding {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void harvest(Village_Hall hall) {
|
public void harvest(VillageHall hall) {
|
||||||
hall.addCurrentGold(getHarvestRate());
|
hall.addCurrentGold(getHarvestRate());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@ package ca.cosc3p91.a2.gameobjects;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class Village_Hall extends Building {
|
public class VillageHall extends Building {
|
||||||
|
|
||||||
private int goldCapacity = 0;
|
private int goldCapacity = 0;
|
||||||
private int ironCapacity = 0;
|
private int ironCapacity = 0;
|
||||||
|
@ -12,7 +12,7 @@ public class Village_Hall extends Building {
|
||||||
private int currentIron;
|
private int currentIron;
|
||||||
private int currentWood;
|
private int currentWood;
|
||||||
|
|
||||||
public Village_Hall(int lvl, VillageStage baseStage) {
|
public VillageHall(int lvl, VillageStage baseStage) {
|
||||||
setLevel(lvl);
|
setLevel(lvl);
|
||||||
upgrade(baseStage);
|
upgrade(baseStage);
|
||||||
}
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
package ca.cosc3p91.a2.util;
|
package ca.cosc3p91.a2.util;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ported from blt::TableFormatter (C++)
|
* Ported from blt::TableFormatter (C++)
|
||||||
|
@ -19,13 +20,18 @@ public class Print {
|
||||||
this.values = new ArrayList<>();
|
this.values = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Row(String... values){
|
||||||
|
this();
|
||||||
|
this.values.addAll(Arrays.asList(values));
|
||||||
|
}
|
||||||
|
|
||||||
public void add(String value) {
|
public void add(String value) {
|
||||||
values.add(value);
|
values.add(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Column {
|
public static class Column {
|
||||||
private final String columnName;
|
private String columnName;
|
||||||
private long maxColumnLength = 0;
|
private long maxColumnLength = 0;
|
||||||
|
|
||||||
public Column(String columnName) {
|
public Column(String columnName) {
|
||||||
|
@ -38,15 +44,21 @@ public class Print {
|
||||||
|
|
||||||
private final String tableName;
|
private final String tableName;
|
||||||
private final int columnPadding;
|
private final int columnPadding;
|
||||||
private int maxColumnWidth;
|
private int width;
|
||||||
|
private final int targetWidth;
|
||||||
|
|
||||||
public Print(String tableName, int columnPadding) {
|
public Print(String tableName, int columnPadding, int targetWidth) {
|
||||||
this.tableName = tableName;
|
this.tableName = tableName;
|
||||||
this.columnPadding = columnPadding;
|
this.columnPadding = columnPadding;
|
||||||
|
this.targetWidth = targetWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Print(String tableName, int columnPadding){this(tableName, columnPadding, -1);}
|
||||||
|
|
||||||
|
public Print(String tableName){this(tableName, 2);}
|
||||||
|
|
||||||
public Print() {
|
public Print() {
|
||||||
this("", 2);
|
this("");
|
||||||
}
|
}
|
||||||
|
|
||||||
private String createPadding(int amount) {
|
private String createPadding(int amount) {
|
||||||
|
@ -114,7 +126,7 @@ public class Print {
|
||||||
StringBuilder wholeWidthSeparator = new StringBuilder();
|
StringBuilder wholeWidthSeparator = new StringBuilder();
|
||||||
for (int i = 0; i < size; i++) {
|
for (int i = 0; i < size; i++) {
|
||||||
if (i == nextIndex) {
|
if (i == nextIndex) {
|
||||||
System.out.println(currentColumnIndex + " " + nextIndex + " " + size);
|
//System.out.println(currentColumnIndex + " " + nextIndex + " " + size);
|
||||||
int currentColumnSize = (int) (columns.get(currentColumnIndex++).maxColumnLength + columnPadding * 2);
|
int currentColumnSize = (int) (columns.get(currentColumnIndex++).maxColumnLength + columnPadding * 2);
|
||||||
nextIndex += currentColumnSize + 1;
|
nextIndex += currentColumnSize + 1;
|
||||||
wholeWidthSeparator.append('+');
|
wholeWidthSeparator.append('+');
|
||||||
|
@ -130,7 +142,7 @@ public class Print {
|
||||||
Column column = columns.get(i);
|
Column column = columns.get(i);
|
||||||
column.maxColumnLength = column.columnName.length();
|
column.maxColumnLength = column.columnName.length();
|
||||||
for (Row row : rows) {
|
for (Row row : rows) {
|
||||||
column.maxColumnLength = Math.max(column.maxColumnLength, row.values.get(i).length() - 1);
|
column.maxColumnLength = Math.max(column.maxColumnLength, row.values.get(i).length());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -159,12 +171,38 @@ public class Print {
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<String> createTable(boolean top, boolean bottom, boolean separators) {
|
public ArrayList<String> createTable(boolean top, boolean bottom, boolean separators) {
|
||||||
ArrayList<String> lines = new ArrayList<>();
|
|
||||||
|
|
||||||
String header = generateColumnHeader();
|
String header = generateColumnHeader();
|
||||||
String topSeparator = generateTopSelector(header.length());
|
String topSeparator = generateTopSelector(header.length());
|
||||||
String lineSeparator = generateSeparator(header.length() - 1);
|
String lineSeparator = generateSeparator(header.length() - 1);
|
||||||
|
|
||||||
|
if (targetWidth > 0) {
|
||||||
|
int diff = targetWidth - header.length();
|
||||||
|
|
||||||
|
if (diff > 0) {
|
||||||
|
|
||||||
|
int left = (int) Math.floor(diff / 2.0);
|
||||||
|
|
||||||
|
int leftleft = (int) Math.floor(left / 2.0);
|
||||||
|
int leftright = (int) Math.ceil(left / 2.0);
|
||||||
|
|
||||||
|
int right = (int) Math.ceil(diff / 2.0);
|
||||||
|
|
||||||
|
int rightleft = (int) Math.floor(right / 2.0);
|
||||||
|
int rightright = (int) Math.ceil(right / 2.0);
|
||||||
|
|
||||||
|
columns.get(0).columnName = createPadding(leftleft) + columns.get(0).columnName + createPadding(leftright);
|
||||||
|
columns.get(columns.size() - 1).columnName = createPadding(rightleft) + columns.get(columns.size() - 1).columnName + createPadding(rightright);
|
||||||
|
|
||||||
|
header = generateColumnHeader();
|
||||||
|
topSeparator = generateTopSelector(header.length());
|
||||||
|
lineSeparator = generateSeparator(header.length() - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
width = header.length();
|
||||||
|
|
||||||
|
ArrayList<String> lines = new ArrayList<>();
|
||||||
|
|
||||||
if (top)
|
if (top)
|
||||||
lines.add(topSeparator);
|
lines.add(topSeparator);
|
||||||
|
|
||||||
|
@ -200,6 +238,10 @@ public class Print {
|
||||||
return createTable(true, true, true);
|
return createTable(true, true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getWidth(){
|
||||||
|
return width;
|
||||||
|
}
|
||||||
|
|
||||||
public static void print(ArrayList<String> lines) {
|
public static void print(ArrayList<String> lines) {
|
||||||
for (String line : lines)
|
for (String line : lines)
|
||||||
System.out.println(line);
|
System.out.println(line);
|
||||||
|
|
Loading…
Reference in New Issue