Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- @author Jan-Hendrik Schuette 4689803 Gruppe 8b
- @author Sebastian Bleecke 4628550 Gruppe 8b
- **/
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Random;
- import java.util.Scanner;
- class AlienGame {
- private static Battlefield battlefield;
- //should be public as its a constant, but publics are forbidden
- private static final int COUNT_OF_PLAYER_TYPES = 3;
- public static Battlefield getBattlefield() {
- return AlienGame.battlefield;
- }
- private static int getCountOfPlayerTypes() {
- return AlienGame.COUNT_OF_PLAYER_TYPES;
- }
- private static boolean inputCoordinatesIsField(int x, int y) {
- return AlienGame.battlefield.isField(x,y);
- }
- private static boolean inputCoordinatesIsAlien(int x, int y) {
- return AlienGame.inputCoordinatesIsField(x,y)
- && AlienGame.battlefield.getCharacterTypeAtField(x,y) == CharacterTypes.ALIEN;
- }
- private static List<Character> getHitCharacters(HashMap<Integer, Integer> charHealth) {
- Character[] characters = AlienGame.battlefield.getAllCharacters();
- List<Character> hitCharacters = new ArrayList<Character>();
- for (Character character : characters) {
- int previousHp = charHealth.get(character.getId());
- if (previousHp > character.getHp()) {
- hitCharacters.add(character);
- }
- }
- return hitCharacters;
- }
- private static void executeAttack(Character attacker, int x, int y) {
- Character defender = AlienGame.battlefield.getCharacterAtField(x,y);
- if (defender == null) {
- System.out.printf("%s greift (%d,%d) an.\n", attacker.toString(), x, y);
- } else {
- System.out.printf("%s greift %s an.\n", attacker.toString(), defender.toString());
- }
- Character[] characters = AlienGame.battlefield.getAllCharacters();
- HashMap<Integer, Integer> charHealth = new HashMap<Integer, Integer>();
- for (Character character : characters) {
- charHealth.put(character.getId(), character.getHp());
- }
- if (attacker.attack(AlienGame.battlefield, x, y)) {
- List<Character> hitCharacters = AlienGame.getHitCharacters(charHealth);
- // TODO: decide if it should be shown that a position got hit
- // if (defender == null) {
- // System.out.printf("%s hat (%d,%d) getroffen.\n",attacker, x, y);
- // }
- for (Character character : hitCharacters) {
- System.out.printf("%s hat %s getroffen.\n", attacker, character.toString());
- if (character.isDead(AlienGame.battlefield)) {
- System.out.printf("%s hat %s getötet.\n", attacker, character.toString());
- }
- }
- } else {
- if (defender != null) {
- System.out.printf("%s hat %s verfehlt.\n", attacker.toString(), defender.toString());
- }
- // TODO: decide if it should be shown that a position got missed
- //else {
- // System.out.printf("%s hat (%d,%d) verfehlt.\n", attacker.toString(), x, y);
- // }
- }
- }
- private static void playerTurn() {
- Player[] players = AlienGame.battlefield.getAllPlayers();
- for (int i = 0; i < players.length; i++) {
- Player player = players[i];
- if (AlienGame.battlefield.allAliensDead()) {
- break;
- }
- // continue with next if Player is dead
- if (player.isDead(AlienGame.battlefield)) {
- System.out.printf("%s ist tot.\n", player.toString());
- continue;
- }
- System.out.printf("%s hat noch %d HP.\n", player.toString(), player.getHp());
- int inputX = 0;
- int inputY = 0;
- Scanner scanner = new Scanner(System.in);
- boolean j = true;
- while (j) {
- System.out.printf("Wohin soll %s angreifen? (X-Koordinate)\n", player.toString());
- try {
- inputX = scanner.nextInt();
- } catch (Exception e) {
- System.out.println("Bitte eine ganze Zahl eingeben. Bitte neu versuchen.");
- scanner.nextLine();
- continue;
- }
- System.out.printf("Wohin soll %s angreifen? (Y-Koordinate)\n", player.toString());
- try {
- inputY = scanner.nextInt();
- } catch (Exception e) {
- System.out.println("Bitte eine ganze Zahl eingeben. Bitte neu versuchen.");
- scanner.nextLine();
- continue;
- }
- if (inputCoordinatesIsField(inputX, inputY)) {
- if (player.getSubtype() == CharacterTypes.ARTILLERY) {
- j = false;
- } else if (inputCoordinatesIsAlien(inputX, inputY)) {
- j = false;
- } else {
- System.out.printf("Auf dem Feld (%d,%d) ist kein Alien. Bitte erneut versuchen.", inputX, inputY);
- }
- } else {
- System.out.printf("(%d,%d) ist keine Feld auf dem Spielfeld. Bitte erneut versuchen.",inputX,inputY);
- }
- }
- AlienGame.executeAttack(player, inputX, inputY);
- }
- }
- private static void alienTurn() {
- Alien[] aliens = AlienGame.battlefield.getAllAliens();
- for (int i = 0; i < aliens.length; i++) {
- Alien alien = aliens[i];
- if (AlienGame.battlefield.allPlayersDead()) {
- break;
- }
- if (!alien.isDead(AlienGame.battlefield)) {
- Player player = AlienGame.battlefield.getRandomPlayerAlive();
- AlienGame.executeAttack(alien, player.getX(), player.getY());
- }
- }
- }
- private static boolean executeTurn() {
- boolean result = true;
- System.out.println(AlienGame.battlefield.toString());
- playerTurn();
- alienTurn();
- //is game over?
- if (AlienGame.battlefield.allAliensDead()) {
- System.out.println(AlienGame.battlefield.toString());
- System.out.println("Alle Aliens wurden besiegt.");
- result = false;
- } else if (AlienGame.battlefield.allPlayersDead()) {
- System.out.println(AlienGame.battlefield.toString());
- System.out.println("Game Over, kein Spieler mehr lebendig.");
- result = false;
- }
- return result;
- }
- public static Player setRandomPlayerType(int id) {
- Player player;
- Random ran = new Random();
- int playerType = ran.nextInt(COUNT_OF_PLAYER_TYPES);
- switch (playerType) {
- case 0: player = new Artillery(id); break;
- case 1: player = new Sniper(id); break;
- default: player = new Player(id); break;
- }
- return player;
- }
- public static void main(String[] args) {
- if (args.length != 3) {
- System.out.println("Usage: AlienGame <Größe x> <Größe y> <Anzahl Aliens>");
- System.exit(1);
- }
- int x = 0, y = 0, countAliens = 0;
- try {
- x = Integer.parseInt(args[0]);
- y = Integer.parseInt(args[1]);
- countAliens = Integer.parseInt(args[2]);
- } catch (NumberFormatException e) {
- System.out.println("Wenigstens einer der Werte ist keine natürliche Zahl. Bitte erneut versuchen.");
- System.exit(1);
- }
- //abort if not enough space for all characters on the battlefield
- if ((countAliens + 1) > x * y) {
- System.out.println("Nicht genug Platz fuer alle Spielfiguren oder Spielfeld enthaelt nicht mindestens ein Feld");
- System.exit(1);
- }
- AlienGame.battlefield = new Battlefield(x,y,countAliens);
- while (executeTurn()){ }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement