Java :: Aufgabe #41

2 Lösungen Lösungen öffentlich

4 Gewinnt für die Konsole

Anfänger - Java von Gustl - 05.01.2013 um 16:57 Uhr
Es soll 4 Gewinnt für die Konsole programmiert werden.
2 Spieler spielen gegeneinander, ohne Computergegner (ohne künstliche Intelligenz), spielen können.

Optional mit Computergegner, aber bitte in der Beschreibung dann angeben.

Lösungen:

vote_ok
von bequiet (220 Punkte) - 27.06.2013 um 13:18 Uhr
Quellcode ausblenden Java-Code
import java.util.*;
public class Hauptprogramm {
	
	
	
	public Hauptprogramm()
	{
		
		
	
	}
	
	public static void initialisiereSpielmenue(int zeile, int spalte)
	{
		
		//Objekter andere Klassen
		Spielfeld sp1 = new Spielfeld(zeile,spalte);
		Spieler spieler1 = new Spieler("Sabrina", 1);
		Spieler spieler2 = new Spieler("Olli", 2);
		
		//aktueller Spieler
		Spieler aktuellerSpieler = spieler1;
		
		//Scanner
		Scanner sc = new Scanner(System.in);
		
		// Spielfeld ausgaben
		do
		{
		System.out.println(aktuellerSpieler.getName() + ", Sie sind an der Reihe!");
		System.out.println();
		
		sp1.ausgabeSpielfeld();
		
		System.out.println();
		System.out.println("Bitte wählen Sie die Spalte aus! (Wert zwischen 0 und " + spalte + ")");
		System.out.println("bei Eingaben über " + spalte + " wird das Spiel beendet!");
		
		int eingabe = sc.nextInt();
		if(eingabe >= 0 && eingabe < spalte)
		{
			sp1.setzeSpielstein(aktuellerSpieler.getSpielerNr(), eingabe);
			if(aktuellerSpieler.getSpielerNr() == 1)
				{
				aktuellerSpieler = spieler2;
				}
			else
			{
				aktuellerSpieler = spieler1;
			}
			
		}
		else
		{
			beendeSpiel();
		}
		} while(sp1.unentschieden() == false && sp1.testeReihe(aktuellerSpieler.getSpielerNr()) == false);
		
		System.out.println("Herzlichen Glückwunsch, " + aktuellerSpieler.getName() + " hat gewonnen!!");
		
		beendeSpiel();
		
	}
	
	
	
	public static void initialisiereMenue()
	{
	
		System.out.println("Willkommen bei 4 Gewinnt!");
		System.out.println();
		System.out.println("Spiel beginnen: [1]");
		System.out.println("Spiel beenden:  [beliebige Eingabe]");
		
		Scanner sc = new Scanner(System.in);
		
		int eingabe = sc.nextInt();
		if(eingabe == 1)
		{
			Hauptprogramm.initialisiereSpielmenue(6,7);
		}
		else
		{
			beendeSpiel();
		}
		
		
		
	}
	
	
	public static void beendeSpiel()
	{
		System.exit(0);
		
	}

}


Quellcode ausblenden Java-Code
import java.util.*;
public class Hauptprogramm {
	
	
	
	public Hauptprogramm()
	{
		
		
	
	}
	
	public static void initialisiereSpielmenue(int zeile, int spalte)
	{
		
		//Objekter andere Klassen
		Spielfeld sp1 = new Spielfeld(zeile,spalte);
		Spieler spieler1 = new Spieler("Sabrina", 1);
		Spieler spieler2 = new Spieler("Olli", 2);
		
		//aktueller Spieler
		Spieler aktuellerSpieler = spieler1;
		
		//Scanner
		Scanner sc = new Scanner(System.in);
		
		// Spielfeld ausgaben
		do
		{
		System.out.println(aktuellerSpieler.getName() + ", Sie sind an der Reihe!");
		System.out.println();
		
		sp1.ausgabeSpielfeld();
		
		System.out.println();
		System.out.println("Bitte wählen Sie die Spalte aus! (Wert zwischen 0 und " + spalte + ")");
		System.out.println("bei Eingaben über " + spalte + " wird das Spiel beendet!");
		
		int eingabe = sc.nextInt();
		if(eingabe >= 0 && eingabe < spalte)
		{
			sp1.setzeSpielstein(aktuellerSpieler.getSpielerNr(), eingabe);
			if(aktuellerSpieler.getSpielerNr() == 1)
				{
				aktuellerSpieler = spieler2;
				}
			else
			{
				aktuellerSpieler = spieler1;
			}
			
		}
		else
		{
			beendeSpiel();
		}
		} while(sp1.unentschieden() == false && sp1.testeReihe(aktuellerSpieler.getSpielerNr()) == false);
		
		System.out.println("Herzlichen Glückwunsch, " + aktuellerSpieler.getName() + " hat gewonnen!!");
		
		beendeSpiel();
		
	}
	
	
	
