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.
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
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
- public class A07_Vier_gewinnt {
- static String SPIELER; // der aktuelle Spielername -> f�r die Gewinner Ausgabe
- /**
- * @param args -> unbenutzt
- */
- public static void main(String[] args) {
- int columns, rows, zaehler = 0, eingabe;
- String player1, player2;
- char zeichen;
- char[][] spielfeld;
- //Abfragen des Spielernamens
- player1 = eingabeString("Name von SpielerIn A\t\t\t: ");
- do {
- player2 = eingabeString("Name von SpielerIn B\t\t\t: ");
- } while(player1.equals(player2)); //Frage erneut, wenn die Spielernamen gleich sind
- //Abfragen der Ma�e
- do {
- columns = eingabeInt("Breite des Spielfeldes (mindestens 4)\t: ");
- } while (columns < 4); //Frage erneut, wenn die Breite zu klein gew�hlt wurde
- do {
- rows = eingabeInt("Hoehe des Spielfeldes (mindestens 4)\t: ");
- } while (rows < 4); //Frage erneut, wenn die H�he zu klein gew�hlt wurde
- spielfeld = new char[rows][columns];
- while (zaehler < columns*rows) {
- zeichen = (zaehler % 2 == 0) ? 'o' : '+';
- SPIELER = (zaehler % 2 == 0) ? player1 : player2;
- showSpielfeld(spielfeld);
- eingabe = eingabeInt("\n" + SPIELER + "(" + zeichen
- + ") ist am Zug. Bitte gib die Spalte ein: ");
- if (eingabe > columns || eingabe < 1)
- System.err.println("Feld existriert nicht.. Bitte versuch es nochmal!");
- else {
- zaehler++; // naechster Bitte
- setzeFeld(spielfeld, eingabe, zeichen);
- }
- }
- showSpielfeld(spielfeld);
- System.err.println("Unentschieden!");
- }
- /**
- * @param text -> Bildschirmausgabe
- * @return -> Tastatureingabe
- */
- static int eingabeInt(String text) {
- System.out.print(text);
- java.util.Scanner input = new java.util.Scanner(System.in);
- return input.nextInt();
- }
- /**
- * @param text -> Bildschirmausgabe
- * @return -> Tastatureingabe
- */
- static String eingabeString(String text) {
- System.out.print(text);
- java.util.Scanner input = new java.util.Scanner(System.in);
- return input.next();
- }
- /**
- * Spalte wird �bergeben und das Feld wird gesetzt
- * @param spielfeld -> Das Spielfeld mit allen ben�tigten Daten
- * @param column -> eingegebene Spalte
- * @param zeichen -> jeder Spieler hat ein Zeichen (*) oder (+)
- */
- static void setzeFeld(char[][] spielfeld, int column, char zeichen) {
- column--; // Weil der gemeine Mensch denkt, der Zahlenbereich w�rde sich von 1 bis 4 erstrecken
- int pos2check;
- if (spielfeld[0][column] != '\0')
- System.err.println("Die Reihe ist voll.. Pech!");
- else
- for (int i = 0; i < spielfeld.length; i++) { //Iteriere durch die Zeilen
- if (i + 1 == spielfeld.length) {
- // Nach der letzten Zeile kommt nichts mehr..
- // also darf in das aktuelle K�stchen geschrieben werden, obwohl im
- // n�chsten nichts steht
- pos2check = i;
- if (spielfeld[pos2check][column] == '\0') {
- spielfeld[i][column] = zeichen;
- if(IsGameOver(spielfeld, i, column, zeichen)) {// Hat jmd gewonnen?
- System.out.println("Spieler mit "+zeichen+"hat gewonnen");
- System.exit(0);
- }
- break;
- }
- } else {
- //�berpr�fe immer das folgende Feld
- pos2check = i+1;
- if (spielfeld[pos2check][column] != '\0') {
- spielfeld[i][column] = zeichen;
- if(IsGameOver(spielfeld, i, column, zeichen)) {// Hat jmd gewonnen?
- System.out.println("Spieler mit "+zeichen+"hat gewonnen");
- System.exit(0);
- }
- break;
- }
- }
- }
- }
- /**
- * Sammelstelle f�r die Funktionen, die �berpr�fen ob jmd. gewonnen hat
- * @param spielfeld -> Das Spielfeld mit allen ben�tigten Daten
- * @param column -> die Spalte an der das Zeichen gesetzt wurde
- * @param row -> die Reihe an der das Zeichen gesetzt wurde
- * @param zeichen -> das Zeichen
- */
- static boolean IsGameOver(char[][] spielfeld, int column, int row, char zeichen) {
- boolean b1 = GameIsOver_row(spielfeld, column, row, zeichen);
- boolean b2 = GameIsOver_column(spielfeld, column, row, zeichen);
- boolean b3 = GameIsOver_straight1(spielfeld, column, row, zeichen);
- boolean b4 = GameIsOver_straight2(spielfeld, column, row, zeichen);
- return (b1||b2||b3||b4);
- }
- static boolean GameIsOver_row(char[][] spielfeld, int column, int row, char zeichen) {
- // nach links
- int go = row - 1; // mit dem Punkt links neber dem gesetzten beginne
- // ich
- int i = 1; // der gesetzte Punkt = 1 Treffer
- while (go >= 0) {
- if (spielfeld[column][go] != zeichen)
- break;
- go--;
- i++;
- }
- // nach rechts
- go = row + 1;
- while (go < spielfeld.length) {
- if (spielfeld[column][go] != zeichen)
- break;
- go++;
- i++;
- }
- return (i > 3);
- }
- static boolean GameIsOver_column(char[][] spielfeld, int column, int row, char zeichen) {
- // nach oben
- int go = column - 1;
- int i = 1;
- while (go >= 0) {
- if (spielfeld[go][row] != zeichen)
- break;
- go--;
- i++;
- }
- // nach unten
- go = column + 1;
- while (go < spielfeld.length) {
- if (spielfeld[go][row] != zeichen)
- break;
- go++;
- i++;
- }
- return (i > 3);
- }
- static boolean GameIsOver_straight1(char[][] spielfeld, int column, int row, char zeichen) {
- // nach links oben
- int go = row - 1;
- int go2 = column - 1;
- int i = 1;
- while (go >= 0 && go2 >= 0) {
- if (spielfeld[go2][go] != zeichen)
- break;
- go--;
- go2--;
- i++;
- }
- // nach rechts unten
- go = row + 1;
- go2 = column + 1;
- while (go < spielfeld[0].length && go2 < spielfeld.length) {
- if (spielfeld[go2][go] != zeichen)
- break;
- go++;
- go2++;
- i++;
- }
- return (i > 3);
- }
- static boolean GameIsOver_straight2(char[][] spielfeld, int column, int row, char zeichen) {
- // nach links unten
- int go = row - 1;
- int go2 = column + 1;
- int i = 1;
- while (go >= 0 && go2 < spielfeld.length) {
- if (spielfeld[go2][go] != zeichen)
- break;
- go--;
- go2++;
- i++;
- }
- // nach rechts oben
- go = row + 1;
- go2 = column - 1;
- while (go < spielfeld[0].length && go2 >= 0) {
- if (spielfeld[go2][go] != zeichen)
- break;
- go++;
- go2--;
- i++;
- }
- return (i > 3);
- }
- /**
- * Bricht das Programm ab und liefert den Gewinner
- * @param spielfeld -> Das Spielfeld mit allen ben�tigten Daten
- */
- static void spielFertig(char[][] spielfeld) {
- showSpielfeld(spielfeld);
- System.out.println(SPIELER + " hat gewonnen\n");
- System.exit(1);
- }
- /**
- * Zeigt das komplette Spielfeld auf dem Bildschirm
- * @param spielfeld -> Das Spielfeld mit allen ben�tigten Daten
- */
- static void showSpielfeld(char[][] spielfeld) {
- StringBuffer Geruest = new StringBuffer();
- StringBuffer row_start = new StringBuffer(" "); // erste Zeile 1 2 3 4
- StringBuffer row_divide = new StringBuffer("|"); // Trennzeile |-----|
- StringBuffer row_end = new StringBuffer("-"); // letzte Zeile -------
- if (spielfeld[0].length > 9) {
- for (int i = 1; i <= spielfeld[0].length; i++)
- row_start.append((i/10==0) ? " " : i/10).append(" ");
- row_start.append("\n ");
- }
- for (int i = 1; i <= spielfeld[0].length; i++) {
- row_start.append(i%10).append(" ");
- row_divide.append((i==spielfeld[0].length)? "-|" : "--");
- row_end.append("--");
- }
- System.out.println(row_start);
- System.out.println(row_divide);
- for (char[] arrZeile : spielfeld) { //iteriere durch alle Zeilen
- for (char arrSpalte : arrZeile) { //iteriere durch alle Spalten
- Geruest.append("|");
- Geruest.append((arrSpalte == '\0') ? ' ' : arrSpalte);
- }
- Geruest.append("|\n");
- }
- Geruest.append(row_end).append("\n");
- System.out.println(Geruest);
- }
- }
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