Advertisement
Guest User

Untitled

a guest
Dec 3rd, 2015
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.16 KB | None | 0 0
  1. import java.util.Scanner;
  2. import java.util.InputMismatchException;
  3.  
  4. /**
  5. * Schiffe Versenken für zwei Spieler
  6. *
  7. * @author Timo Suikat 4707963 Gruppe 9a
  8. * @author Lars Thörner 4710277 Gruppe 9a
  9. */
  10. public class Battleship {
  11.  
  12. /**
  13. * Erstes Spielbrett, hier sind eigene Schiffe und gegnerische Schüsse eingetragen
  14. *
  15. * Bedeutung der Symbole:
  16. * . | Wasser
  17. * # | Eigenes Schiff
  18. * X | Gegnerischer Treffer
  19. * O | Schuss ins Wasser
  20. *
  21. * Folgende Schiffe müssen platziert werden:
  22. * 1 Schlachtschiff (Länge 5)
  23. * 2 Kreuzer (Länge 4)
  24. * 3 Zerstörer (Länge 3)
  25. * 4 U-Boote (Länge 2)
  26. */
  27. private static char[][] ships = {
  28. {'.', '#', '#', '#', '#', '.', '.', '.', '.', '.'},
  29. {'.', '.', '.', '.', '.', '#', '#', '#', '#', '.'},
  30. {'.', '.', '.', '#', '.', '.', '.', '.', '#', '.'},
  31. {'.', '.', '.', '#', '.', '.', '.', '.', '#', '.'},
  32. {'#', '.', '.', '#', '.', '.', '.', '.', '#', '.'},
  33. {'#', '.', '.', '.', '.', '.', '.', '.', '#', '#'},
  34. {'.', '.', '#', '#', '#', '#', '.', '.', '.', '#'},
  35. {'.', '.', '.', '.', '.', '.', '#', '.', '.', '#'},
  36. {'.', '.', '.', '.', '.', '.', '#', '.', '.', '.'},
  37. {'.', '#', '#', '.', '.', '.', '.', '#', '#', '.'}
  38. };
  39.  
  40. /**
  41. * Zweites Spielbrett, hier sind eigene Schüsse makiert
  42. *
  43. * Bedeutung der Symbole:
  44. * . | Wasser
  45. * X | Eigener Treffer
  46. * O | Schuss ins Wasser
  47. */
  48. private static char[][] shots = {
  49. {'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'},
  50. {'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'},
  51. {'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'},
  52. {'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'},
  53. {'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'},
  54. {'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'},
  55. {'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'},
  56. {'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'},
  57. {'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'},
  58. {'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'}
  59. };
  60.  
  61. /**
  62. * Speichert, wie viele gegnerische Schiffe getroffen wurden.
  63. */
  64. private static int hitCount = 0;
  65.  
  66. /**
  67. * Speichert, wie viele eigene Schiffe getroffen wurden.
  68. */
  69. private static int enemyHitCount = 0;
  70.  
  71. /**
  72. * Fragt den Spieler so lange welche Aktion er ausführen will, bis das Spiel zuende ist.
  73. * Bei falschen Eingaben wird der Spieler aufgefordert, es nochmal zu versuchen.
  74. *
  75. * @param args Parameter von Kommandozeile (nicht genutzt)
  76. */
  77. public static void main(String[] args) {
  78. Scanner scanner = new Scanner(System.in);
  79.  
  80. while (true) {
  81. //Spieler fragen, was er machen will
  82. System.out.print("\nWählen sie eine Aktion (attack | defend | exit): ");
  83. String action = scanner.nextLine();
  84.  
  85. //Entsprechende Aktion ausführen
  86. if (action.equals("exit")) {
  87. System.out.println("Das Spiel wurde abgebrochen.");
  88. return;
  89. } else if (action.equals("attack")) {
  90. attack();
  91. } else if (action.equals("defend")) {
  92. defend();
  93. } else {
  94. System.out.println("Falsche Eingabe \"" + action + "\"! Nochmal.");
  95. }
  96.  
  97. //Überprüfen, ob das Spiel zuende ist
  98. if (hitCount >= 30) {
  99. System.out.println("Spiel gewonnen!");
  100. return;
  101. }
  102.  
  103. if (enemyHitCount >= 30) {
  104. System.out.println("Spiel verloren :(");
  105. return;
  106. }
  107. }
  108. }
  109.  
  110. /**
  111. * Fragt den Spieler zuerst nach der Zeile und dann der Spalte, die er angreifen möchte.
  112. * Wurde bereits auf das Feld geschossen, wird die Aktion abgebrochen.
  113. *
  114. * Danach muss der Spieler eingeben, ob ein Schiff getroffen wurde.
  115. */
  116. public static void attack() {
  117. Scanner scanner = new Scanner(System.in);
  118.  
  119. //Bisheriges Spielfeld ausgeben
  120. System.out.println("\nBisherige Treffer: ");
  121. print(shots);
  122.  
  123. int row;
  124. int col;
  125.  
  126. try {
  127. //Zeile abfragen
  128. System.out.print("Welche Zeile greifen sie an? (0 - 9): ");
  129. row = scanner.nextInt();
  130.  
  131. //Spalte abfragen
  132. System.out.print("Welche Spalte greifen sie an? (0 - 9): ");
  133. col = scanner.nextInt();
  134. } catch (InputMismatchException e) {
  135. System.out.println("Falsche Eingabe! Aktion abgebrochen.");
  136. return;
  137. }
  138.  
  139. //Feld muss innerhalb des Spielfelds liegen
  140. row = Math.min(Math.max(row, 0), 9);
  141. col = Math.min(Math.max(col, 0), 9);
  142.  
  143. //Abbrechen falls bereits auf das Feld geschossen wurde
  144. if (shots[row][col] != '.') {
  145. System.out.println("Auf Feld " + row + " " + col + " wurde bereits geschossen!");
  146. return;
  147. }
  148.  
  149. //Java-Fehler umgehen: Scanner::nextLine nach Scanner::nextInt gibt sofort lehre Zeile zurück
  150. scanner.nextLine();
  151.  
  152. //Treffer abfragen
  153. System.out.print("Haben sie getroffen? (ja | nein): ");
  154. String hit = scanner.nextLine();
  155.  
  156. //Treffer in Spielfeld eintragen
  157. if (hit.equals("ja")) {
  158. shots[row][col] = 'X';
  159.  
  160. //Anzahl eigener Treffer erhöhen
  161. hitCount++;
  162. } else if (hit.equals("nein")) {
  163. shots[row][col] = 'O';
  164. } else {
  165. System.out.println("Falsche Eingabe \"" + hit + "\"! Aktion abgebrochen.");
  166. return;
  167. }
  168.  
  169. //Neues Spielfeld ausgeben
  170. System.out.println("\nNeue Treffer: ");
  171. print(shots);
  172. }
  173.  
  174. /**
  175. * Fragt den Spieler zuerst nach der Zeile und dann der Spalte ab, in der er angegriffen wird.
  176. * Überprüft anschließend ob ein Schiff getroffen wurde und gibt dies aus.
  177. *
  178. * Der Schuss wird dann in das Spielfeld eingetragen.
  179. */
  180. public static void defend() {
  181. Scanner scanner = new Scanner(System.in);
  182.  
  183. int row;
  184. int col;
  185.  
  186. try {
  187. //Zeile abfragen
  188. System.out.print("Welche Zeile wird angegriffen? (0 - 9): ");
  189. row = scanner.nextInt();
  190.  
  191. //Spalte abfragen
  192. System.out.print("Welche Spalte wird angegriffen? (0 - 9): ");
  193. col = scanner.nextInt();
  194. } catch (InputMismatchException e) {
  195. System.out.println("Falsche Eingabe! Aktion abgebrochen.");
  196. return;
  197. }
  198.  
  199. //Feld muss innerhalb des Spielfelds liegen
  200. row = Math.min(Math.max(row, 0), 9);
  201. col = Math.min(Math.max(col, 0), 9);
  202.  
  203. //Treffer überprüfen
  204. if (ships[row][col] == 'X') {
  205. //Feld wurde bereits getroffen
  206. System.out.println("\nDer wurde bereits getroffen! Abgebrochen.");
  207. return;
  208. } else if (ships[row][col] == '#') {
  209. //Feld ist ein Schiff
  210. ships[row][col] = 'X';
  211. System.out.println("\nGetroffen! :(");
  212.  
  213. //Anzahl gegnerischer Treffer erhöhen
  214. enemyHitCount++;
  215. } else {
  216. //Feld ist Wasser
  217. ships[row][col] = 'O';
  218. System.out.println("\nDer ging daneben!");
  219. }
  220.  
  221. //Neues Spielfeld ausgeben
  222. print(ships);
  223. }
  224.  
  225. /**
  226. * Gibt ein Spielfeld mit Zeilen- und Spaltennummern in der Console aus.
  227. *
  228. * @param grid Auszugebendes Spielfeld
  229. */
  230. public static void print(char[][] grid) {
  231. //Spaltennummern
  232. System.out.println("\\ 0 1 2 3 4 5 6 7 8 9");
  233.  
  234. //Alle Zeilen ausgeben
  235. for (int i = 0; i < grid.length; i++) {
  236. //Zeilennnummer
  237. String row = "" + i;
  238.  
  239. //Alle Spalten in dieser Zeile anfügen
  240. for (int j = 0; j < grid[i].length; j++) {
  241. row += " " + grid[i][j];
  242. }
  243.  
  244. System.out.println(row);
  245. }
  246. }
  247. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement