Ich hab das Problem, dass ich die Gewinnbedingung nicht fertiggestellt bekomme. Ich denke, dass ich die Methode Linie in der Klasse Gewinnbedingung falsch verwende. Wäre toll, wenn mir wer da helfen kann. Auch die Methode innerhalbDesFeldes gibt noch eine Fehlermeldung bei Ausführung des Programmes aus.
[CODE lang="java" title="Gewinnbedingung"] public boolean GewinnBedingung(){
for(int x = Xpos - 3; x < Xpos + 4; x++){
for(int y = Ypos - 3; y < Ypos + 4; y++){
if(linie(x,y,1,0,1) || //waagerecht
linie(x,y,0,1,1) || //senkrecht
linie(x,y,1,1,1) || //senkrecht runter
linie(x,y,1,-1,1)){ //senkrecht rauf
return true;
}
}
}
return false;
}
[/CODE]
[CODE lang="java" title="Linie"] public boolean linie(int x, int y, int xRichtung, int yRichtung, int spielerNr){
for(int i=0;i<4;i++){
if((innerhalbDesFeldes(x-i,y-i) && spielfeld[xRichtung-i][yRichtung-i] == spielerNr)){
return false;
}
}
return true;
}[/CODE]
[CODE lang="java" title="Restliches Programm"]public class VierGewinnt{
private int breite = 7; //Die X-Achse in der Tabelle
private int hoehe= 6; //Die Y-Achse in der Tabelle
private int[][] spielfeld = new int[hoehe][breite];
private boolean gewonnen; //true, wenn die Methode gewinnbedingung erfuellt ist
private boolean SpielerEins; //Um die Spieler durchzuwechseln
private int[] Spaltenfuelle = new int[7]; //Zeigt die Fuelle der Spalte an
private int aktuelleSpalte =0; // kann überprüfe, wie viele Steine in einem Feld sind
private int Xpos;
private int Ypos;
public VierGewinnt(){
gewonnen=false;
SpielerEins=true;
System.out.print('\u000C');
}
public void AusgabeSpielfeld(){
System.out.println("| 1 | 2 | 3 | 4 | 5 | 6 | 7 |");
System.out.println("|____|____|____|____|____|____|____|");
for(int b=0; b<hoehe;b++){
System.out.println("| | | | | | | |");
for(int a=0; a<breite;a++){
System.out.print("|");
switch(spielfeld[a]){
case 0: System.out.print(" ");break;
case 1: System.out.print("X");break;
case 2: System.out.print("O");break;
}
System.out.print(" ");
}
System.out.print("|");
System.out.println();
System.out.println("|____|____|____|____|____|____|____|");
}
System.out.println();
if(SpielerEins == true){
System.out.println("Spieler 1 ist dran");
}else{
System.out.println("Spieler 2 ist dran");
}
}
public void SpielsteinInSpalteHinzufuegen(){
Scanner scannerVariable = new Scanner(System.in);
int input = scannerVariable.nextInt();
if(input<1 || input>7){
System.out.println();
System.out.println("Falsche Zahl eingegeben. Probieren Sie es erneut");
SpielsteinInSpalteHinzufuegen();
}else{
if(Spaltenfuelle[input -1]>5){
System.out.println("Diese Spalte ist schon vollständig gefuellt");
SpielsteinInSpalteHinzufuegen();
}else{
aktuelleSpalte=input;
Spielzug();
Spaltenfuelle[input-1]=Spaltenfuelle[input-1]+1;
Xpos= input;
Ypos= Spaltenfuelle[input-1];
System.out.println("Xpos= " + Xpos + " Ypos= " + Ypos); //Zum Überprüfen für mich selber
}
}
}
public void Spielzug(){
if(SpielerEins==true){
spielfeld[5-Spaltenfuelle[aktuelleSpalte-1]][aktuelleSpalte-1]=1;
SpielerEins=false;
}else{
spielfeld[5-Spaltenfuelle[aktuelleSpalte-1]][aktuelleSpalte-1]=2;
SpielerEins=true;
}
}
/**
* Gibt zurück, ob sich der Punkt (x|y) innerhalb des Feldes befindet.
*/
public boolean innerhalbDesFeldes(int x, int y){
return x > -1 && x < breite && y > -1 && y < hoehe;
}
public void abspann(){
Scanner scannerVariable = new Scanner(System.in);
if(SpielerEins=true){
System.out.println("Herzlichen Glückwunsch. "+" Spieler 1 hat gewonnen");
System.out.println("Wollen Sie eine weitere Partie beginnen?"+" "+"Drueken Sie 1 für JA und 2 fuer NEIN.");
int temp = scannerVariable.nextInt();
if(temp==1){
Game();
}else{
System.out.println("Danke fuer´s spielen");
}
}else{
System.out.println("Herzlichen Glückwunsch. "+" Spieler 2 hat gewonnen");
System.out.println("Wollen Sie eine weitere Partie beginnen?"+" "+"Drueken Sie 1 für JA und 2 fuer NEIN.");
int temp = scannerVariable.nextInt();
if(temp==1){
Game();
}else{
System.out.println("Danke fuer´s spielen");
}
}
}
public void Game(){
while(!GewinnBedingung()){
AusgabeSpielfeld();
SpielsteinInSpalteHinzufuegen();
System.out.print('\u000C');
}
abspann();
}
}[/CODE]
[CODE lang="java" title="Gewinnbedingung"] public boolean GewinnBedingung(){
for(int x = Xpos - 3; x < Xpos + 4; x++){
for(int y = Ypos - 3; y < Ypos + 4; y++){
if(linie(x,y,1,0,1) || //waagerecht
linie(x,y,0,1,1) || //senkrecht
linie(x,y,1,1,1) || //senkrecht runter
linie(x,y,1,-1,1)){ //senkrecht rauf
return true;
}
}
}
return false;
}
[/CODE]
[CODE lang="java" title="Linie"] public boolean linie(int x, int y, int xRichtung, int yRichtung, int spielerNr){
for(int i=0;i<4;i++){
if((innerhalbDesFeldes(x-i,y-i) && spielfeld[xRichtung-i][yRichtung-i] == spielerNr)){
return false;
}
}
return true;
}[/CODE]
[CODE lang="java" title="Restliches Programm"]public class VierGewinnt{
private int breite = 7; //Die X-Achse in der Tabelle
private int hoehe= 6; //Die Y-Achse in der Tabelle
private int[][] spielfeld = new int[hoehe][breite];
private boolean gewonnen; //true, wenn die Methode gewinnbedingung erfuellt ist
private boolean SpielerEins; //Um die Spieler durchzuwechseln
private int[] Spaltenfuelle = new int[7]; //Zeigt die Fuelle der Spalte an
private int aktuelleSpalte =0; // kann überprüfe, wie viele Steine in einem Feld sind
private int Xpos;
private int Ypos;
public VierGewinnt(){
gewonnen=false;
SpielerEins=true;
System.out.print('\u000C');
}
public void AusgabeSpielfeld(){
System.out.println("| 1 | 2 | 3 | 4 | 5 | 6 | 7 |");
System.out.println("|____|____|____|____|____|____|____|");
for(int b=0; b<hoehe;b++){
System.out.println("| | | | | | | |");
for(int a=0; a<breite;a++){
System.out.print("|");
switch(spielfeld[a]){
case 0: System.out.print(" ");break;
case 1: System.out.print("X");break;
case 2: System.out.print("O");break;
}
System.out.print(" ");
}
System.out.print("|");
System.out.println();
System.out.println("|____|____|____|____|____|____|____|");
}
System.out.println();
if(SpielerEins == true){
System.out.println("Spieler 1 ist dran");
}else{
System.out.println("Spieler 2 ist dran");
}
}
public void SpielsteinInSpalteHinzufuegen(){
Scanner scannerVariable = new Scanner(System.in);
int input = scannerVariable.nextInt();
if(input<1 || input>7){
System.out.println();
System.out.println("Falsche Zahl eingegeben. Probieren Sie es erneut");
SpielsteinInSpalteHinzufuegen();
}else{
if(Spaltenfuelle[input -1]>5){
System.out.println("Diese Spalte ist schon vollständig gefuellt");
SpielsteinInSpalteHinzufuegen();
}else{
aktuelleSpalte=input;
Spielzug();
Spaltenfuelle[input-1]=Spaltenfuelle[input-1]+1;
Xpos= input;
Ypos= Spaltenfuelle[input-1];
System.out.println("Xpos= " + Xpos + " Ypos= " + Ypos); //Zum Überprüfen für mich selber
}
}
}
public void Spielzug(){
if(SpielerEins==true){
spielfeld[5-Spaltenfuelle[aktuelleSpalte-1]][aktuelleSpalte-1]=1;
SpielerEins=false;
}else{
spielfeld[5-Spaltenfuelle[aktuelleSpalte-1]][aktuelleSpalte-1]=2;
SpielerEins=true;
}
}
/**
* Gibt zurück, ob sich der Punkt (x|y) innerhalb des Feldes befindet.
*/
public boolean innerhalbDesFeldes(int x, int y){
return x > -1 && x < breite && y > -1 && y < hoehe;
}
public void abspann(){
Scanner scannerVariable = new Scanner(System.in);
if(SpielerEins=true){
System.out.println("Herzlichen Glückwunsch. "+" Spieler 1 hat gewonnen");
System.out.println("Wollen Sie eine weitere Partie beginnen?"+" "+"Drueken Sie 1 für JA und 2 fuer NEIN.");
int temp = scannerVariable.nextInt();
if(temp==1){
Game();
}else{
System.out.println("Danke fuer´s spielen");
}
}else{
System.out.println("Herzlichen Glückwunsch. "+" Spieler 2 hat gewonnen");
System.out.println("Wollen Sie eine weitere Partie beginnen?"+" "+"Drueken Sie 1 für JA und 2 fuer NEIN.");
int temp = scannerVariable.nextInt();
if(temp==1){
Game();
}else{
System.out.println("Danke fuer´s spielen");
}
}
}
public void Game(){
while(!GewinnBedingung()){
AusgabeSpielfeld();
SpielsteinInSpalteHinzufuegen();
System.out.print('\u000C');
}
abspann();
}
}[/CODE]