[JAVA] Jeu à cinq yeux

(règle)

・ Pierres alternées noires et blanches en carrés 5x5 (modifiables) ・ Gagnez lorsque tous les carrés verticaux, horizontaux et diagonaux sont remplis de pierres de même couleur

(Chaque fichier)

・ Classe de pierre → Gérer les informations sur la pierre ・ Classe de conseil → Gérer les informations du conseil ・ Classe de juge → Gérer le jugement de victoire · Interface constante → Gérer les constantes ・ Classe de jeu → Résumer comme un jeu

Stone.java


package Gomokunarabe;

public class Stone implements Constant{
	Board board = new Board();


	//Vrai si la pierre peut être placée normalement,Faux si non placé
	private boolean stoneSet;
	public boolean getStoneSet() {
		return stoneSet;
	}
	public void setStoneSet(boolean stoneSet) {
		this.stoneSet = stoneSet;
	}


	//Champ concernant la position de la pierre
	private int tatePosition;
	private int yokoPosition;
	public int getTatePosition() {
		return tatePosition;
	}
	public void setTatePosition(int tatePosition) {
		this.tatePosition = tatePosition;
	}
	public int getYokoPosition() {
		return yokoPosition;
	}
	public void setYokoPosition(int yokoPosition) {
		this.yokoPosition = yokoPosition;
	}


	//Traitement de placement de pierre
	@SuppressWarnings("resource")
	public void stoneConfig(boolean stoneColor) {
		//L'argument stoneColor est vrai pour le noir, faux pour le blanc
		System.out.println("Veuillez saisir la position de la pierre");
		try {
		int tatePosition = new java.util.Scanner(System.in).nextInt();
		int yokoPosition = new java.util.Scanner(System.in).nextInt();
		if((tatePosition>=0&&yokoPosition>=0)&&(tatePosition<BOARD_LENGTH && yokoPosition<BOARD_LENGTH)) {
			if(Board.getPosition(tatePosition, yokoPosition)==EMPTY_STONE) {
				setTatePosition(tatePosition);
				setYokoPosition(yokoPosition);
				board.board(getTatePosition(), getYokoPosition(), stoneColor);
				setStoneSet(true);
			}
			else {
				setStoneSet(false);
				System.out.println("Veuillez choisir un endroit où aucune pierre n'est placée");
			}
		}
		else {
			setStoneSet(false);
			System.out.println("0~"+(BOARD_LENGTH-1)+"Veuillez saisir l'un des");
		}
		}
		catch(Exception e) {
			setStoneSet(false);
			System.out.println("Veuillez saisir sous forme d'entier");
		}
	}

}

Board.java


package Gomokunarabe;

public class Board implements Constant{
	//Enregistrer la position de la pierre
	private static String[][] position = new String[BOARD_LENGTH][BOARD_LENGTH];
	public static void setPosition(int tate, int yoko, String stone) {
		position[tate][yoko] = stone;
	}
	public static String getPosition(int tate, int yoko) {
		return position[tate][yoko];
	}

	//Noir si vrai, blanc si faux
	private Boolean stoneColor;
	public Boolean isStoneColor() {
		return stoneColor;
	}
	public void setStoneColor(Boolean stoneColor) {
		this.stoneColor = stoneColor;
	}

	public void firstShowBoard() {
		//Affichage du numéro sur le tableau
		for(int i=0; i<BOARD_LENGTH;i++) {
			if(i==(BOARD_LENGTH-1)) {
				System.out.println(i);
				}
			else if(i==0) {
				System.out.print(" "+i+",");
			}
			else {
				System.out.print(i + ",");
				}
				}
		for(int j=0; j<BOARD_LENGTH; j++) {
			System.out.println(j);
		}

		//À toutes les coordonnées du tableau de position"□"Boutique
		//Empêcher null lors du référencement de la position
		for(int i=0; i<BOARD_LENGTH;i++) {
			for(int j=0; j<BOARD_LENGTH; j++) {
				setPosition(i,j,EMPTY_STONE);
				System.out.print(EMPTY_STONE);
			}
			System.out.println("");
		}
	}

	//Méthode de création de tableau Go
	public void board(int tate, int yoko, boolean stoneColor) {
		//stoneColor est vrai et noir,Blanc avec faux
		setStoneColor(stoneColor);

		for(int i=0; i<BOARD_LENGTH; i++) {
			//La variable i dans l'instruction pour signifie vertical
			for(int j=0; j<BOARD_LENGTH; j++) {
				//La variable j dans l'instruction pour signifie horizontal
				if((i==tate) && (j==yoko)) {
					if(isStoneColor()) {
						setPosition(tate,yoko,BLACK_STONE);
						System.out.print(getPosition(tate,yoko));
					}
					else{
						setPosition(tate,yoko,WHITE_STONE);
						System.out.print(getPosition(tate,yoko));
					}
				}
				else {
					System.out.print(getPosition(i,j));
				}
			}
			System.out.println("");
		}
	}
}

Judge.java


package Gomokunarabe;

public class Judge implements Constant{

	private int win = 0;

	public int getWin() {
		return win;
	}

	public void setWin(int win) {
		this.win += win;
	}
	public void resetWin() {
		this.win = 0;
	}


	public boolean winJudge() {
		//La variable win est-elle 5?-Lorsque la somme de 5 est obtenue, true est renvoyé et la victoire est jugée.

		//Jugement de victoire en ligne
		for(int i=0; i<BOARD_LENGTH; i++) {
			for(int j=0; j<BOARD_LENGTH; j++) {
				if(Board.getPosition(i, j)==BLACK_STONE) {
					setWin(1);
				}
				else if(Board.getPosition(i, j)==WHITE_STONE) {
					setWin(-1);
				}
				else {
					setWin(0);
				}
			}

			if((getWin()==BOARD_LENGTH) || (getWin()==(-BOARD_LENGTH))) {
				return true;
			}
			else {
				resetWin();
			}
		}

		//Jugement de la victoire de la colonne
		for(int j=0; j<BOARD_LENGTH; j++){
			for(int i=0; i<BOARD_LENGTH; i++)
			 {
				if(Board.getPosition(i, j)==BLACK_STONE) {
					setWin(1);
				}
				else if(Board.getPosition(i, j)==WHITE_STONE) {
					setWin(-1);
				}
				else {
					setWin(0);
				}
			}

			if((getWin()==BOARD_LENGTH) || (getWin()==(-BOARD_LENGTH))) {
				return true;
			}
			else {
				resetWin();
			}
		}

		//Jugement de victoire dans la colonne diagonale gauche
		for(int i=0; i<BOARD_LENGTH; i++) {
			for(int j=0; j<BOARD_LENGTH; j++) {
				if((i==j) && (Board.getPosition(i, j)==BLACK_STONE)) {
					setWin(1);
				}
				else if((i==j) && (Board.getPosition(i, j)==WHITE_STONE)) {
					setWin(-1);
				}
				else {
					setWin(0);
				}
			}
			}
		if((getWin()==BOARD_LENGTH) || (getWin()==(-BOARD_LENGTH))) {
			return true;
		}
		else {
			resetWin();
		}

		//Jugement de victoire dans la colonne diagonale droite
		for(int i=0; i<BOARD_LENGTH; i++) {
			for(int j=0; j<BOARD_LENGTH; j++) {
				if((i+j == (BOARD_LENGTH - 1)) && (Board.getPosition(i, j)==BLACK_STONE)) {
					setWin(1);
				}
				else if((i+j == (BOARD_LENGTH - 1)) && (Board.getPosition(i, j)==WHITE_STONE)) {
					setWin(-1);
				}
				else {
					setWin(0);
				}
			}
			}
		if((getWin()==BOARD_LENGTH) || (getWin()==(-BOARD_LENGTH))) {
			return true;
		}
		else {
			resetWin();
		}

		return false;
	}

	}




Constant.java


package Gomokunarabe;

public interface Constant{
	/*
	 *En changeant la constante concernant la longueur du go board
	 *Changer les carrés
	 */

	//Aller à la longueur de la planche
	int BOARD_LENGTH = 5;

	//Pierre noire
	String BLACK_STONE = "●";
	//Pierre blanche
	String WHITE_STONE = "〇";
	//Vide
	String EMPTY_STONE = "□";

}


Game.java


package Gomokunarabe;

public class Game {
	Stone stone = new Stone();
	Judge judge = new Judge();
	Board board = new Board();

	//Vrai pour continuer le jeu, faux pour terminer le jeu
	private boolean gameLoop = true;
	public boolean isGameLoop() {
		return gameLoop;
	}
	public void setGameLoop(boolean gameLoop) {
		this.gameLoop = gameLoop;
	}

	//Noir pour les nombres impairs, blanc pour les nombres pairs
	private int loop=1;
	public int getLoop() {
		return loop;
	}
	public void setLoop(int loop) {
		this.loop = loop;
	}

	public void gameStart() {
		board.firstShowBoard();

		while(isGameLoop()) {
			//Si gameLoop est vrai, continuez le jeu
			if(getLoop()%2 == 1) {
				//Noir lorsque la boucle est bizarre
				System.out.println("C'est le tour noir");
				//Tour noir avec un vrai argument
				stone.stoneConfig(true);
				if(stone.getStoneSet()) {
					if(!judge.winJudge()) {
					//winJudge est faux pour continuer le jeu, vrai pour gagner
					//stoneSet est vrai et après le prochain virage blanc
					setLoop(2);
					}
					else {
						System.out.println("Victoire noire!\n Terminez le jeu!");
						setGameLoop(false);
					}
				}
				else {
					setLoop(1);
				}
			}
			//Blanc lorsque la boucle est régulière
			else{
				System.out.println("C'est virage blanc");
				stone.stoneConfig(false);

				if(stone.getStoneSet()) {
					if(!judge.winJudge()) {
						//winJudge est faux pour continuer le jeu, vrai pour gagner
						//stoneSet est vrai et après le prochain virage blanc
						setLoop(1);
						}
						else {
							System.out.println("Victoire blanche!\n Terminez le jeu!");
							setGameLoop(false);
						}
					//stoneSet est vrai et passe au virage noir
					}
				else {
					setLoop(2);
				}
			}

		}
	}


}

Main.java


package Gomokunarabe;

public class Main {

	public static void main(String[] args) {
		Game game = new Game();
		game.gameStart();
	}
}

【Résultat de l'exécution】

★ Cinq rangées ★ 0,1,2,3,4 0 1 2 3 4 □□□□□ □□□□□ □□□□□ □□□□□ □□□□□ C'est le tour noir Veuillez saisir la position de la pierre 0 0 ●□□□□ □□□□□ □□□□□ □□□□□ □□□□□ C'est virage blanc Veuillez saisir la position de la pierre 0 4 ●□□□〇 □□□□□ □□□□□ □□□□□ □□□□□ C'est le tour noir Veuillez saisir la position de la pierre 1 1 ●□□□〇 □●□□□ □□□□□ □□□□□ □□□□□ C'est virage blanc Veuillez saisir la position de la pierre 1 4 ●□□□〇 □●□□〇 □□□□□ □□□□□ □□□□□ C'est le tour noir Veuillez saisir la position de la pierre 2 2 ●□□□〇 □●□□〇 □□●□□ □□□□□ □□□□□ C'est virage blanc Veuillez saisir la position de la pierre 2 0 ●□□□〇 □●□□〇 〇□●□□ □□□□□ □□□□□ C'est le tour noir Veuillez saisir la position de la pierre 3 3 ●□□□〇 □●□□〇 〇□●□□ □□□●□ □□□□□ C'est virage blanc Veuillez saisir la position de la pierre 2 4 ●□□□〇 □●□□〇 〇□●□〇 □□□●□ □□□□□ C'est le tour noir Veuillez saisir la position de la pierre 4 4 ●□□□〇 □●□□〇 〇□●□〇 □□□●□ □□□□● Victoire noire! Terminez le jeu!

Recommended Posts

Jeu à cinq yeux
Jeu de Janken
Jeu Algorithm-Life Kinx