	public static void initialisiereMenue()
	{
	
		System.out.println("Willkommen bei 4 Gewinnt!");
		System.out.println();
		System.out.println("Spiel beginnen: [1]");
		System.out.println("Spiel beenden:  [beliebige Eingabe]");
		
		Scanner sc = new Scanner(System.in);
		
		int eingabe = sc.nextInt();
		if(eingabe == 1)
		{
			Hauptprogramm.initialisiereSpielmenue(6,7);
		}
		else
		{
			beendeSpiel();
		}
		
		
		
	}
	
	
	public static void beendeSpiel()
	{
		System.exit(0);
		
	}

}


Quellcode ausblenden Java-Code
public class Spielfeld {

	private int feld[][] = null;
	
	
	
	public Spielfeld(int x, int y)
	{
		
		feld = new int[x][y];
		
		for(int i=0; i < feld.length; i++)
		{
			for(int j=0; j < feld[i].length; j++)
			{
				feld[i][j] = 0;
			}
			
		}
		
		
		
	}
	
	public void setzeSpielstein(int spielerNr, int spalte)
	{
		
		int x = feld.length-1;
		
		boolean fortsetzen = true;
		
		while(x >= 0 && fortsetzen == true)
		{
			
			if(feld[x][spalte] == 0 )
			{
			feld[x][spalte] = spielerNr;
			fortsetzen = false;
			}
			
			x--;
			
		}
		
		if(x < 0)
		{
			System.out.println("Der Stein konnte nicht gesetzt werden!");
		}
	
			
		
		
	}
	
	public void ausgabeSpielfeld()
	{
		
		for(int i=0; i < feld.length; i++)
		{
			for(int j=0; j < feld[i].length; j++)
			{
				
				System.out.print("| " + feld[i][j] + " |");
				
			}
			System.out.println();
		}
		
		
	}
	
	public boolean unentschieden()
	{
		
		boolean returnwert = false;
		
		if(getAnzahlGesetzterSteine() == feld.length*feld[0].length)
		{
			returnwert = true;
		}
		
		return returnwert;
	}
	
	public int getAnzahlGesetzterSteine()
	{
		int anzSteine = 0;
		for(int i=0; i < feld.length; i++)
		{
			for(int j=0; j < feld[i].length; j++)
			{
				if(feld[i][j] != 0)
				{
					anzSteine++;
				}
			}
		}
		
		return anzSteine;
	}
	
	public boolean testeReihe(int spielerNr)
	{
		boolean returnwert = false;
		
		if(getAnzahlGesetzterSteine() >= 7)
		{
		for(int i=0; i < feld.length; i++)
		{
			for(int j=0; j < feld.length; j++)
			{
				if(testeHorizontal(i,j,spielerNr) == true || testeVertikal(i,j,spielerNr) == true || testeQuer(i,j,spielerNr) == true )
				{
					returnwert = true;
				}
				
			}
		}
		
		}
		else
		{
		return returnwert;
		}
		return returnwert;
	}
	
	public boolean testeHorizontal(int x, int y, int Spieler)
	{
		boolean returnwert = false;
		
		
	if(y + 3 < feld[x].length)
		{
			if(feld[x][y] == Spieler && feld[x][y+1] == Spieler && feld[x][y+2] == Spieler && feld[x][y+3] == Spieler)
			{
			returnwert = true;
			}
		}	
		return returnwert;
	}
	
	public boolean testeVertikal(int x, int y, int Spieler)
	{
		boolean returnwert = false;
		if(x + 3 < feld.length)
		{
			if(feld[x][y] == Spieler && feld[x+1][y] == Spieler && feld[x+2][y] == Spieler && feld[x+3][y] == Spieler)
			{
			returnwert = true;
			}
		}	
		return returnwert;
	}
	
