Browse Source

merged branch develop into shop

remotes/origin/develop
Max Gerbeth 2 years ago
parent
commit
2ad05fa568
  1. 3
      src/main/java/org/bitbiome/Boot.java
  2. 96
      src/main/java/org/bitbiome/classes/BlackJack.java
  3. 106
      src/main/java/org/bitbiome/classes/Colors.java
  4. 24
      src/main/java/org/bitbiome/classes/CreateLocations.java
  5. 38
      src/main/java/org/bitbiome/classes/InteractionLoop.java
  6. 37
      src/main/java/org/bitbiome/classes/JsonParser.java
  7. 11
      src/main/java/org/bitbiome/classes/TravelEngine.java
  8. 109
      src/main/java/org/bitbiome/commands/BlackJackCommand.java
  9. 4
      src/main/java/org/bitbiome/commands/CommandAPI.java
  10. 4
      src/main/java/org/bitbiome/commands/CommandListener.java
  11. 4
      src/main/java/org/bitbiome/commands/HelpCommand.java
  12. 4
      src/main/java/org/bitbiome/commands/QuitCommand.java
  13. 106
      src/main/java/org/bitbiome/commands/QuizCommand.java
  14. 15
      src/main/java/org/bitbiome/commands/TravelCommand.java
  15. 10
      src/main/java/org/bitbiome/entities/Item.java
  16. 8
      src/main/java/org/bitbiome/entities/Location.java
  17. 4
      src/main/java/org/bitbiome/entities/Mob.java
  18. 11
      src/main/java/org/bitbiome/entities/Player.java
  19. 31
      src/main/resources/playerconfig.json
  20. 405
      src/main/resources/quiz.json
  21. 44
      src/test/java/org/bitbiome/classes/BlackJackTest.java
  22. 23
      src/test/java/org/bitbiome/classes/ColorsTest.java
  23. 2
      src/test/java/org/bitbiome/commands/HelpCommandTest.java
  24. 36
      src/test/java/org/bitbiome/commands/QuizCommandTest.java
  25. 38
      src/test/java/org/bitbiome/entitiesTest/ItemTest.java
  26. 24
      src/test/java/org/bitbiome/entitiesTest/LocationTest.java
  27. 35
      src/test/java/org/bitbiome/entitiesTest/MobTest.java
  28. 43
      src/test/java/org/bitbiome/entitiesTest/PlayerTest.java

3
src/main/java/org/bitbiome/Boot.java

