# Hilfe bei spiel



## Fataly (8. Feb 2009)

Hallo ich beötige hilfe bei diesem spiel ich möchte gleich von vornerrein sagen das dieser code nicht von mri selbst geschrieben ist.
nun zu meiner frage ich möchte gerne diesem spiel eine grafische oberfläche verleihen nur hab ich keine ahnung wie das funktioniert bisher läuft es nur in der konsole. 
Über Hilfe wäre ich sehr dankbar









package src
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_[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[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);
	}
}_


----------



## Marco13 (8. Feb 2009)

Was soll man da mehr antworten als http://java.sun.com/docs/books/tutorial/uiswing/ !?


----------



## Mostly_Harmless (9. Feb 2009)

Vielleicht noch www.tty1.net/smart-questions_de.html.


----------



## Landei (9. Feb 2009)

Und mit "[code] Tags benutzen!!!"


----------



## Fataly (9. Feb 2009)

sry aber ich hätte mir von euch eine bessere antwort erhofft anstatt mir irgendeine seite zu schiqqen hättet ihr mir es auch erklären können oder zumindest mal den anfang.
naja foren waren früher auch mal besser 
mfg marco


----------



## ARadauer (10. Feb 2009)

gui programmierung hat eine gewisse komplexität als man es dir einfach schnell in einem post erklären kann. also les dich ins thema ein und frag konkrete fragen, dann wird dir auch geholfen...

was hast du dir als antwort erwartet? die lösung? lustig...


----------



## Saxony (10. Feb 2009)

Hiho,

ich wüsste auch gern einmal schnell die Lösung zu:



			
				Hilbert 8. Problem hat gesagt.:
			
		

> Besitzen alle nichttrivialen Nullstellen der riemannschen Zetafunktion den Realteil ½? Ist jede gerade Zahl größer als 2 als Summe zweier Primzahlen darstellbar?



Aber am Ende läuft eh alles auf die Lösung 42 hinaus. 

bye Saxony


----------



## 0x7F800000 (10. Feb 2009)

Saxony hat gesagt.:
			
		

> ich wüsste auch gern einmal schnell die Lösung zu:
> [...]_Riemann'sche Vermutung_[...]


na, übertreiben kann man's^^
wenn mir jemand dazu die Lösung verraten würde, wäre ich bereit für die nächsten zwanzig Jahre nur noch dämliche GUI's zu basteln. Und zwar mit assembler^^ :autsch:


----------



## Developer_X (10. Feb 2009)

-----------------------------


----------



## Vayu (12. Feb 2009)

ist doch klar was er möchte, ohne überhaupt was getan zu haben eine Leistung bekommen.

Er kopiert fremden Code hier rein und möchte, dass andere den für ihn umstellen ... lustig.


----------



## Fataly (12. Feb 2009)

nein das war nicht meine absicht da ich es lernen möchte wie sowas geht aber anstatt ihr mir iwelche englische seiten postet die ich allerdings auch bei google hätte finden können hättet ihr mir tipps usw. geben können aber naja schon recht


----------



## Quaxli (13. Feb 2009)

[schild=1]Heul doch[/schild] 

Das ist ganz einfach hier im Forum: 

Frage zu einem konkreten Problem, in der ersichtlich wird, daß man schon selber was gemacht hat = professionielle Hilfe
Pauschale Fragen (auch noch zu fremden Code), die nahelegen, daß man noch nicht mal selbst was ausprobiert hat = das was hier abgegangen ist

Die meisten hier im Forum sind Leute, die gerne helfen. Die Meisten davon aber nur, wenn sie merken, daß jemand ein konkretes Problem hat und dieses auch beschreibt (Code mit Code-Tags zu posten, geht auch in die Richtung). Wenn man den Eindruck hat, daß sich jemand nur den Allerwertesten nachtragen lassen will, haben die meisten nicht wirklich Lust, Dir zu helfen.

Sie dazu auch Die 5 1/2 Phasen von Marco13
<edit>
Der Link sollte heißen "Die 5 1/2 Phasen beim Erschleichen von Lösungen für Aufgaben" - soll nicht unterstellen, daß Marco13 irgendwie 5 1/2 Phasen hat 
</edit>

Wenn Du nun denkst, daß wir Dir unrecht tun, ist es an Dir uns das Gegenteil zu beweisen. Poste ein konkretes Problem und beschreibe es ausführlich. Zusammen mit Code, der von Dir ist und zeigt, daß Dich zumindest schon mal an der Lösung versucht hast.
Die Grundlagen, die dazu notwendig sind, findest Du hier im Forum oder im Internet. Offensichtlich weißt Du ja, wie man Google benutzt.


----------



## Quaxli (13. Feb 2009)

Bevor ich nochmal editiere: Sieht nach Phase 5 aus....


----------