	public boolean testeQuer(int x, int y, int Spieler)
	{
		boolean returnwert = false;
		if(x + 3 < feld.length && y + 3 < feld.length)
		{
			if(feld[x][y] == Spieler && feld[x+1][y+1] == Spieler && feld[x+2][y+2] == Spieler && feld[x+3][y+3] == Spieler)
			{
			returnwert = true;
			}
		}	
		
		if(x - 3 >= 0 && y + 3 < feld.length)
		{
			if(feld[x][y] == Spieler && feld[x-1][y+1] == Spieler && feld[x-2][y+2] == Spieler && feld[x-3][y+3] == Spieler)
			{
			returnwert = true;
			}
		}	
		
		return returnwert;
	}
}


Quellcode ausblenden Java-Code
public class Testprogramm {

	public static void main(String[] args) {
		
		Hauptprogramm.initialisiereMenue();
		
		

	}

}
vote_ok
von paddlboot (3970 Punkte) - 09.07.2019 um 09:15 Uhr
Quellcode ausblenden Java-Code
import java.util.*;

public class gewinnt {
	static String[] [] spielfeld = new String[6] [7];
	static Scanner scanner = new Scanner(System.in); 
	
	public static void main (String[] args) {
		boolean sp = true;
		
		//Spielfeld mit leeren Strings füllen
		for(int i = 0; i < 6; i++) {
			for(int j = 0; j < 7; j++) {
				spielfeld[i][j] = "";
			}
		}
		
		do
		{
			spielfeldausgeben();
			if(sp == true) {
				einwurf(1);
			} else {
				einwurf(2);
			}
			//Spielerwechsel nach Zug
			sp = !sp;
			
			if(feldVoll() == true) break;
			
		}while(gewonnen() == false);
		spielfeldausgeben();
	}

	public static String diagonal() {
		int var = 0;
		String spieler = "";
		int counter = 0;
		
		//untenlinks nach oben rechts + verschiebung nach rechts
		//4 Möglichkeiten
		for(int mögl = 0; mögl < 4; mögl++) {
			//5 Felder
			for(int felder = 5; felder >= 0; felder--) {
				
				//damit keine OutOfRangeException
				if((mögl + var) > 6) break;
				
				//setze counter auf 1, wenn kein leeres Feld
				if(spieler != spielfeld[felder][mögl+var]) {
					spieler = spielfeld[felder][mögl + var];
					counter = 1;
				} else counter++; //wenn spieler mit dem Eintrag im Spielfeld übereinstimmt, soll der Counter hochgezählt werden
				
				//wenn 4 aufeinander folgen, soll der Spieler zurückgegeben werden
				if((counter == 4) && (spieler != "")) return spieler;
				
				//Variable hochzählen für die richtigen Felder
				var++;
			}
			//alles zurücksetzen für den neuen Durchgang
			var = 0;
			counter = 0;
			spieler = "";
		}
		
		//untenlinks nach oben rechts + verschiebung nach oben
		//3 Möglichkeiten
		for(int mögl = 0; mögl < 3; mögl++) {
			int zahl = 0;
			for(int felder = 5; felder >= 0; felder--) {
				
				//damit keine OutOfRangeException
				if((felder - var) < 0 ) break;
				
				//setze counter auf 1, wenn kein leeres Feld
				if(spieler != spielfeld[felder - var][zahl]) {
					spieler = spielfeld[felder - var][zahl];
					counter = 1;
				} else counter++; //wenn spieler mit dem Eintrag im Spielfeld übereinstimmt, soll der Counter hochgezählt werden
				
				//wenn 4 aufeinander folgen, soll der Spieler zurückgegeben werden
				if((counter == 4) && (spieler != "")) return spieler;
				
				//Zahl hochzählen für die richtigen Felder
				zahl++;
			}
			//Variable hochzählen für die richtigen Felder
			var++;
			
			//alles zurücksetzen für den neuen Durchgang
			counter = 0;
			spieler = "";
		}
		//Var zurücksetzen
		var = 1;
		
		//untenrechts nach oben links + verschiebung nach links
		//4 Möglichkeiten
		for(int mögl = 0; mögl < 4; mögl++) {
			//5 Felder
			for(int reihe = 5; reihe >= 0; reihe--) {
				
				//damit keine OutOfRangeException
				if((reihe+var) < 0) break;
				
				//setze counter auf 1, wenn kein leeres Feld
				if(spieler != spielfeld[reihe][reihe+var]) {
					spieler = spielfeld[reihe][reihe+var];
					counter = 1;
				} else counter++; //wenn spieler mit dem Eintrag im Spielfeld übereinstimmt, soll der Counter hochgezählt werden
				
				//wenn 4 aufeinander folgen, soll der Spieler zurückgegeben werden
				if((counter == 4) &&(spieler != "")) return spieler;
			}
			//Variable runterzählen für die richtigen Felder
			var--;
			
			//alles zurücksetzen für den neuen Durchgang
			counter = 0;
			spieler = "";
		}
		
		//Variable zurücksetzen
		var = 0;
		
		//untenrechts nach oben links + verschiebung nach oben
		//3 Möglichkeiten
		for(int mögl = 0; mögl < 3; mögl++) {
			//Variable für die richtigen Felder
			int zahl = 6;
			
			//5 Felder
			for(int reihe = 5; reihe >= 0; reihe--) {
				
				//damit keine OutOfRangeException
				if((reihe-var) < 0) break;
				
				//setze counter auf 1, wenn kein leeres Feld
				if(spieler != spielfeld[reihe-var][zahl]) {
					spieler = spielfeld[reihe-var][zahl];
					counter = 1;
				}else counter++; //wenn spieler mit dem Eintrag im Spielfeld übereinstimmt, soll der Counter hochgezählt werden
				
				//wenn 4 aufeinander folgen, soll der Spieler zurückgegeben werden
				if((counter == 4) && (spieler != "")) return spieler;

				//Variable runterzählen für die richtigen Felder
				zahl--;	
			}
			//Variable hochzählen für die richtigen Felder
			var++;
		}
		
		//nichts zurückgeben, wenn nichts davon zutrifft
		return "";
	}
	
