[JAVA] Vier Reihen mit Schwerkraft, die auf der Konsole gespielt werden können

Einführung

Dieses Mal habe ich mit der Schwerkraft auf der Konsole gespielt! Es funktioniert so. connect.gif

Da ich es zum Spaß gemacht habe, kann es im Urteilsteil zu Auslassungen kommen, aber in Zukunft werde ich Verbesserungen vornehmen, wie z. B. das Hinzufügen von CPU-Schlachten auf dieser Grundlage. Vorerst etwa vieräugige Anordnung mit Schwerkraft

wiki https://ja.wikipedia.org/wiki/%E5%9B%9B%E7%9B%AE%E4%B8%A6%E3%81%B9

Nutzungsumgebung

· Windows 7 · Java 8 ・ Sonnenfinsternis

Quelleneinführung

Ich werde die Quelle dieser Zeit vorstellen.

ConnectFour.java


package connect.main;

import java.util.Random;
import java.util.Scanner;

public class ConnectFour {

	public static void main(String[] args) {

		System.out.println("Ordnen Sie vier Augen mit Schwerkraft an");

		// 0:player1 1:player2
		int player = 0;
		Random random = new Random();
		int turn = 0;
		int[][] bord = new int[6][7];
		int i;

		//Board-Initialisierung(-1)
		for(i = 0; i < 6; i++) {
			for(int j = 0; j < 7; j++) {
				bord[i][j] = -1;
			}
		}

		// 0 || 1
		player = random.nextInt(2);


		Scanner scan = new Scanner(System.in);
		scan.useDelimiter(System.lineSeparator());
		while(true) {
			System.out.println();
			printPlayer(player);

			//Board-Ausgabe an die Konsole
			printBord(bord);

			//Zeichnen Sie, wenn das Brett voll ist
			if(turn >= 42) {
				System.out.println("zeichnen");
				break;
			}

			//Eingabe und Validierung über die Konsole
			System.out.println("Nummer(0~6)Bitte eingeben.");
			String line = scan.next();
			if(line.trim().length() == 0 || line.trim().length() > 1) {
				System.out.println("Die Eingabe ist ungültig.");
				continue;
			}
			if(!Character.isDigit(line.charAt(0))) {
				System.out.println("Die Eingabe ist ungültig.");
				continue;
			}
			int num = Integer.parseInt(line);
			if(num < 0 || num > 6) {
				System.out.println("Die Eingabe ist ungültig.");
				continue;
			}
			for(i = 0; i < 6; i++) {
				if(bord[i][num] == -1) {
					bord[i][num] = player;
					break;
				}
			}
			if(i >= 6) {
				System.out.println("[ " + num + "]Kann nicht mehr reinstecken.");
				continue;
			}
			if(isWin(bord, i , num, player)) {
				System.out.println();
				printBord(bord);
				System.out.println((player == 0 ? "player1[○]":"player2[×]")+"Gewinnt!!");
				break;
			}
			player = (player * -1) + 1;
			turn++;
		}
		scan.close();

		System.out.println("Ende");

	}

	public static void printPlayer(int player) {
		switch(player){
		case 0:
			System.out.println("player1[○]Du bist dran.");
			break;
		case 1:
			System.out.println("player2[×]Du bist dran.");
			break;
		default:
			System.out.println("Error");
			return;
		}
	}

	public static void printBord(int[][] bord) {
		for(int j = 0; j < 7; j++) {

			if(j == 6) {
				System.out.println("[ " + j + "]");
			}else {
				System.out.print("[ " + j + "]");
			}
		}
		for(int i = 5; i >= 0; i--) {
			for(int j = 0; j < 7; j++) {
				String a = "";
				a = (bord[i][j] == 0) ? "[○]" : (bord[i][j] == 1) ? "[×]" : "[  ]";
				if(j == 6) {
					System.out.println(a);
				}else {
					System.out.print(a);
				}
			}
		}
	}

