| 1 | package de.aikiit.game.kaiser; | |
| 2 | ||
| 3 | import org.assertj.core.util.VisibleForTesting; | |
| 4 | ||
| 5 | /** | |
| 6 | * This class encapsulates the actual game flow. | |
| 7 | * A player | |
| 8 | * <ul> | |
| 9 | * <li>is shown current statistics and</li> | |
| 10 | * <li>can start to act</li> | |
| 11 | * <li>until the maximum number of rounds is reached and the game ends.</li> | |
| 12 | * </ul> | |
| 13 | */ | |
| 14 | public class KaiserGame { | |
| 15 | ||
| 16 | /** | |
| 17 | * The player can play at most this number of rounds. | |
| 18 | */ | |
| 19 | public static final int MAX_ROUNDS = 10; | |
| 20 | ||
| 21 | private final KaiserEngine engine; | |
| 22 | private final KaiserEnginePrinter printer; | |
| 23 | /** | |
| 24 | * The current round of the game. | |
| 25 | */ | |
| 26 | private int round = 0; | |
| 27 | ||
| 28 | /** | |
| 29 | * Initializes a game with default parameters. | |
| 30 | */ | |
| 31 | public KaiserGame() { | |
| 32 | this(new KaiserEngine()); | |
| 33 | } | |
| 34 | ||
| 35 | /** | |
| 36 | * Allows setting an explicit engine for testing purposes. | |
| 37 | * @param engine initialize with the given engine. | |
| 38 | */ | |
| 39 | @VisibleForTesting | |
| 40 | KaiserGame(KaiserEngine engine) { | |
| 41 | this.engine = engine; | |
| 42 | this.printer = new KaiserEnginePrinter(this.engine); | |
| 43 | } | |
| 44 | ||
| 45 | private void incrementRoundCounter() { | |
| 46 |
1
1. incrementRoundCounter : Replaced integer addition with subtraction → NO_COVERAGE |
round++; |
| 47 | } | |
| 48 | ||
| 49 | /** | |
| 50 | * Start the game and allow player interactions until the maximum number of rounds is reached. | |
| 51 | */ | |
| 52 | public void run() { | |
| 53 |
1
1. run : removed call to de/aikiit/game/kaiser/KaiserGame::intro → SURVIVED |
intro(); |
| 54 |
1
1. run : removed call to de/aikiit/game/kaiser/KaiserGame::status → SURVIVED |
status(); |
| 55 |
2
1. run : negated conditional → NO_COVERAGE 2. run : changed conditional boundary → NO_COVERAGE |
while (round < MAX_ROUNDS) { |
| 56 |
1
1. run : removed call to de/aikiit/game/kaiser/KaiserGame::incrementRoundCounter → NO_COVERAGE |
incrementRoundCounter(); |
| 57 |
1
1. run : removed call to de/aikiit/game/kaiser/KaiserEngine::startNewRound → NO_COVERAGE |
engine.startNewRound(); |
| 58 |
1
1. run : removed call to de/aikiit/game/kaiser/KaiserGame::status → NO_COVERAGE |
status(); |
| 59 |
1
1. run : removed call to de/aikiit/game/kaiser/KaiserGame::actions → NO_COVERAGE |
actions(); |
| 60 |
1
1. run : removed call to de/aikiit/game/kaiser/KaiserEngine::finishRoundAfterActions → NO_COVERAGE |
engine.finishRoundAfterActions(); |
| 61 | } | |
| 62 | ||
| 63 |
1
1. run : removed call to de/aikiit/game/kaiser/KaiserGame::finish → NO_COVERAGE |
finish(); |
| 64 |
1
1. run : removed call to de/aikiit/game/kaiser/KaiserGame::byeByeBanner → NO_COVERAGE |
byeByeBanner(); |
| 65 | } | |
| 66 | ||
| 67 | /** | |
| 68 | * Shows information about the game flow and welcomes the player. | |
| 69 | */ | |
| 70 | public void intro() { | |
| 71 |
1
1. intro : removed call to de/aikiit/game/kaiser/KaiserGame::banner → SURVIVED |
banner(); |
| 72 |
1
1. intro : removed call to java/io/PrintStream::println → SURVIVED |
System.out.println("Versuchen Sie die antike Stadt " + KaiserEnginePrinter.ANSI_YELLOW + ">SUMERIA<" + KaiserEnginePrinter.ANSI_RESET + " zu regieren!"); |
| 73 |
1
1. intro : removed call to java/io/PrintStream::println → SURVIVED |
System.out.println("Ihre Regierungszeit beträgt " + MAX_ROUNDS + " Jahre."); |
| 74 |
1
1. intro : removed call to java/io/PrintStream::println → SURVIVED |
System.out.println("Nach jeweils einem Jahr erhalten Sie einen Bericht über die Entwicklung in der Stadt."); |
| 75 |
1
1. intro : removed call to java/io/PrintStream::println → SURVIVED |
System.out.println("Dann werden wir weitersehen ......."); |
| 76 |
1
1. intro : removed call to java/io/PrintStream::println → SURVIVED |
System.out.println(); |
| 77 | } | |
| 78 | ||
| 79 | /** | |
| 80 | * Shows the game's banner. | |
| 81 | */ | |
| 82 | public void banner() { | |
| 83 | // generated with the help of https://manytools.org/hacker-tools/ascii-banner/ | |
| 84 | // font: banner | |
| 85 |
1
1. banner : removed call to java/io/PrintStream::println → SURVIVED |
System.out.println(KaiserEnginePrinter.ANSI_RED); |
| 86 |
1
1. banner : removed call to java/io/PrintStream::println → SURVIVED |
System.out.println(""" |
| 87 | # # \s | |
| 88 | # # ## # #### ###### ##### \s | |
| 89 | # # # # # # # # #\s | |
| 90 | ### # # # #### ##### # #\s | |
| 91 | # # ###### # # # ##### \s | |
| 92 | # # # # # # # # # # \s | |
| 93 | # # # # # #### ###### # #\s | |
| 94 | \s | |
| 95 | """); | |
| 96 |
1
1. banner : removed call to java/io/PrintStream::println → SURVIVED |
System.out.println(KaiserEnginePrinter.ANSI_RESET); |
| 97 | } | |
| 98 | ||
| 99 | /** | |
| 100 | * Shows console banner after the game is over. | |
| 101 | */ | |
| 102 | public void byeByeBanner() { | |
| 103 | // generated with the help of https://manytools.org/hacker-tools/ascii-banner/ | |
| 104 | // font: banner | |
| 105 |
1
1. byeByeBanner : removed call to java/io/PrintStream::println → SURVIVED |
System.out.println(KaiserEnginePrinter.ANSI_RED); |
| 106 |
1
1. byeByeBanner : removed call to java/io/PrintStream::println → SURVIVED |
System.out.println(""" |
| 107 | ###### ###### # # \s | |
| 108 | # # # # ###### # # # # ###### # # ## # #### ###### ##### \s | |
| 109 | # # # # # # # # # # # # # # # # # # #\s | |
| 110 | ###### # ##### ###### # ##### ### # # # #### ##### # #\s | |
| 111 | # # # # # # # # # # ###### # # # ##### \s | |
| 112 | # # # # # # # # # # # # # # # # # # \s | |
| 113 | ###### # ###### ###### # ###### # # # # # #### ###### # #\s | |
| 114 | \n | |
| 115 | """); | |
| 116 |
1
1. byeByeBanner : removed call to java/io/PrintStream::println → SURVIVED |
System.out.println(KaiserEnginePrinter.ANSI_RESET); |
| 117 | } | |
| 118 | ||
| 119 | /** | |
| 120 | * Shows the underlying status of the current round the player is in. | |
| 121 | */ | |
| 122 | public void status() { | |
| 123 |
1
1. status : removed call to java/io/PrintStream::println → SURVIVED |
System.out.println(printer.getStatus(round)); |
| 124 |
1
1. status : removed call to java/io/PrintStream::println → SURVIVED |
System.out.println(printer.getYearResult(round)); |
| 125 | } | |
| 126 | ||
| 127 | /** | |
| 128 | * Performs user interactions. | |
| 129 | * The player can either | |
| 130 | * <ul> | |
| 131 | * <li>buy or sell land</li> | |
| 132 | * <li>feed the population</li> | |
| 133 | * <li>perform agricultural operations per round.</li> | |
| 134 | * </ul> | |
| 135 | */ | |
| 136 | public void actions() { | |
| 137 |
1
1. actions : removed call to java/io/PrintStream::println → SURVIVED |
System.out.println(); |
| 138 |
1
1. actions : removed call to java/io/PrintStream::println → SURVIVED |
System.out.println(KaiserEnginePrinter.ANSI_PURPLE + "#+#+#+#+ Was möchten Sie tun?" + KaiserEnginePrinter.ANSI_RESET); |
| 139 | ||
| 140 | // only buy or sell is allowed | |
| 141 |
1
1. actions : negated conditional → NO_COVERAGE |
if (!KaiserActions.buy(this.engine)) { |
| 142 |
1
1. actions : removed call to de/aikiit/game/kaiser/KaiserActions::sell → NO_COVERAGE |
KaiserActions.sell(this.engine); |
| 143 | } | |
| 144 | ||
| 145 |
1
1. actions : removed call to de/aikiit/game/kaiser/KaiserActions::feed → NO_COVERAGE |
KaiserActions.feed(this.engine); |
| 146 |
1
1. actions : removed call to de/aikiit/game/kaiser/KaiserActions::cultivate → NO_COVERAGE |
KaiserActions.cultivate(this.engine); |
| 147 | ||
| 148 |
1
1. actions : removed call to java/io/PrintStream::println → NO_COVERAGE |
System.out.println(); |
| 149 | } | |
| 150 | ||
| 151 | /** | |
| 152 | * Shows results after the game is over. | |
| 153 | */ | |
| 154 | public void finish() { | |
| 155 |
1
1. finish : removed call to java/io/PrintStream::println → SURVIVED |
System.out.println(printer.getResults()); |
| 156 |
1
1. finish : removed call to java/io/PrintStream::println → SURVIVED |
System.out.println(printer.evaluateRegency()); |
| 157 | } | |
| 158 | } | |
Mutations | ||
| 46 |
1.1 |
|
| 53 |
1.1 |
|
| 54 |
1.1 |
|
| 55 |
1.1 2.2 |
|
| 56 |
1.1 |
|
| 57 |
1.1 |
|
| 58 |
1.1 |
|
| 59 |
1.1 |
|
| 60 |
1.1 |
|
| 63 |
1.1 |
|
| 64 |
1.1 |
|
| 71 |
1.1 |
|
| 72 |
1.1 |
|
| 73 |
1.1 |
|
| 74 |
1.1 |
|
| 75 |
1.1 |
|
| 76 |
1.1 |
|
| 85 |
1.1 |
|
| 86 |
1.1 |
|
| 96 |
1.1 |
|
| 105 |
1.1 |
|
| 106 |
1.1 |
|
| 116 |
1.1 |
|
| 123 |
1.1 |
|
| 124 |
1.1 |
|
| 137 |
1.1 |
|
| 138 |
1.1 |
|
| 141 |
1.1 |
|
| 142 |
1.1 |
|
| 145 |
1.1 |
|
| 146 |
1.1 |
|
| 148 |
1.1 |
|
| 155 |
1.1 |
|
| 156 |
1.1 |