	public static String horizontal() {
		int counter = 0;
		String spieler = "";
		
		for(int reihe = 5; reihe >= 0; reihe--) {
			for(int spalte = 0; spalte < 7; spalte++) {
				if(spieler != spielfeld[reihe][spalte]) {
					spieler = spielfeld[reihe][spalte];
					counter = 1;
				} else counter++;
				
				if(counter == 4 && spieler != "") {
					return spieler;
				}
			}
			counter = 0;
			spieler = "";
		}
		return "";
	}
		
	public static String vertikal() {
		int counter = 0;
		String spieler = "";

		for(int spalte = 0; spalte < 7; spalte++) {
			for(int reihe = 5; reihe >= 0; reihe--) {
				if(spieler != spielfeld[reihe][spalte]) {
					spieler = spielfeld[reihe][spalte];
					counter = 1;
				} else counter++;
				
				if((counter == 4) && (spieler != "")) {
					return spieler;
				}
			}
			counter = 0;
			spieler = "";
		}
		return "";
	}
	
	public static boolean gewonnen() {
		if(vertikal() != "") return true;
		else if(horizontal() != "") return true;
		else if(diagonal() != "") return true;
		else return false;
	}

	public static boolean feldVoll() {
		int counter = 0;
		
		for(int i = 0; i < 7; i++) {
			if(spielfeld[0][i] != "") {
				counter++;
			}
		}
		
		if(counter == 7) {
			System.out.println("Das Spielfeld ist voll! Unentschieden!");
			return true;
		}
		else return false;
	}
	
	public static boolean spalteVoll(int spalte) {
		if(spielfeld[0][spalte] != "") {
			return true;
		} else return false;
	}
	
	public static void einwurf(int spieler) {
		int spalte;
		boolean gilt = false;
		
		do
		{
			System.out.println("Spieler " + spieler + " ist dran!");
			System.out.print("Spalte:\t");
			spalte = scanner.nextInt() - 1;
			
			if(spalteVoll(spalte) == false) {
				for(int i = 5; i >= 0; i--) {
					if(spielfeld[i][spalte] == "") {
						if(spieler == 1) {
							spielfeld [i][spalte] = "1";
						} else {
							spielfeld [i][spalte] = "2";
						}
						gilt = true;
						break;
					}
				}
			} else System.out.println("Spalte voll!");
		}while(gilt == false);
	}
	
	public static void spielfeldausgeben() {
		for(int i = 0; i < 6; i++) {
			
			for(int j = 0; j < 7; j++) {
				System.out.print(" | ");
				switch (spielfeld[i][j]) {
				case "":
					System.out.print(" ");
					break;
				case "1":
					System.out.print("X");
					break;
				case "2":
					System.out.print("O");
					break;
				}
			}
			System.out.print(" |");
			System.out.println();
		}
		System.out.println(" -----------------------------");
	}
}
2095176

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.