	public static boolean isWin(int[][] bord, int i, int j, int player) {
		int yoko = 1;// -
		int tate = 1;// |
		int sura = 1;// /
		int back = 1;// \
		int y = i;
		int x = j;

		//Seitliche Kontrolle(richtig)
		while(x < 6) {
			if(bord[i][x+1] == player) {
				yoko++;
			}else {
				break;
			}
			x++;
		}
		x = j;
		//Seitliche Kontrolle(links)
		while(x > 0) {
			if(bord[i][x-1] == player) {
				yoko++;
			}else {
				break;
			}
			x--;
		}
		if(yoko >= 4) {
			return true;
		}

		//Vertikale Prüfung(Oben)
		while(y < 5) {
			if(bord[y+1][j] == player) {
				tate++;
			}else {
				break;
			}
			y++;
		}
		y = i;
		//Vertikale Prüfung(unter)
		while(y > 0) {
			if(bord[y-1][j] == player) {
				tate++;
			}else {
				break;
			}
			y--;
		}
		if(tate >= 4) {
			return true;
		}
		y = i;
		x = j;
		// /Richtungsprüfung(Oben)
		while(y < 5 && x < 6) {
			if(bord[y+1][x+1] == player) {
				sura++;
			}else {
				break;
			}
			y++;
			x++;
		}
		y = i;
		x = j;
		// /Richtungsprüfung(unter)
		while(y > 0 && x > 0) {
			if(bord[y-1][x-1] == player) {
				sura++;
			}else {
				break;
			}
			y--;
			x--;
		}
		if(sura >= 4) {
			return true;
		}
		y = i;
		x = j;
		// \Richtungsprüfung(Oben)
		while(y < 5 && x > 0) {
			if(bord[y+1][x-1] == player) {
				back++;
			}else {
				break;
			}
			y++;
			x--;
		}
		y = i;
		x = j;
		// \Richtungsprüfung(unter)
		while(y > 0 && x < 6) {
			if(bord[y-1][x+1] == player) {
				back++;
			}else {
				break;
			}
			y--;
			x++;
		}
		if(back >= 4) {
			return true;
		}

		return false;
	}
}

Das ist alles für die Quelle! Um den Gesamtfluss kurz zu erklären,

  1. Entscheide dich zufällig für den ersten Spieler mit ungeraden und geraden (0 oder 1) für die Spieler 1 und 2.
  2. Initialisieren Sie die Karte mit -1.
  3. Zeigen Sie an, welche Reihenfolge angezeigt wird, und zeigen Sie die Karte an.
  4. Holen Sie sich die Nummer von der Konsole, an der der Rahmen platziert werden soll.
  5. Eingabeprüfung.
  6. Wenn auf der Platine Platz ist, stellen Sie ihn auf die Platine.
  7. Nehmen Sie an der Position, an der das Teil installiert ist, ein vertikales und horizontales Lecksiegsurteil vor. Wenn die Bedingungen erfüllt sind, endet es.
  8. Spieler wechseln und Runde erhöhen. Schleife von 9.3

Über das Siegesurteil

Beurteilen Sie das von Ihnen platzierte Stück in Richtung Auf / Ab / Links / Rechts, Schrägstrich und Rückenslash.

tate = 1; yoko = 1; sura = 1; back = 1;

Schleife für jede der folgenden Bedingungen

① Wenn die Richtung von der aktuellen Position aus gesehen die Figur des Spielers ist tate++; Schleife durch Verschieben der aktuellen Position in Richtung ↑ Wenn sie unterschiedlich sind, sind sie nicht kontinuierlich, sodass die Schleife endet

② Wenn die Richtung von der aktuellen Position aus gesehen die Figur des Spielers ist tate++; Schleife durch Verschieben der aktuellen Position in Richtung ↓ Wenn sie unterschiedlich sind, sind sie nicht kontinuierlich, sodass die Schleife endet

Die Ergebnisse von ① und ② sind tate = Anzahl der Endlosstücke in ↑ Richtung + Anzahl der Endlosstücke in ↓ Richtung + 1 (Anfangswert); Wird das gleiche sein wie.

