Vier gewinnt

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Hallo zusammen,

    ich habe in unserem Infounterricht die Aufgabe ein 4 gewinnt Spiel in java zu programmieren.
    Habe es auch geschafft ein Programm zu schreiben, welches beim j-Creator unten ausgefürt wird.
    Allerdings habe ich jetzt den Anreitz ales im Browser ausführen zu können.

    Quellcode

    1. public class A07_Vier_gewinnt {
    2. static String SPIELER; // der aktuelle Spielername -> f�r die Gewinner Ausgabe
    3. /**
    4. * @param args -> unbenutzt
    5. */
    6. public static void main(String[] args) {
    7. int columns, rows, zaehler = 0, eingabe;
    8. String player1, player2;
    9. char zeichen;
    10. char[][] spielfeld;
    11. //Abfragen des Spielernamens
    12. player1 = eingabeString("Name von SpielerIn A\t\t\t: ");
    13. do {
    14. player2 = eingabeString("Name von SpielerIn B\t\t\t: ");
    15. } while(player1.equals(player2)); //Frage erneut, wenn die Spielernamen gleich sind
    16. //Abfragen der Ma�e
    17. do {
    18. columns = eingabeInt("Breite des Spielfeldes (mindestens 4)\t: ");
    19. } while (columns < 4); //Frage erneut, wenn die Breite zu klein gew�hlt wurde
    20. do {
    21. rows = eingabeInt("Hoehe des Spielfeldes (mindestens 4)\t: ");
    22. } while (rows < 4); //Frage erneut, wenn die H�he zu klein gew�hlt wurde
    23. spielfeld = new char[rows][columns];
    24. while (zaehler < columns*rows) {
    25. zeichen = (zaehler % 2 == 0) ? 'o' : '+';
    26. SPIELER = (zaehler % 2 == 0) ? player1 : player2;
    27. showSpielfeld(spielfeld);
    28. eingabe = eingabeInt("\n" + SPIELER + "(" + zeichen
    29. + ") ist am Zug. Bitte gib die Spalte ein: ");
    30. if (eingabe > columns || eingabe < 1)
    31. System.err.println("Feld existriert nicht.. Bitte versuch es nochmal!");
    32. else {
    33. zaehler++; // naechster Bitte
    34. setzeFeld(spielfeld, eingabe, zeichen);
    35. }
    36. }
    37. showSpielfeld(spielfeld);
    38. System.err.println("Unentschieden!");
    39. }
    40. /**
    41. * @param text -> Bildschirmausgabe
    42. * @return -> Tastatureingabe
    43. */
    44. static int eingabeInt(String text) {
    45. System.out.print(text);
    46. java.util.Scanner input = new java.util.Scanner(System.in);
    47. return input.nextInt();
    48. }
    49. /**
    50. * @param text -> Bildschirmausgabe
    51. * @return -> Tastatureingabe
    52. */
    53. static String eingabeString(String text) {
    54. System.out.print(text);
    55. java.util.Scanner input = new java.util.Scanner(System.in);
    56. return input.next();
    57. }
    58. /**
    59. * Spalte wird �bergeben und das Feld wird gesetzt
    60. * @param spielfeld -> Das Spielfeld mit allen ben�tigten Daten
    61. * @param column -> eingegebene Spalte
    62. * @param zeichen -> jeder Spieler hat ein Zeichen (*) oder (+)
    63. */
    64. static void setzeFeld(char[][] spielfeld, int column, char zeichen) {
    65. column--; // Weil der gemeine Mensch denkt, der Zahlenbereich w�rde sich von 1 bis 4 erstrecken
    66. int pos2check;
    67. if (spielfeld[0][column] != '\0')
    68. System.err.println("Die Reihe ist voll.. Pech!");
    69. else
    70. for (int i = 0; i < spielfeld.length; i++) { //Iteriere durch die Zeilen
    71. if (i + 1 == spielfeld.length) {
    72. // Nach der letzten Zeile kommt nichts mehr..
    73. // also darf in das aktuelle K�stchen geschrieben werden, obwohl im
    74. // n�chsten nichts steht
    75. pos2check = i;
    76. if (spielfeld[pos2check][column] == '\0') {
    77. spielfeld[i][column] = zeichen;
    78. if(IsGameOver(spielfeld, i, column, zeichen)) {// Hat jmd gewonnen?
    79. System.out.println("Spieler mit "+zeichen+"hat gewonnen");
    80. System.exit(0);
    81. }
    82. break;
    83. }
    84. } else {
    85. //�berpr�fe immer das folgende Feld
    86. pos2check = i+1;
    87. if (spielfeld[pos2check][column] != '\0') {
    88. spielfeld[i][column] = zeichen;
    89. if(IsGameOver(spielfeld, i, column, zeichen)) {// Hat jmd gewonnen?
    90. System.out.println("Spieler mit "+zeichen+"hat gewonnen");
    91. System.exit(0);
    92. }
    93. break;
    94. }
    95. }
    96. }
    97. }
    98. /**
    99. * Sammelstelle f�r die Funktionen, die �berpr�fen ob jmd. gewonnen hat
    100. * @param spielfeld -> Das Spielfeld mit allen ben�tigten Daten
    101. * @param column -> die Spalte an der das Zeichen gesetzt wurde
    102. * @param row -> die Reihe an der das Zeichen gesetzt wurde
    103. * @param zeichen -> das Zeichen
    104. */
    105. static boolean IsGameOver(char[][] spielfeld, int column, int row, char zeichen) {
    106. boolean b1 = GameIsOver_row(spielfeld, column, row, zeichen);
    107. boolean b2 = GameIsOver_column(spielfeld, column, row, zeichen);
    108. boolean b3 = GameIsOver_straight1(spielfeld, column, row, zeichen);
    109. boolean b4 = GameIsOver_straight2(spielfeld, column, row, zeichen);
    110. return (b1||b2||b3||b4);
    111. }
    112. static boolean GameIsOver_row(char[][] spielfeld, int column, int row, char zeichen) {
    113. // nach links
    114. int go = row - 1; // mit dem Punkt links neber dem gesetzten beginne
    115. // ich
    116. int i = 1; // der gesetzte Punkt = 1 Treffer
    117. while (go >= 0) {
    118. if (spielfeld[column][go] != zeichen)
    119. break;
    120. go--;
    121. i++;
    122. }
    123. // nach rechts
    124. go = row + 1;
    125. while (go < spielfeld.length) {
    126. if (spielfeld[column][go] != zeichen)
    127. break;
    128. go++;
    129. i++;
    130. }
    131. return (i > 3);
    132. }
    133. static boolean GameIsOver_column(char[][] spielfeld, int column, int row, char zeichen) {
    134. // nach oben
    135. int go = column - 1;
    136. int i = 1;
    137. while (go >= 0) {
    138. if (spielfeld[go][row] != zeichen)
    139. break;
    140. go--;
    141. i++;
    142. }
    143. // nach unten
    144. go = column + 1;
    145. while (go < spielfeld.length) {
    146. if (spielfeld[go][row] != zeichen)
    147. break;
    148. go++;
    149. i++;
    150. }
    151. return (i > 3);
    152. }
    153. static boolean GameIsOver_straight1(char[][] spielfeld, int column, int row, char zeichen) {
    154. // nach links oben
    155. int go = row - 1;
    156. int go2 = column - 1;
    157. int i = 1;
    158. while (go >= 0 && go2 >= 0) {
    159. if (spielfeld[go2][go] != zeichen)
    160. break;
    161. go--;
    162. go2--;
    163. i++;
    164. }
    165. // nach rechts unten
    166. go = row + 1;
    167. go2 = column + 1;
    168. while (go < spielfeld[0].length && go2 < spielfeld.length) {
    169. if (spielfeld[go2][go] != zeichen)
    170. break;
    171. go++;
    172. go2++;
    173. i++;
    174. }
    175. return (i > 3);
    176. }
    177. static boolean GameIsOver_straight2(char[][] spielfeld, int column, int row, char zeichen) {
    178. // nach links unten
    179. int go = row - 1;
    180. int go2 = column + 1;
    181. int i = 1;
    182. while (go >= 0 && go2 < spielfeld.length) {
    183. if (spielfeld[go2][go] != zeichen)
    184. break;
    185. go--;
    186. go2++;
    187. i++;
    188. }
    189. // nach rechts oben
    190. go = row + 1;
    191. go2 = column - 1;
    192. while (go < spielfeld[0].length && go2 >= 0) {
    193. if (spielfeld[go2][go] != zeichen)
    194. break;
    195. go++;
    196. go2--;
    197. i++;
    198. }
    199. return (i > 3);
    200. }
    201. /**
    202. * Bricht das Programm ab und liefert den Gewinner
    203. * @param spielfeld -> Das Spielfeld mit allen ben�tigten Daten
    204. */
    205. static void spielFertig(char[][] spielfeld) {
    206. showSpielfeld(spielfeld);
    207. System.out.println(SPIELER + " hat gewonnen\n");
    208. System.exit(1);
    209. }
    210. /**
    211. * Zeigt das komplette Spielfeld auf dem Bildschirm
    212. * @param spielfeld -> Das Spielfeld mit allen ben�tigten Daten
    213. */
    214. static void showSpielfeld(char[][] spielfeld) {
    215. StringBuffer Geruest = new StringBuffer();
    216. StringBuffer row_start = new StringBuffer(" "); // erste Zeile 1 2 3 4
    217. StringBuffer row_divide = new StringBuffer("|"); // Trennzeile |-----|
    218. StringBuffer row_end = new StringBuffer("-"); // letzte Zeile -------
    219. if (spielfeld[0].length > 9) {
    220. for (int i = 1; i <= spielfeld[0].length; i++)
    221. row_start.append((i/10==0) ? " " : i/10).append(" ");
    222. row_start.append("\n ");
    223. }
    224. for (int i = 1; i <= spielfeld[0].length; i++) {
    225. row_start.append(i%10).append(" ");
    226. row_divide.append((i==spielfeld[0].length)? "-|" : "--");
    227. row_end.append("--");
    228. }
    229. System.out.println(row_start);
    230. System.out.println(row_divide);
    231. for (char[] arrZeile : spielfeld) { //iteriere durch alle Zeilen
    232. for (char arrSpalte : arrZeile) { //iteriere durch alle Spalten
    233. Geruest.append("|");
    234. Geruest.append((arrSpalte == '\0') ? ' ' : arrSpalte);
    235. }
    236. Geruest.append("|\n");
    237. }
    238. Geruest.append(row_end).append("\n");
    239. System.out.println(Geruest);
    240. }
    241. }
    Alles anzeigen


    Hoffe das funktioniert ohne Probleme ^^

    Hoffe ihr könnt mir dabei helfen. Meine Überlegung war das ganze mit Applet zu verwirklichen.

    Danke schonmal im Voraus.

    MfG andrethiemann
  • Naja es geht nicht so sehr ohne Probleme das wir dir das hier binnen 5 Minuten machen können.
    Da musst du dich schon in die Applet-Thematik einarbeiten.

    So'ne Frage nebenbei: Warum sind alle Operationen bzw. Methoden bei dir static?
    [klugscheiss]
    Alles in die Mainmethode zu schreiben & alles als static zu deklarieren verfolgt nicht den OOP-Gedanken.
    [/klugscheiss]

    Bis denn :)