Dieses Mal habe ich mit der Schwerkraft auf der Konsole gespielt! Es funktioniert so.
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
· Windows 7 · Java 8 ・ Sonnenfinsternis
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,
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.
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