Advertisement
Guest User

Untitled

a guest
Dec 17th, 2017
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.   @author Jan-Hendrik Schuette 4689803 Gruppe 8b
  3.   @author Sebastian Bleecke 4628550 Gruppe 8b
  4.  **/
  5. import java.util.ArrayList;
  6. import java.util.Arrays;
  7. import java.util.HashMap;
  8. import java.util.List;
  9. import java.util.Random;
  10. import java.util.Scanner;
  11.  
  12. class AlienGame {
  13.  
  14.   private static Battlefield battlefield;
  15.  
  16.   //should be public as its a constant, but publics are forbidden
  17.   private static final int COUNT_OF_PLAYER_TYPES = 3;
  18.  
  19.   public static Battlefield getBattlefield() {
  20.     return AlienGame.battlefield;
  21.   }
  22.  
  23.   private static int getCountOfPlayerTypes() {
  24.     return AlienGame.COUNT_OF_PLAYER_TYPES;
  25.   }
  26.  
  27.   private static boolean inputCoordinatesIsField(int x, int y) {
  28.     return AlienGame.battlefield.isField(x,y);
  29.   }
  30.  
  31.   private static boolean inputCoordinatesIsAlien(int x, int y) {
  32.     return AlienGame.inputCoordinatesIsField(x,y)
  33.       && AlienGame.battlefield.getCharacterTypeAtField(x,y) == CharacterTypes.ALIEN;
  34.   }
  35.  
  36.   private static List<Character> getHitCharacters(HashMap<Integer, Integer> charHealth) {
  37.     Character[] characters = AlienGame.battlefield.getAllCharacters();
  38.     List<Character> hitCharacters = new ArrayList<Character>();
  39.     for (Character character : characters) {
  40.       int previousHp = charHealth.get(character.getId());
  41.       if (previousHp > character.getHp()) {
  42.         hitCharacters.add(character);
  43.       }
  44.     }
  45.     return hitCharacters;
  46.   }
  47.  
  48.   private static void executeAttack(Character attacker, int x, int y) {
  49.     Character defender = AlienGame.battlefield.getCharacterAtField(x,y);
  50.  
  51.     if (defender == null) {
  52.       System.out.printf("%s greift (%d,%d) an.\n", attacker.toString(), x, y);
  53.     } else {
  54.       System.out.printf("%s greift %s an.\n", attacker.toString(), defender.toString());
  55.     }
  56.  
  57.     Character[] characters = AlienGame.battlefield.getAllCharacters();
  58.  
  59.     HashMap<Integer, Integer> charHealth = new HashMap<Integer, Integer>();
  60.     for (Character character : characters) {
  61.       charHealth.put(character.getId(), character.getHp());
  62.     }
  63.  
  64.     if (attacker.attack(AlienGame.battlefield, x, y)) {
  65.       List<Character> hitCharacters = AlienGame.getHitCharacters(charHealth);
  66.       // TODO: decide if it should be shown that a position got hit
  67.       // if (defender == null) {
  68.       //   System.out.printf("%s hat (%d,%d) getroffen.\n",attacker, x, y);
  69.       // }
  70.       for (Character character : hitCharacters) {
  71.         System.out.printf("%s hat %s getroffen.\n", attacker, character.toString());
  72.         if (character.isDead(AlienGame.battlefield)) {
  73.         System.out.printf("%s hat %s getötet.\n", attacker, character.toString());
  74.         }
  75.       }
  76.     } else {
  77.       if (defender != null) {
  78.         System.out.printf("%s hat %s verfehlt.\n", attacker.toString(), defender.toString());
  79.       }
  80.       // TODO: decide if it should be shown that a position got missed
  81.       //else {
  82.         // System.out.printf("%s hat (%d,%d) verfehlt.\n", attacker.toString(), x, y);
  83.       // }
  84.     }
  85.   }
  86.  
  87.   private static void playerTurn() {
  88.     Player[] players = AlienGame.battlefield.getAllPlayers();
  89.     for (int i = 0; i < players.length; i++) {
  90.       Player player = players[i];
  91.  
  92.       if (AlienGame.battlefield.allAliensDead()) {
  93.         break;
  94.       }
  95.  
  96.       // continue with next if Player is dead
  97.       if (player.isDead(AlienGame.battlefield)) {
  98.         System.out.printf("%s ist tot.\n", player.toString());
  99.         continue;
  100.       }
  101.  
  102.       System.out.printf("%s hat noch %d HP.\n", player.toString(), player.getHp());
  103.  
  104.       int inputX = 0;
  105.       int inputY = 0;
  106.       Scanner scanner = new Scanner(System.in);
  107.       boolean j = true;
  108.       while (j) {
  109.         System.out.printf("Wohin soll %s angreifen? (X-Koordinate)\n", player.toString());
  110.         try {
  111.           inputX = scanner.nextInt();
  112.         } catch (Exception e) {
  113.           System.out.println("Bitte eine ganze Zahl eingeben. Bitte neu versuchen.");
  114.           scanner.nextLine();
  115.           continue;
  116.         }
  117.         System.out.printf("Wohin soll %s angreifen? (Y-Koordinate)\n", player.toString());
  118.         try {
  119.           inputY = scanner.nextInt();
  120.         } catch (Exception e) {
  121.           System.out.println("Bitte eine ganze Zahl eingeben. Bitte neu versuchen.");
  122.           scanner.nextLine();
  123.           continue;
  124.         }
  125.  
  126.         if (inputCoordinatesIsField(inputX, inputY)) {
  127.           if (player.getSubtype() == CharacterTypes.ARTILLERY) {
  128.             j = false;
  129.           } else if (inputCoordinatesIsAlien(inputX, inputY)) {
  130.             j = false;
  131.           } else {
  132.             System.out.printf("Auf dem Feld (%d,%d) ist kein Alien. Bitte erneut versuchen.", inputX, inputY);
  133.           }
  134.         } else {
  135.           System.out.printf("(%d,%d) ist keine Feld auf dem Spielfeld. Bitte erneut versuchen.",inputX,inputY);
  136.         }
  137.       }
  138.       AlienGame.executeAttack(player, inputX, inputY);
  139.     }
  140.   }
  141.  
  142.   private static void alienTurn() {
  143.     Alien[] aliens = AlienGame.battlefield.getAllAliens();
  144.     for (int i = 0; i < aliens.length; i++) {
  145.       Alien alien = aliens[i];
  146.  
  147.       if (AlienGame.battlefield.allPlayersDead()) {
  148.         break;
  149.       }
  150.  
  151.       if (!alien.isDead(AlienGame.battlefield)) {
  152.         Player player = AlienGame.battlefield.getRandomPlayerAlive();
  153.         AlienGame.executeAttack(alien, player.getX(), player.getY());
  154.       }
  155.     }
  156.   }
  157.  
  158.   private static boolean executeTurn() {
  159.     boolean result = true;
  160.  
  161.     System.out.println(AlienGame.battlefield.toString());
  162.     playerTurn();
  163.     alienTurn();
  164.  
  165.     //is game over?
  166.     if (AlienGame.battlefield.allAliensDead()) {
  167.       System.out.println(AlienGame.battlefield.toString());
  168.       System.out.println("Alle Aliens wurden besiegt.");
  169.       result = false;
  170.     } else if (AlienGame.battlefield.allPlayersDead()) {
  171.       System.out.println(AlienGame.battlefield.toString());
  172.       System.out.println("Game Over, kein Spieler mehr lebendig.");
  173.       result = false;
  174.     }
  175.  
  176.     return result;
  177.   }
  178.  
  179.   public static Player setRandomPlayerType(int id) {
  180.     Player player;
  181.     Random ran = new Random();
  182.     int playerType = ran.nextInt(COUNT_OF_PLAYER_TYPES);
  183.     switch (playerType) {
  184.       case 0: player = new Artillery(id); break;
  185.       case 1: player = new Sniper(id); break;
  186.       default: player = new Player(id); break;
  187.     }
  188.     return player;
  189.   }
  190.  
  191.   public static void main(String[] args) {
  192.  
  193.     if (args.length != 3) {
  194.       System.out.println("Usage: AlienGame <Größe x> <Größe y> <Anzahl Aliens>");
  195.       System.exit(1);
  196.     }
  197.  
  198.     int x = 0, y = 0, countAliens = 0;
  199.     try {
  200.       x = Integer.parseInt(args[0]);
  201.       y = Integer.parseInt(args[1]);
  202.       countAliens = Integer.parseInt(args[2]);
  203.     } catch (NumberFormatException e) {
  204.       System.out.println("Wenigstens einer der Werte ist keine natürliche Zahl. Bitte erneut versuchen.");
  205.       System.exit(1);
  206.     }
  207.  
  208.     //abort if not enough space for all characters on the battlefield
  209.     if ((countAliens + 1) > x * y) {
  210.       System.out.println("Nicht genug Platz fuer alle Spielfiguren oder Spielfeld enthaelt nicht mindestens ein Feld");
  211.       System.exit(1);
  212.     }
  213.  
  214.     AlienGame.battlefield = new Battlefield(x,y,countAliens);
  215.  
  216.     while (executeTurn()){ }
  217.   }
  218.  
  219. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement