Hilfe bei spiel

Status
Nicht offen für weitere Antworten.
F

Fataly

Gast
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);
}
}
 
F

Fataly

Gast
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

Top Contributor
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

Top Contributor
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

Top Contributor
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:
 
V

Vayu

Gast
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.
 
F

Fataly

Gast
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

Top Contributor
[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.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben