Cette fois, j'ai joué avec gravité sur la console! Cela fonctionne comme ça.
Puisque je l'ai fait pour le plaisir, il peut y avoir des omissions dans la partie du jugement, mais à l'avenir, je vais apporter des améliorations telles que l'ajout de batailles de CPU basées sur cela. À propos de l'arrangement à quatre yeux avec gravité
wiki https://ja.wikipedia.org/wiki/%E5%9B%9B%E7%9B%AE%E4%B8%A6%E3%81%B9
· Windows 7 · Java 8 · Éclipse
Je vais vous présenter la source de cette époque.
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("Commencez à organiser quatre yeux avec gravité");
// 0:player1 1:player2
int player = 0;
Random random = new Random();
int turn = 0;
int[][] bord = new int[6][7];
int i;
//Initialisation de la carte(-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);
//Sortie de la carte vers la console
printBord(bord);
//Dessiner quand le plateau est plein
if(turn >= 42) {
System.out.println("dessiner");
break;
}
//Saisie et validation depuis la console
System.out.println("nombre(0~6)Entrez s'il vous plait.");
String line = scan.next();
if(line.trim().length() == 0 || line.trim().length() > 1) {
System.out.println("L'entrée n'est pas valide.");
continue;
}
if(!Character.isDigit(line.charAt(0))) {
System.out.println("L'entrée n'est pas valide.");
continue;
}
int num = Integer.parseInt(line);
if(num < 0 || num > 6) {
System.out.println("L'entrée n'est pas valide.");
continue;
}
for(i = 0; i < 6; i++) {
if(bord[i][num] == -1) {
bord[i][num] = player;
break;
}
}
if(i >= 6) {
System.out.println("[ " + num + "]Je ne peux plus en mettre.");
continue;
}
if(isWin(bord, i , num, player)) {
System.out.println();
printBord(bord);
System.out.println((player == 0 ? "player1[○]":"player2[×]")+"Victoires!!");
break;
}
player = (player * -1) + 1;
turn++;
}
scan.close();
System.out.println("Fin");
}
public static void printPlayer(int player) {
switch(player){
case 0:
System.out.println("player1[○]C'est ton tour.");
break;
case 1:
System.out.println("player2[×]C'est ton tour.");
break;
default:
System.out.println("Erreur");
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;
//Contrôle latéral(droite)
while(x < 6) {
if(bord[i][x+1] == player) {
yoko++;
}else {
break;
}
x++;
}
x = j;
//Contrôle latéral(la gauche)
while(x > 0) {
if(bord[i][x-1] == player) {
yoko++;
}else {
break;
}
x--;
}
if(yoko >= 4) {
return true;
}
//Contrôle vertical(Vers le haut)
while(y < 5) {
if(bord[y+1][j] == player) {
tate++;
}else {
break;
}
y++;
}
y = i;
//Contrôle vertical(en dessous de)
while(y > 0) {
if(bord[y-1][j] == player) {
tate++;
}else {
break;
}
y--;
}
if(tate >= 4) {
return true;
}
y = i;
x = j;
// /Vérification de la direction(Vers le haut)
while(y < 5 && x < 6) {
if(bord[y+1][x+1] == player) {
sura++;
}else {
break;
}
y++;
x++;
}
y = i;
x = j;
// /Vérification de la direction(en dessous de)
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;
// \Vérification de la direction(Vers le haut)
while(y < 5 && x > 0) {
if(bord[y+1][x-1] == player) {
back++;
}else {
break;
}
y++;
x--;
}
y = i;
x = j;
// \Vérification de la direction(en dessous de)
while(y > 0 && x < 6) {
if(bord[y-1][x+1] == player) {
back++;
}else {
break;
}
y--;
x++;
}
if(back >= 4) {
return true;
}
return false;
}
}
C'est tout pour la source! Pour expliquer brièvement le flux global,
Jugez dans le sens haut / bas / gauche / droite, barre oblique et barre oblique arrière à partir de la pièce que vous avez placée.
tate = 1; yoko = 1; sura = 1; back = 1;
Boucle pour chacune des conditions suivantes
① Si la direction est la pièce du joueur vue de la position actuelle tate++; Boucle en décalant la position actuelle dans la direction ↑ S'ils sont différents, ils ne seront pas continus, donc la boucle se termine
② Si la direction est la pièce du joueur vue de la position actuelle tate++; Boucle en décalant la position actuelle dans la direction ↓ S'ils sont différents, ils ne seront pas continus, donc la boucle se termine
Les résultats de ① et ② sont tate = Nombre de pièces continues dans le sens ↑ + Nombre de pièces continues dans le sens ↓ + 1 (valeur initiale); Sera le même que.
Lorsqu'il est appliqué dans la direction ← → ↙↗↖↘ de la même manière que ① et ② yoko = ← + → + 1; sura = ↙ + ↗ + 1; back = ↖ + ↘ + 1; Est obtenu.
Si l'un d'entre eux remplit la condition> = 4, le joueur actuel gagne
Le point à noter est de définir chaque variable sur la valeur initiale 1 et de voir la cellule suivante à partir de la position actuelle sous la condition de boucle. Si vous jugez par la position actuelle, les points de référence se chevaucheront. (Si la valeur initiale est 0 et la valeur finale -1, il n'y a pas de problème avec le point de référence.) Exemple: Regardons [3] [3] comme point de référence (Jugement à la hausse) Incrément parce que la position actuelle [3] [3] est le joueur Déplacer vers le haut et position actuelle [4] [3] ... (Jugement à la baisse) Incrément parce que la position actuelle [3] [3] est le joueur Déplacer vers le bas et position actuelle [2] [3] ...
Il sera couvert à la position actuelle [3] [3].
Vous devriez pouvoir jouer immédiatement si vous copiez et collez! Il y a eu une vague de petit boom depuis que j'ai joué avec la ligne à quatre yeux avec gravité quand j'étais étudiant (rires) S'il vous plaît jouer en tuant le temps!