@ -26,8 +26,7 @@ public class Boot {
private Player getPlayerSave() {
String name;
JsonParser jp = new JsonParser();
JSONObject playerconfig = jp.getJSONObject("playerconfig.json");
JSONObject playerconfig = JsonParser.getJSONObject("src/main/resources/playerconfig.json");
name = playerconfig.getString("name");
return new Player(name);
}

96
src/main/java/org/bitbiome/classes/BlackJack.java

@ -0,0 +1,96 @@
package org.bitbiome.classes;
import java.util.Random;
public class BlackJack {
public enum Entity {
PLAYER(1), BOT(2);
private int value;
private Entity(int value) {
this.value = value;
}
public int getValue() {
return value;
}
//Just for testing from some SO answers, but no use
public void setValue(int value) {
this.value = value;
}
public static Entity getEventStatusById(int id) {
Entity entity = null;
switch (id) {
case 1 -> entity = PLAYER;
case 2 -> entity = BOT;
default -> {
}
}
return entity;
}
}
private String playerName;
private int playerPoints;
private int botPoints;
private boolean playerIn;
private boolean botIn;
public BlackJack(String playerName) {
this.playerName = playerName;
this.playerPoints = 0;
this.botPoints = 0;
this.playerIn = true;
this.botIn = true;
}
public String getPlayerName(Entity entity) {
return entity == Entity.PLAYER ? playerName : "BitBiome";
}
public int getPoints(Entity entity) {
return entity == Entity.PLAYER ? playerPoints : botPoints;
}
public boolean isIn(Entity entity) {
return entity == Entity.PLAYER ? playerIn : botIn;
}
public Entity getEntity(int ID) {
return Entity.getEventStatusById(ID);
}
public void addPoints(Entity entity, int points) {
if (entity == Entity.BOT) botPoints += points;
if (entity == Entity.PLAYER) playerPoints += points;
}
public boolean botWantsToPlay() {
if (botIn) {
if (botPoints <= 10) {
return true;
} else if (botPoints <= 17) {
int r = new Random().nextInt(1, 9);
if (r <= 3) {
botIn = false;
return false;
} else {
return true;
}
} else {
botIn = false;
return false;
}
} else {
return false;
}
}
public void playerOut() {
this.playerIn = false;
}
}

106
src/main/java/org/bitbiome/classes/Colors.java

@ -2,55 +2,61 @@ package org.bitbiome.classes;
public class Colors {
public static final String ANSI_RESET = "\u001B[0m";
public static final String ANSI_BLACK = "\u001B[30m";
public static final String ANSI_RED = "\u001B[31m";
public static final String ANSI_GREEN = "\u001B[32m";
public static final String ANSI_YELLOW = "\u001B[33m";
public static final String ANSI_BLUE = "\u001B[34m";
public static final String ANSI_PURPLE = "\u001B[35m";
public static final String ANSI_CYAN = "\u001B[36m";
public static final String ANSI_WHITE = "\u001B[37m";
public static final String ANSI_BRIGHT_BLACK = "\u001B[90m";
public static final String ANSI_BRIGHT_RED = "\u001B[91m";
public static final String ANSI_BRIGHT_GREEN = "\u001B[92m";
public static final String ANSI_BRIGHT_YELLOW = "\u001B[93m";
public static final String ANSI_BRIGHT_BLUE = "\u001B[94m";
public static final String ANSI_BRIGHT_PURPLE = "\u001B[95m";
public static final String ANSI_BRIGHT_CYAN = "\u001B[96m";
public static final String ANSI_BRIGHT_WHITE = "\u001B[97m";
public static final String[] FOREGROUNDS = {
ANSI_BLACK, ANSI_RED, ANSI_GREEN, ANSI_YELLOW,
ANSI_BLUE, ANSI_PURPLE, ANSI_CYAN, ANSI_WHITE,
ANSI_BRIGHT_BLACK, ANSI_BRIGHT_RED, ANSI_BRIGHT_GREEN, ANSI_BRIGHT_YELLOW,
ANSI_BRIGHT_BLUE, ANSI_BRIGHT_PURPLE, ANSI_BRIGHT_CYAN, ANSI_BRIGHT_WHITE
};
public static final String ANSI_BG_BLACK = "\u001B[40m";
public static final String ANSI_BG_RED = "\u001B[41m";
public static final String ANSI_BG_GREEN = "\u001B[42m";
public static final String ANSI_BG_YELLOW = "\u001B[43m";
public static final String ANSI_BG_BLUE = "\u001B[44m";
public static final String ANSI_BG_PURPLE = "\u001B[45m";
public static final String ANSI_BG_CYAN = "\u001B[46m";
public static final String ANSI_BG_WHITE = "\u001B[47m";
public static final String ANSI_BRIGHT_BG_BLACK = "\u001B[100m";
public static final String ANSI_BRIGHT_BG_RED = "\u001B[101m";
public static final String ANSI_BRIGHT_BG_GREEN = "\u001B[102m";
public static final String ANSI_BRIGHT_BG_YELLOW = "\u001B[103m";
public static final String ANSI_BRIGHT_BG_BLUE = "\u001B[104m";
public static final String ANSI_BRIGHT_BG_PURPLE = "\u001B[105m";
public static final String ANSI_BRIGHT_BG_CYAN = "\u001B[106m";
public static final String ANSI_BRIGHT_BG_WHITE = "\u001B[107m";
public static final String[] BACKGROUNDS = {
ANSI_BG_BLACK, ANSI_BG_RED, ANSI_BG_GREEN, ANSI_BG_YELLOW,
ANSI_BG_BLUE, ANSI_BG_PURPLE, ANSI_BG_CYAN, ANSI_BG_WHITE,
ANSI_BRIGHT_BG_BLACK, ANSI_BRIGHT_BG_RED, ANSI_BRIGHT_BG_GREEN, ANSI_BRIGHT_BG_YELLOW,
ANSI_BRIGHT_BG_BLUE, ANSI_BRIGHT_BG_PURPLE, ANSI_BRIGHT_BG_CYAN, ANSI_BRIGHT_BG_WHITE };
/*
* This class has only public static mehtods
* Just add a String to your String and finalize it with the ANSI_RESET String
* The Color Codes with BG in the variable name are for the background colors
*/
public static final String ANSI_RESET = "\u001B[0m";
public static final String ANSI_BLACK = "\u001B[30m";
public static final String ANSI_RED = "\u001B[31m";
public static final String ANSI_GREEN = "\u001B[32m";
public static final String ANSI_YELLOW = "\u001B[33m";
public static final String ANSI_BLUE = "\u001B[34m";
public static final String ANSI_PURPLE = "\u001B[35m";
public static final String ANSI_CYAN = "\u001B[36m";
public static final String ANSI_WHITE = "\u001B[37m";
public static final String ANSI_BRIGHT_BLACK = "\u001B[90m";
public static final String ANSI_BRIGHT_RED = "\u001B[91m";
public static final String ANSI_BRIGHT_GREEN = "\u001B[92m";
public static final String ANSI_BRIGHT_YELLOW = "\u001B[93m";
public static final String ANSI_BRIGHT_BLUE = "\u001B[94m";
public static final String ANSI_BRIGHT_PURPLE = "\u001B[95m";
public static final String ANSI_BRIGHT_CYAN = "\u001B[96m";
public static final String ANSI_BRIGHT_WHITE = "\u001B[97m";
public static final String[] FOREGROUNDS = {
ANSI_BLACK, ANSI_RED, ANSI_GREEN, ANSI_YELLOW,
ANSI_BLUE, ANSI_PURPLE, ANSI_CYAN, ANSI_WHITE,
ANSI_BRIGHT_BLACK, ANSI_BRIGHT_RED, ANSI_BRIGHT_GREEN, ANSI_BRIGHT_YELLOW,
ANSI_BRIGHT_BLUE, ANSI_BRIGHT_PURPLE, ANSI_BRIGHT_CYAN, ANSI_BRIGHT_WHITE
};
public static final String ANSI_BG_BLACK = "\u001B[40m";
public static final String ANSI_BG_RED = "\u001B[41m";
public static final String ANSI_BG_GREEN = "\u001B[42m";
public static final String ANSI_BG_YELLOW = "\u001B[43m";
public static final String ANSI_BG_BLUE = "\u001B[44m";
public static final String ANSI_BG_PURPLE = "\u001B[45m";
public static final String ANSI_BG_CYAN = "\u001B[46m";
public static final String ANSI_BG_WHITE = "\u001B[47m";
public static final String ANSI_BRIGHT_BG_BLACK = "\u001B[100m";
public static final String ANSI_BRIGHT_BG_RED = "\u001B[101m";
public static final String ANSI_BRIGHT_BG_GREEN = "\u001B[102m";
public static final String ANSI_BRIGHT_BG_YELLOW = "\u001B[103m";
public static final String ANSI_BRIGHT_BG_BLUE = "\u001B[104m";
public static final String ANSI_BRIGHT_BG_PURPLE = "\u001B[105m";
public static final String ANSI_BRIGHT_BG_CYAN = "\u001B[106m";
public static final String ANSI_BRIGHT_BG_WHITE = "\u001B[107m";
public static final String[] BACKGROUNDS = {
ANSI_BG_BLACK, ANSI_BG_RED, ANSI_BG_GREEN, ANSI_BG_YELLOW,
ANSI_BG_BLUE, ANSI_BG_PURPLE, ANSI_BG_CYAN, ANSI_BG_WHITE,
ANSI_BRIGHT_BG_BLACK, ANSI_BRIGHT_BG_RED, ANSI_BRIGHT_BG_GREEN, ANSI_BRIGHT_BG_YELLOW,
ANSI_BRIGHT_BG_BLUE, ANSI_BRIGHT_BG_PURPLE, ANSI_BRIGHT_BG_CYAN, ANSI_BRIGHT_BG_WHITE };
}

24
src/main/java/org/bitbiome/classes/CreateLocations.java

@ -1,24 +0,0 @@
package org.bitbiome.classes;
import org.bitbiome.entities.Item;
import org.bitbiome.entities.Location;
import org.bitbiome.entities.Mob;
import java.util.ArrayList;
public class CreateLocations {
public static Location createForest() {
ArrayList<Item> items = new ArrayList<>();
ArrayList<Mob> mobs = new ArrayList<>();
String name = "Wald";
return new Location(name, mobs, items);
}
public static Location createBeach() {
ArrayList<Item> items = new ArrayList<>();
ArrayList<Mob> mobs = new ArrayList<>();
String name = "Strand";
return new Location(name, mobs, items);
}
}

38
src/main/java/org/bitbiome/classes/InteractionLoop.java

@ -11,24 +11,40 @@ public class InteractionLoop {
public void run(TravelEngine travelEngine) {
boolean isRunning = true;
if (travelEngine.getPlayer().getName().equals("null")) {
System.out.println(Colors.ANSI_BLUE + "Oh, ein Fremder!\nBist du bereit für dein womöglich größtes Abenteuer?\nDann sag mir doch zunächst wie du heißt: " + Colors.ANSI_RESET);
String name = input.nextLine();
JsonParser jp = new JsonParser();
JSONObject playerconf = jp.getJSONObject("playerconfig.json");
playerconf.put("name", name);
travelEngine.getPlayer().setName(name);
jp.writeObject("playerconfig.json", playerconf);
if (playerIsNew(travelEngine.getPlayer().getName())) {
newPlayerWelcome(travelEngine);
}
System.out.println(Colors.ANSI_BG_CYAN + Colors.ANSI_BLACK + "Willkommen zu BitBiome " + travelEngine.getPlayer().getName() + "!" + Colors.ANSI_RESET + "\n\n");
print(Colors.ANSI_BG_CYAN + Colors.ANSI_BLACK + "Willkommen zu BitBiome " + travelEngine.getPlayer().getName()
+ "!" + Colors.ANSI_RESET + "\n\n");
while (isRunning) {
String line = input.nextLine().toLowerCase();
if (!Boot.instance.getCmdListener().perform(line.toLowerCase().split(" ")[0], input, isRunning, line, travelEngine)) {
System.out.println("Unknown Command");
if (!Boot.instance.getCmdListener().perform(line.toLowerCase().split(" ")[0], input, isRunning, line,
travelEngine)) {
print(Colors.ANSI_RED + "Unbekannter Befehl - Siehe " + Colors.ANSI_PURPLE + "help\n"
+ Colors.ANSI_RESET);
}
}
}
public boolean print(String message) {
System.out.println(message);
return true;
}
public boolean playerIsNew(String name) {
return name.equalsIgnoreCase("null");
}
public void newPlayerWelcome(TravelEngine travelEngine) {
print(Colors.ANSI_BLUE
+ "Oh, ein Fremder!\nBist du bereit für dein womöglich größtes Abenteuer?\nDann sag mir doch zunächst wie du heißt: "
+ Colors.ANSI_RESET);
String name = input.nextLine();
JsonParser jp = new JsonParser();
JSONObject playerconf = JsonParser.getJSONObject("src/main/resources/playerconfig.json");
playerconf.put("name", name);
travelEngine.getPlayer().setName(name);
JsonParser.writeObject("src/main/resources/playerconfig.json", playerconf);
}
}

37
src/main/java/org/bitbiome/classes/JsonParser.java

@ -1,15 +1,10 @@
package org.bitbiome.classes;
import org.json.JSONObject;
import org.json.JSONTokener;
import org.json.JSONWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.io.FileReader;
public class JsonParser {
@ -28,20 +23,30 @@ public class JsonParser {
https://github.com/stleary/JSON-java
*/
public JSONObject getJSONObject(String fileName) {
String resourceName = "./../../../" + fileName;
InputStream is = JsonParser.class.getResourceAsStream(resourceName);
if (is == null) {
throw new NullPointerException("Cannot find resource file " + resourceName);
public static JSONObject getJSONObject(String filePath) {
StringBuilder sb = null;
try {
FileReader reader = new FileReader(filePath);
char[] buffer = new char[1024];
int length;
sb = new StringBuilder();
while ((length = reader.read(buffer)) != -1) {
sb.append(buffer, 0, length);
}
reader.close();
} catch (IOException e) {
System.out.println(e);
}
JSONTokener tokener = new JSONTokener(is);
return new JSONObject(tokener);
return new JSONObject(sb.toString());
}
public void writeObject(String fileName, JSONObject object) {
public static void writeObject(String fileName, JSONObject object) {
String resourceName = fileName;
String resourceName = System.getProperty("user.dir") + "/src/main/resources/" + fileName;
try {
FileWriter fw = new FileWriter(resourceName, false);
fw.write(object.toString(1));
@ -49,7 +54,5 @@ public class JsonParser {
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}

11
src/main/java/org/bitbiome/classes/TravelEngine.java

@ -10,21 +10,19 @@ import java.util.ArrayList;
public class TravelEngine {
private JSONArray locations;
private JsonParser jp;
private Player player;
public TravelEngine(Player player) {
jp = new JsonParser();
locations = jp.getJSONObject("gameconfig.json").getJSONArray("locations");
locations = JsonParser.getJSONObject("src/main/resources/gameconfig.json").getJSONArray("locations");
this.player = player;
}
public void travelTo(Location location) {
player.setLocation(location);
JSONObject jObj = jp.getJSONObject("playerconfig.json");
JSONObject jObj = JsonParser.getJSONObject("src/main/resources/playerconfig.json");
jObj.put("currentLocation", location.getName());
jp.writeObject("playerconfig.json", jObj);
JsonParser.writeObject("src/main/resources/playerconfig.json", jObj);
}
public Player getPlayer() {
@ -45,8 +43,7 @@ public class TravelEngine {
}
public Location getLocationByName(String name) {
JsonParser jp = new JsonParser();
JSONObject gameconfig = jp.getJSONObject("gameconfig.json");
JSONObject gameconfig = JsonParser.getJSONObject("src/main/resources/gameconfig.json");
JSONArray locations = gameconfig.getJSONArray("locations");
JSONObject location = null;
if (locationExists(name)) {

109
src/main/java/org/bitbiome/commands/BlackJackCommand.java

@ -0,0 +1,109 @@
package org.bitbiome.commands;
import org.bitbiome.classes.BlackJack;
import org.bitbiome.classes.TravelEngine;
import java.util.Random;
import java.util.Scanner;
public class BlackJackCommand implements CommandAPI {
private boolean over;
@Override
public void performCommand(Scanner scanner, boolean isRunning, String message, TravelEngine travelEngine) {
System.out.println("Du hast das Spiel BlackJack gestartet. Die Spielregeln lauten wie folgt: Du und dein Gegner bekommen jede Runde Zahlen von 4 - 11. \nDerjenige, der zuerst 21 Punkte hat gewinnt. Derjenige, der über 21 Punkte hat verliert. Möchte keiner mehr Karten ziehen, gewinnt der mit dem höchsten Blatt!\nViel Spaß!");
over = false;
spielen();
}
public void spielen() {
BlackJack bj = new BlackJack("Dave");
Scanner sc = new Scanner(System.in);
BlackJack.Entity player = bj.getEntity(1);
while (!over) {
int r = new Random().nextInt(4, 11);
bj.addPoints(player, r);
System.out.println(bj.getPlayerName(player) + " hat " + r + " bekommen. Er hat insgesamt " + bj.getPoints(player) + ".");
if (bj.getPoints(player) >= 21) {
over21(player, bj);
has21(player, bj);
over = true;
break;
}
System.out.print("Weiter?");
if (player == BlackJack.Entity.BOT) {
if (bj.botWantsToPlay()) {
System.out.println("Na klar!");
} else {
System.out.println("Nope, ich bin fertig.");
}
} else {
String eingabe = sc.nextLine();
if (!eingabe.toLowerCase().startsWith("j")) {
bj.playerOut();
}
}
player = switchPlayer(player, bj);
}
}
public void over21(BlackJack.Entity player, BlackJack bj) {
if (bj.getPoints(player) > 21) {
over = true;
System.out.println(bj.getPlayerName(player) + " hat über 21 Punkte und damit verloren.");
}
}
public void has21(BlackJack.Entity player, BlackJack bj) {
if (bj.getPoints(player) == 21) {
System.out.println(bj.getPlayerName(player) + " hat gewonnen! Du hast 21 Punkte!");
over = true;
}
}
public BlackJack.Entity switchPlayer(BlackJack.Entity player, BlackJack bj) {
BlackJack.Entity BOT = BlackJack.Entity.BOT;
BlackJack.Entity PLAYER = BlackJack.Entity.PLAYER;
if (bj.isIn(BOT) || bj.isIn(PLAYER)) {
if (player == PLAYER) {
if (bj.isIn(BOT)) {
return BOT;
}
return PLAYER;
} else {
if (bj.isIn(PLAYER)) {
return PLAYER;
}
return BOT;
}
} else {
over = true;
getWinner(bj);
return null;
}
}
public void getWinner(BlackJack bj) {
BlackJack.Entity entity;
if (bj.getPoints(BlackJack.Entity.BOT) < bj.getPoints(BlackJack.Entity.PLAYER)) {
entity = BlackJack.Entity.PLAYER;
System.out.println(bj.getPlayerName(entity) + " hat gewonnen, da er mehr Punkte hat!");
} else if (bj.getPoints(BlackJack.Entity.BOT) == bj.getPoints(BlackJack.Entity.PLAYER)){
System.out.println("Es ist Gleichstand!");
} else {
entity = BlackJack.Entity.BOT;
System.out.println(bj.getPlayerName(entity) + " hat gewonnen, da er mehr Punkte hat!");
}
}
}

4
src/main/java/org/bitbiome/commands/CommandAPI.java

@ -5,6 +5,10 @@ import org.bitbiome.classes.TravelEngine;
import java.util.Scanner;
public interface CommandAPI {
// This is the command interface. Every command implements it's run method from here
// This is the API between the commands and the interaction loop/game
public void performCommand(Scanner scanner, boolean isRunning, String message, TravelEngine travelEngine);
}

4
src/main/java/org/bitbiome/commands/CommandListener.java

@ -16,6 +16,10 @@ public class CommandListener {
commands.put("exit", new QuitCommand());
commands.put("quit", new QuitCommand());
commands.put("location", new LocationCommand());
commands.put("travel", new TravelCommand());
commands.put("quiz", new QuizCommand());
commands.put("blackjack", new BlackJackCommand());
commands.put("shop", new ShopCommand());

4
src/main/java/org/bitbiome/commands/HelpCommand.java

@ -1,10 +1,10 @@
package org.bitbiome.commands;
import org.bitbiome.Boot;
import org.bitbiome.classes.Colors;
import org.bitbiome.classes.TravelEngine;
import java.util.HashMap;
import java.util.Scanner;
public class HelpCommand implements CommandAPI {

4
src/main/java/org/bitbiome/commands/QuitCommand.java

@ -6,6 +6,10 @@ import java.util.Scanner;
public class QuitCommand implements CommandAPI {
// This command is used to end the game via command
// When the player quits the game, the game is stopped through System.exit(0)
// That means it is exited with no error status
@Override
public void performCommand(Scanner scanner, boolean isRunning, String message, TravelEngine travelEngine) {
System.out.println(getQuitMessage());

106
src/main/java/org/bitbiome/commands/QuizCommand.java

@ -0,0 +1,106 @@
package org.bitbiome.commands;
import org.bitbiome.classes.JsonParser;
import org.json.JSONArray;
import org.json.JSONObject;
import org.bitbiome.classes.TravelEngine;
import java.util.Date;
import java.util.Random;
import java.util.Scanner;
public class QuizCommand implements CommandAPI {
private Scanner quizScanner;
@Override
public void performCommand(Scanner scanner, boolean isRunning, String message, TravelEngine travelEngine) {
quizScanner = new Scanner(System.in);
String path = "src/main/resources/quiz.json";
JSONObject quiz = JsonParser.getJSONObject(path);
long diffTime = canPlayAgain(quiz.getLong("lastPlayed"));
if (diffTime > 0) {
print("Du darfst erst in " + diffTime / 1000 / 60 + " Minuten spielen.");
return;
}
JSONArray fragen = quiz.getJSONArray("Quiz");
JSONObject frage = fragen.getJSONObject(random(fragen.length()));
JSONArray antworten = frage.getJSONArray("antworten");
String korrekteAntwort = frage.getString("korrekteAntwort");
print(starterMessage());
print(generateQuestion(frage, antworten));
int eingabe = quizScanner.nextInt();
if (answerIsCorrect(eingabe, korrekteAntwort, antworten)) {
int neuerStand = addGold();
print("Richtig! Du hast 5 Münzen verdient.\nDein Münzstand beträgt: " + neuerStand);
} else {
print("Leider falsch... Richtig ist: " + korrekteAntwort + "\n");
}
print(endMessage());
Date d = new Date();
long lastPlayed = d.getTime();
quiz.put("lastPlayed", lastPlayed);
JsonParser.writeObject(path, quiz);
}
public static boolean answerIsCorrect(int picked, String answer, JSONArray answers) {
return answers.getString(picked - 1).equalsIgnoreCase(answer);
}
public static String print(String message) {
System.out.println(message);
return message;
}
public static int random(int length) {
return new Random().nextInt(length);
}
public static String generateQuestion(JSONObject frage, JSONArray answers) {
StringBuilder sb = new StringBuilder();
sb.append(frage.getString("frage")).append("\n");
for (int i = 0; i < answers.length(); i++) {
sb.append(i+1).append(". ").append(answers.getString(i)).append("\n");
}
return sb.toString();
}
public static int addGold() {
String playerpath = "src/main/resources/ssplayerconfig.json";
JSONObject playerconfig = JsonParser.getJSONObject(playerpath);
int gold = playerconfig.getInt("gold");
gold = gold + 5;
playerconfig.put("gold", gold);
JsonParser.writeObject(playerpath, playerconfig);
return gold;
}
public static long canPlayAgain(long lastPlayedTime) {
long currentTime = System.currentTimeMillis();
long minTime = lastPlayedTime + (60 * 5 * 1000);
return minTime - currentTime;
}
public static String starterMessage(){
return "Du hast das Quiz gestartet! Hinweis: Wähle deine Antwort, indem du die Zahl (1-4) eingibst. Ist deine Lösung richtig, erhälst du 5 Münzen. Viel Erfolg! \n";
}
public static String endMessage(){
return "Das Quiz ist vorbei!";
}
}

15
src/main/java/org/bitbiome/commands/TravelCommand.java

@ -1,7 +1,7 @@
package org.bitbiome.commands;
import org.bitbiome.classes.Colors;
import org.bitbiome.classes.CreateLocations;
import org.bitbiome.classes.TravelEngine;
import org.bitbiome.entities.Item;
import org.bitbiome.entities.Location;
@ -16,18 +16,23 @@ public class TravelCommand implements CommandAPI {
@Override
public void performCommand(Scanner scanner, boolean isRunning, String message, TravelEngine travelEngine) {
System.out.println(Colors.ANSI_BLUE + "Du hast dein Travel-Pad gezückt. Wohin möchtest du reisen?" + Colors.ANSI_RESET);
print(Colors.ANSI_BLUE + "Du hast dein Travel-Pad gezückt. Wohin möchtest du reisen?" + Colors.ANSI_RESET);
JSONArray locations = travelEngine.getLocationList();
for (int i = 0; i < locations.length(); i++) {
System.out.println("- " + locations.getJSONObject(i).getString("name"));
print("- " + locations.getJSONObject(i).getString("name"));
}
String locationName = scanner.nextLine();
if (travelEngine.locationExists(locationName)) {
travelEngine.travelTo(new Location(locationName, new ArrayList<Mob>(), new ArrayList<Item>()));
System.out.println(Colors.ANSI_BLUE + "Du bist nun hierhin gereist: " + locationName + "\n" + Colors.ANSI_RESET);
print(Colors.ANSI_BLUE + "Du bist nun hierhin gereist: " + locationName + "\n" + Colors.ANSI_RESET);
} else {
System.out.println(Colors.ANSI_BLUE + "Du hast dein Travel-Pad weggesteckt." + Colors.ANSI_RESET);
print(Colors.ANSI_BLUE + "Du hast dein Travel-Pad weggesteckt." + Colors.ANSI_RESET);
}
}
public String print(String message) {
System.out.println(message);
return message;
}
}

10
src/main/java/org/bitbiome/entities/Item.java

@ -2,9 +2,9 @@ package org.bitbiome.entities;
public class Item {
public String name;
public boolean doesDamage;
public float damage;
private String name;
private boolean doesDamage;
private float damage;
public Item(String name, boolean doesDamage, float damage) {
@ -13,6 +13,10 @@ public class Item {
this.damage = damage;
}
public Item() {
}
public String getName() {
return name;
}

8
src/main/java/org/bitbiome/entities/Location.java

@ -15,6 +15,10 @@ public class Location {
this.itemList = itemList;
}
public Location() {
}
public String getName() {
return name;
@ -28,6 +32,10 @@ public class Location {
return itemList;
}
public void setName(String name) {
this.name = name;
}
}

4
src/main/java/org/bitbiome/entities/Mob.java

@ -15,6 +15,10 @@ public class Mob {
this.damage = damage;
}
public Mob() {
}
public String getName() {
return name;
}

11
src/main/java/org/bitbiome/entities/Player.java

@ -1,6 +1,6 @@
package org.bitbiome.entities;
import org.bitbiome.classes.CreateLocations;
import org.bitbiome.classes.JsonParser;
import java.util.ArrayList;
@ -12,16 +12,19 @@ public class Player {
private ArrayList<Item> inventory;
private JsonParser jp;
public Player(String name) {
jp = new JsonParser();
this.name = name;
hp = 100.0F;
location = new Location(jp.getJSONObject("playerconfig.json").getString("currentLocation"), new ArrayList<>(), new ArrayList<>());
location = new Location(JsonParser.getJSONObject("src/main/resources/playerconfig.json").getString("currentLocation"), new ArrayList<>(), new ArrayList<>());
inventory = new ArrayList<>();
}
public Player() {
}
public String getName() {
return name;
}

31
src/main/resources/playerconfig.json

@ -1,17 +1,18 @@
{
"name": "null",
"gold": 0,
"hp": 10,
"currentLocation": "Wald",
"inventory": [
{
"name": "Holz",
"amount": "5",
"durability": 1000
},{
"name": "Stein",
"amount": "5",
"durability": 1000
}
]
"gold": 0,
"name": "Dave",
"hp": 10,
"inventory": [
{
"amount": "5",
"durability": 1000,
"name": "Holz"
},
{
"amount": "5",
"durability": 1000,
"name": "Stein"
}
],
"currentLocation": "Wald"
}

405
src/main/resources/quiz.json

@ -1,204 +1,205 @@
{
"Quiz": [
{
"frage": "Wie lang ist der Äquator der Erde?",
"antworten": [
"20.000m",
"30km",
"60.000km",
"40.000km"
],
"korrekteAntwort": "40.000km"
},
{
"frage": "Was ist der längste Fluss der Welt?",
"antworten": [
"Amazonas",
"Nil",
"Rhein",
"Niger"
],
"korrekteAntwort": "Nil"
},
{
"frage": "Wie viele Tasten hat ein Klavier?",
"antworten": [
"74",
"86",
"82",
"88"
],
"korrekteAntwort": "88"
},
{
"frage": "Von wem wird der Bundespräsident gewählt?",
"antworten": [
"Vom Europäischen Parlament",
"Vom Bundeskanzler",
"Vom Bundestag",
"Von der Bundesversammlung"
],
"korrekteAntwort": "von der Bundesversammlung"
},
{
"frage": "Welches Land produziert jährlich die meisten Filme?",
"antworten": [
"USA",
"Indien",
"Japan",
"Nigeria"
],
"korrekteAntwort": "Indien"
},
{
"frage": "Wie heißt der am schnellsten schwimmende Fisch auf Erden?",
"antworten": [
"Flugfisch",
"Tigerhai",
"Segelfisch",
"Windfisch"
],
"korrekteAntwort": "Segelfisch"
},
{
"frage": "Was ist KEIN Gewächs?",
"antworten": [
"Geranie",
"Moosfarn",
"Incolornis",
"Strandflieder"
],
"korrekteAntwort": "Incolornis"
},
{
"frage": "Was nutzt eine Fledermaus zur Orientierung in der Luft?",
"antworten": [
"Infrarot",
"Röntgenstrahlen",
"Speichel",
"Ultraschall"
],
"korrekteAntwort": "Ultraschall"
},
{
"frage": "Von wem stammt der berühmte Satz: 'Ich denke, also bin ich'?",
"antworten": [
"John Fitzgerald Kennedy",
"George Walker Bush",
"René Descartes",
"Julius Caesar"
],
"korrekteAntwort": "René Descartes"
},
{
"frage": "Welches Lebensmittel enthält das meiste Wasser?",
"antworten": [
"Gurke",
"Wassermelone",
"Zitrone",
"Paprika"
],
"korrekteAntwort": "Gurke"
},
{
"frage": "Welches Lebensmittel gehört im botanischen Sinne zu den Früchten?",
"antworten": [
"Möhre",
"Kartoffel",
"Tomate",
"Weißkohl"
],
"korrekteAntwort": "Tomate"
},
{
"frage": "Haptische Wahrnehmung beruht auf dem...?",
"antworten": [
"Greifreflex",
"Gleichgewichtssinn",
"Hörsinn",
"Tastsinn"
],
"korrekteAntwort": "Tastsinn"
},
{
"frage": "Wie nennt man den letzten Tanz einer Tanzveranstaltung?",
"antworten": [
"Voraus",
"Garaus",
"Kehraus",
"Durchaus"
],
"korrekteAntwort": "Kehraus"
},
{
"frage": "Wie nennt man ein tiefes, enges Tal, durch das ein Gebirgsbach fließt?",
"antworten": [
"Klamm",
"Feucht",
"Nass",
"Schwamm"
],
"korrekteAntwort": "Klamm"
},
{
"frage": "Wer oder was ist Gerbera?",
"antworten": [
"eine europäische Landschaft",
"eine Pflanze",
"die erste Präsidentin von Südafrika",
"eine Stadt in Lichtenstein"
],
"korrekteAntwort": "eine Pflanze"
},
{
"frage": "Nach wem wurde ein Gesellschaftsanzug benannt?",
"antworten": [
"Richard von Weizsäcker",
"Gustav Heinemann",
"Jürgen Klinsmann",
"Gustav Stresemann"
],
"korrekteAntwort": "Gustav Stresemann"
},
{
"frage": "Was ist Speckstein?",
"antworten": [
"eine Fischart, die sich als Stein tarnt",
"ein Gericht aus dem Mittelalter",
"eine Skulptur im Römischen Reich unter Nero",
"ein besonders weicher Stein"
],
"korrekteAntwort": "ein besonders weicher Stein"
},
{
"frage": "In welcher Religion gibt es Gurus?",
"antworten": [
"im Christentum",
"im Hinduismus",
"im Islam",
"im Judentum"
],
"korrekteAntwort": "im Hinduismus"
},
{
"frage": "Was versteht man unter Brunsbüttel?",
"antworten": [
"eine Industriestadt an der Unterelbe",
"einen Plakatkleber",
"eine 630 Mark-Kraft",
"ein Staatssekretär"
],
"korrekteAntwort": "eine Industriestadt an der Unterelbe"
},
{
"frage": "Welcher im 11. Jahrhundert gegründeter Orden rettet und pfelgt auch noch heute Verletzte und Kranke?",
"antworten": [
"die Dominikaner",
"die Augustiner",
"die Zisterzienser",
"die Johanniter"
],
"korrekteAntwort": "die Johanniter"
}
]
"Quiz": [
{
"frage": "Wie lang ist der Äquator der Erde?",
"korrekteAntwort": "40.000km",
"antworten": [
"20.000m",
"30km",
"60.000km",
"40.000km"
]
},
{
"frage": "Was ist der längste Fluss der Welt?",
"korrekteAntwort": "Nil",
"antworten": [
"Amazonas",
"Nil",
"Rhein",
"Niger"
]
},
{
"frage": "Wie viele Tasten hat ein Klavier?",
"korrekteAntwort": "88",
"antworten": [
"74",
"86",
"82",
"88"
]
},
{
"frage": "Von wem wird der Bundespräsident gewählt?",
"korrekteAntwort": "von der Bundesversammlung",
"antworten": [
"Vom Europäischen Parlament",
"Vom Bundeskanzler",
"Vom Bundestag",
"Von der Bundesversammlung"
]
},
{
"frage": "Welches Land produziert jährlich die meisten Filme?",
"korrekteAntwort": "Indien",
"antworten": [
"USA",
"Indien",
"Japan",
"Nigeria"
]
},
{
"frage": "Wie heißt der am schnellsten schwimmende Fisch auf Erden?",
"korrekteAntwort": "Segelfisch",
"antworten": [
"Flugfisch",
"Tigerhai",
"Segelfisch",
"Windfisch"
]
},
{
"frage": "Was ist KEIN Gewächs?",
"korrekteAntwort": "Incolornis",
"antworten": [
"Geranie",
"Moosfarn",
"Incolornis",
"Strandflieder"
]
},
{
"frage": "Was nutzt eine Fledermaus zur Orientierung in der Luft?",
"korrekteAntwort": "Ultraschall",
"antworten": [
"Infrarot",
"Röntgenstrahlen",
"Speichel",
"Ultraschall"
]
},
{
"frage": "Von wem stammt der berühmte Satz: 'Ich denke, also bin ich'?",
"korrekteAntwort": "René Descartes",
"antworten": [
"John Fitzgerald Kennedy",
"George Walker Bush",
"René Descartes",
"Julius Caesar"
]
},
{
"frage": "Welches Lebensmittel enthält das meiste Wasser?",
"korrekteAntwort": "Gurke",
"antworten": [
"Gurke",
"Wassermelone",
"Zitrone",
"Paprika"
]
},
{
"frage": "Welches Lebensmittel gehört im botanischen Sinne zu den Früchten?",
"korrekteAntwort": "Tomate",
"antworten": [
"Möhre",
"Kartoffel",
"Tomate",
"Weißkohl"
]
},
{
"frage": "Haptische Wahrnehmung beruht auf dem...?",
"korrekteAntwort": "Tastsinn",
"antworten": [
"Greifreflex",
"Gleichgewichtssinn",
"Hörsinn",
"Tastsinn"
]
},
{
"frage": "Wie nennt man den letzten Tanz einer Tanzveranstaltung?",
"korrekteAntwort": "Kehraus",
"antworten": [
"Voraus",
"Garaus",
"Kehraus",
"Durchaus"
]
},
{
"frage": "Wie nennt man ein tiefes, enges Tal, durch das ein Gebirgsbach fließt?",
"korrekteAntwort": "Klamm",
"antworten": [
"Klamm",
"Feucht",
"Nass",
"Schwamm"
]
},
{
"frage": "Wer oder was ist Gerbera?",
"korrekteAntwort": "eine Pflanze",
"antworten": [
"eine europäische Landschaft",
"eine Pflanze",
"die erste Präsidentin von Südafrika",
"eine Stadt in Lichtenstein"
]
},
{
"frage": "Nach wem wurde ein Gesellschaftsanzug benannt?",
"korrekteAntwort": "Gustav Stresemann",
"antworten": [
"Richard von Weizsäcker",
"Gustav Heinemann",
"Jürgen Klinsmann",
"Gustav Stresemann"
]
},
{
"frage": "Was ist Speckstein?",
"korrekteAntwort": "ein besonders weicher Stein",
"antworten": [
"eine Fischart, die sich als Stein tarnt",
"ein Gericht aus dem Mittelalter",
"eine Skulptur im Römischen Reich unter Nero",
"ein besonders weicher Stein"
]
},
{
"frage": "In welcher Religion gibt es Gurus?",
"korrekteAntwort": "im Hinduismus",
"antworten": [
"im Christentum",
"im Hinduismus",
"im Islam",
"im Judentum"
]
},
{
"frage": "Was versteht man unter Brunsbüttel?",
"korrekteAntwort": "eine Industriestadt an der Unterelbe",
"antworten": [
"eine Industriestadt an der Unterelbe",
"einen Plakatkleber",
"eine 630 Mark-Kraft",
"ein Staatssekretär"
]
},
{
"frage": "Welcher im 11. Jahrhundert gegründeter Orden rettet und pfelgt auch noch heute Verletzte und Kranke?",
"korrekteAntwort": "die Johanniter",
"antworten": [
"die Dominikaner",
"die Augustiner",
"die Zisterzienser",
"die Johanniter"
]
}
],
"lastPlayed": 1675768444160
}

44
src/test/java/org/bitbiome/classes/BlackJackTest.java

@ -0,0 +1,44 @@
package org.bitbiome.classes;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class BlackJackTest {
private static BlackJack bj;
@BeforeAll
public static void setUpTest() {
bj = new BlackJack("UnitTest");
}
@Test
public void testGetEntity() {
assertEquals(BlackJack.Entity.PLAYER, bj.getEntity(1));
}
@Test
public void testGetEntityBot() {
assertEquals(BlackJack.Entity.BOT, bj.getEntity(2));
}
@Test
public void testPlayerName() {
assertEquals("UnitTest", bj.getPlayerName(BlackJack.Entity.PLAYER));
}
@Test
public void testBotName() {
assertEquals("BitBiome", bj.getPlayerName(BlackJack.Entity.BOT));
}
@Test
public void testPlayerIsIn() {
assertTrue(bj.isIn(BlackJack.Entity.PLAYER));
}
@Test
public void testBotIsIn() {
assertTrue(bj.isIn(BlackJack.Entity.BOT));
}
}

23
src/test/java/org/bitbiome/classes/ColorsTest.java

@ -0,0 +1,23 @@
package org.bitbiome.classes;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
public class ColorsTest {
@Test
public void testResetCode() {
assertEquals("\u001B[0m", Colors.ANSI_RESET);
}
@Test
public void testBlueCode() {
assertEquals("\u001B[34m", Colors.ANSI_BLUE);
}
@Test
public void testCyanCode() {
assertEquals("\u001B[36m", Colors.ANSI_CYAN);
}
}

2
src/test/java/org/bitbiome/commands/HelpCommandTest.java

@ -3,7 +3,7 @@ package org.bitbiome.commands;
import org.bitbiome.classes.Colors;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class HelpCommandTest {

36
src/test/java/org/bitbiome/commands/QuizCommandTest.java

@ -0,0 +1,36 @@
package org.bitbiome.commands;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class QuizCommandTest {
@Test
public void testStartMessage() {
assertEquals("Du hast das Quiz gestartet! Hinweis: Wähle deine Antwort, indem du die Zahl (1-4) eingibst. Ist deine Lösung richtig, erhälst du 5 Münzen. Viel Erfolg! \n", QuizCommand.starterMessage());
}
@Test
public void testEndMessage() {
assertEquals("Das Quiz ist vorbei!", QuizCommand.endMessage());
}
@Test
public void testLastTimePlayed() {
long lastTimePlayed = System.currentTimeMillis();
assertTrue(QuizCommand.canPlayAgain(lastTimePlayed) < lastTimePlayed);
}
@Test
public void testRandomNumberGenerator() {
int getRandom = QuizCommand.random(3);
assertTrue(getRandom >= 0 && getRandom <= 3);
}
@Test
public void testPrintFunction() {
assertEquals("I am a unit test!", QuizCommand.print("I am a unit test!"));
}
}

38
src/test/java/org/bitbiome/entitiesTest/ItemTest.java

@ -0,0 +1,38 @@
package org.bitbiome.entitiesTest;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assumptions.assumeTrue;
import org.bitbiome.entities.Item;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
public class ItemTest {
private static Item item;
@BeforeAll
public static void setItem() {
item = new Item();
item.setName("Unit");
item.setDamage(12.5F);
item.changeDoesDamage(true);
}
@Test
public void testGetName() {
assertEquals("Unit", item.getName());
}
@Test
public void testGetDamage() {
assertEquals(12.5, item.getDamage());
}
@Test
public void testDoesDamage() {
boolean doesDamage = item.doesDamage();
assumeTrue(item.getDamage() > 0);
assumeTrue(doesDamage);
}
}

24
src/test/java/org/bitbiome/entitiesTest/LocationTest.java

@ -0,0 +1,24 @@
package org.bitbiome.entitiesTest;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.bitbiome.entities.Location;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
public class LocationTest {
private static Location location;
@BeforeAll
public static void setLocation() {
location = new Location();
location.setName("NewUnitWorld");
}
@Test
public void testLocationName() {
assertEquals("NewUnitWorld", location.getName());
}
}

35
src/test/java/org/bitbiome/entitiesTest/MobTest.java

@ -0,0 +1,35 @@
package org.bitbiome.entitiesTest;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.bitbiome.entities.Mob;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
public class MobTest {
private static Mob mob;
@BeforeAll
public static void setMob() {
mob = new Mob();
mob.setFriendly(true);
mob.setDamage(0F);
mob.setHp(561.45F);
}
@Test
public void testFriendly() {
assertEquals(mob.isFriendly(), true);
}
@Test
public void testDamage() {
assertEquals(mob.getDamage(), 0F);
}
@Test
public void testHp() {
assertEquals(mob.getHp(), 561.45F);
}
}

43
src/test/java/org/bitbiome/entitiesTest/PlayerTest.java

@ -0,0 +1,43 @@
package org.bitbiome.entitiesTest;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.bitbiome.entities.Location;
import org.bitbiome.entities.Player;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
public class PlayerTest {
private static Player player;
private static Location location;
@BeforeAll
public static void setPlayer() {
player = new Player();
location = new Location();
location.setName("NewUnitWorld");
player.setName("UnitPlayer");
player.setLocation(location);
player.setHp(100F);
}
@Test
public void testPlayerName() {
assertEquals("UnitPlayer", player.getName());
}
@Test
public void testPlayerHp() {
assertEquals(100F, player.getHp());
}
@Test
public void testLocationNameFromPlayer() {
assertEquals("NewUnitWorld", player.getLocation().getName());
}
}
Loading…
Cancel
Save