Bei Anwendung in ← → ↙↗↖↘ Richtung auf die gleiche Weise wie ① und ② yoko = ← + → + 1; sura = ↙ + ↗ + 1; back = ↖ + ↘ + 1; Wird erhalten.

Wenn einer von ihnen die Bedingung> = 4 erfüllt, gewinnt der aktuelle Spieler

Der zu beachtende Punkt besteht darin, jede Variable auf den Anfangswert 1 zu setzen und die nächste Zelle von der aktuellen Position unter der Schleifenbedingung zu sehen. Wenn Sie nach der aktuellen Position urteilen, überlappen sich die Referenzpunkte. (Wenn der Anfangswert 0 und der Endwert -1 ist, gibt es kein Problem mit dem Referenzpunkt.) Beispiel: Betrachten wir [3] [3] als Referenzpunkt (Urteil nach oben) Inkrementieren, da die aktuelle Position [3] [3] Spieler ist Bewegen Sie sich nach oben und aktuelle Position [4] [3] ... (Abwärtsurteil) Inkrementieren, da die aktuelle Position [3] [3] Spieler ist Nach unten bewegen und aktuelle Position [2] [3] ...

Es wird an der aktuellen Position [3] [3] abgedeckt.

Zusammenfassung

Sie sollten sofort spielen können, wenn Sie kopieren und einfügen! Es hat eine Welle des kleinen Booms gegeben, seit ich als Student mit der vieräugigen Schwerkraftlinie gespielt habe (lacht) Bitte spielen Sie, während Sie die Zeit töten!

Recommended Posts

Vier Reihen mit Schwerkraft, die auf der Konsole gespielt werden können
Firebase-Realtime-Datenbank für Android, die mit Kopie verwendet werden kann
Stellen Sie die Zugriffslast ein, die mit JMeter grafisch geändert werden kann (Teil 2).
[Rails] "Pry-Rails", die beim Speichern mit der create-Methode verwendet werden können
Organisieren Sie Methoden, die mit StringUtils verwendet werden können
Über die Sache, dass hidden_field wahnsinnig benutzt werden kann
Ruby on Rails 5 - Kurzanleitung zum Lernen, die im Feld Zusammenfassung verwendet werden kann
Erstellen Sie ein Seitensteuerelement, das mit RecyclerView verwendet werden kann
Ein Kratzen des vergangenen Wetters, das auf der Website der Meteorologischen Agentur zu sehen ist
[Java] Ich habe versucht, ein Janken-Spiel zu erstellen, das Anfänger auf der Konsole ausführen können
Lernen Sie Ruby mit AtCoder Anfänger Auswahl [Einige Summen] Erhöhen Sie die Methoden, die verwendet werden können
Statisches Analysetool, das mit GitHub verwendet werden kann [Java-Version]
Logik zum Zeichnen eines Kreises auf der Konsole mit ASCII-Grafik
SwiftUI-Ansicht, die in Kombination mit anderen Frameworks verwendet werden kann
Zusammenfassung der JDKs, die mit Homebrew installiert werden können (Stand November 2019)
Programmieren mit Ruby (unterwegs)
Probieren Sie die leichtgewichtige JavaScript-Engine „QuickJS“ aus, die in C / C ++ integriert werden kann
Tools zur Leistungsanalyse und Fehlerdiagnose, die mit OpenJDK verwendet werden können
Ruby-Array-Methoden, die mit Rails verwendet werden können (außer jedem)
[ERROR-Meldungsanzeige] Einfache Version, die jederzeit mit der Schienen-Teilvorlage verwendet werden kann
Bis Rubin in Fenstern verwendet werden kann ...
Objektorientiert, das von Feen verstanden werden kann
Überprüfen Sie mit Java / Kotlin, ob Dateien unter Windows nicht in die Benutzerkontensteuerung geschrieben werden können
Speichern Sie die Daten, die von JavaFX gelesen werden können, als PNG
Stellen Sie die Sensorinformationen von Raspberry Pi grafisch dar und bereiten Sie eine Umgebung vor, die mit einem Webbrowser überprüft werden kann