Java :: Aufgabe #41 :: Lösung #2

2 Lösungen Lösungen öffentlich
#41

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.
#2
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(" -----------------------------");
	}
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
2095456

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.