314 lines
8.4 KiB
Java
314 lines
8.4 KiB
Java
|
package fr.blankoworld.plateau;
|
|||
|
|
|||
|
import java.util.Vector;
|
|||
|
|
|||
|
/**
|
|||
|
* @author Olivier DOSSMANN
|
|||
|
*
|
|||
|
*/
|
|||
|
public class PlateauPuissance4 {
|
|||
|
|
|||
|
private Jeton[][] grille;
|
|||
|
private int[] positions;
|
|||
|
private boolean alternanceJoueur = true;
|
|||
|
private Joueurs j1;
|
|||
|
private Joueurs j2;
|
|||
|
private Joueurs j0;
|
|||
|
private Vector CollectionJoueurs;
|
|||
|
|
|||
|
public int nbreColonnes = 7;
|
|||
|
public int nbreLignes = 6;
|
|||
|
|
|||
|
public static void main(String args[]){
|
|||
|
// System.out.println("Bienvenue dans Blankuissance4, le nouveau jeu fecal de puissance 4 !");
|
|||
|
|
|||
|
// Instanciation de l'objet a partir de la classe PlateauPuissance4
|
|||
|
PlateauPuissance4 p4 = new PlateauPuissance4();
|
|||
|
|
|||
|
p4.lancer();
|
|||
|
}
|
|||
|
|
|||
|
public void initialiser()
|
|||
|
{
|
|||
|
// Initialisation des joueurs
|
|||
|
j1 = new Joueurs("Joueur Un", "R");
|
|||
|
j2 = new Joueurs("Joueur Deux", "J");
|
|||
|
j0 = new Joueurs("Joueur inexistant", " ");
|
|||
|
|
|||
|
// On remplit la collection de joueurs
|
|||
|
CollectionJoueurs = new Vector();
|
|||
|
CollectionJoueurs.add(j0);
|
|||
|
CollectionJoueurs.add(j1);
|
|||
|
CollectionJoueurs.add(j2);
|
|||
|
|
|||
|
// Creation de la grille
|
|||
|
grille = new Jeton[nbreColonnes][nbreLignes];
|
|||
|
|
|||
|
// Creation tu tableau de positionnement
|
|||
|
positions = new int[7];
|
|||
|
|
|||
|
// Initialisation du tableau
|
|||
|
for (int i = 0; i < nbreColonnes; i++){
|
|||
|
for(int j = 0; j < nbreLignes; j++){
|
|||
|
grille[i][j] = j0.donneJeton();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// Initialisation des positions
|
|||
|
for (int i = 0; i < nbreColonnes; i++){
|
|||
|
positions[i] = 0;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void reinitialiser(){
|
|||
|
lancer();
|
|||
|
}
|
|||
|
|
|||
|
public void afficherGrille(){
|
|||
|
for (int i = nbreLignes - 1; i >= 0; i--){
|
|||
|
for(int j = 0; j < nbreColonnes; j++){
|
|||
|
System.out.print(grille[j][i].getCouleur() + "|");
|
|||
|
}
|
|||
|
System.out.print("\n");
|
|||
|
}
|
|||
|
for (int k = 0; k < nbreColonnes; k++){
|
|||
|
System.out.print("--");
|
|||
|
}
|
|||
|
System.out.print("\n");
|
|||
|
|
|||
|
for (int l = 0; l < nbreColonnes; l++){
|
|||
|
System.out.print(Integer.toString(l + 1) + "|");
|
|||
|
}
|
|||
|
System.out.print("\n");
|
|||
|
}
|
|||
|
|
|||
|
public void lancer(){
|
|||
|
System.out.println("Lancement du jeu de plateau");
|
|||
|
|
|||
|
// Initialisation du plateau
|
|||
|
this.initialiser();
|
|||
|
|
|||
|
// Affichage du plateau pour verification
|
|||
|
this.afficherGrille();
|
|||
|
|
|||
|
// Creation d'une aide pour les entrees de l'utilisateur
|
|||
|
AideSaisie aide = new AideSaisie();
|
|||
|
|
|||
|
// Affichage des joueurs
|
|||
|
System.out.println("Affichage des deux joueurs : ");
|
|||
|
System.out.println(" - " + j1.toString() + ".");
|
|||
|
System.out.println(" - " + j2.toString() + ".");
|
|||
|
|
|||
|
// Creation d'un joueur generique
|
|||
|
Joueurs joueur = new Joueurs("joueur de base", " ");
|
|||
|
|
|||
|
// Numero de colonne choisi
|
|||
|
int colonne = 0;
|
|||
|
|
|||
|
// incrementeur de jetons
|
|||
|
int i = 0;
|
|||
|
|
|||
|
// Contrele d'entree de boucle
|
|||
|
boolean aGagne = false;
|
|||
|
|
|||
|
while (aGagne == false && i < (nbreColonnes * nbreLignes))
|
|||
|
{
|
|||
|
|
|||
|
// Methode pour alterner de joueur : entre le joueur Un et le joueur Deux
|
|||
|
joueur = alterneJoueur(j1,j2);
|
|||
|
|
|||
|
boolean ok = true;
|
|||
|
// Recuperation de la proposition de colonne de l'utilisateur
|
|||
|
while(ok){
|
|||
|
String proposition = aide.getEntreeUtilisateur("Colonne (entre 1 et " + nbreColonnes + ") : ");
|
|||
|
System.out.println("Colonne choisie par " + joueur.getNom() + " : " + proposition);
|
|||
|
|
|||
|
// Traduction en entier du numero de colonne
|
|||
|
if (proposition == null){
|
|||
|
colonne = nbreColonnes;
|
|||
|
}
|
|||
|
else{
|
|||
|
colonne = Integer.parseInt(proposition);
|
|||
|
|
|||
|
// Mise a niveau de la colonne vis a vis de la structure Java
|
|||
|
colonne --;
|
|||
|
}
|
|||
|
|
|||
|
// Verification que la colonne n'est pas pleine ou hors limite
|
|||
|
if (colonne > nbreColonnes - 1 || colonne < 0){
|
|||
|
ok = true;
|
|||
|
System.out.println("Hors limites !");
|
|||
|
}
|
|||
|
else if (!grille[colonne][5].getCouleur().equals(" ")){
|
|||
|
ok = true;
|
|||
|
System.out.println("Colonne a ras bord !");
|
|||
|
}
|
|||
|
else{
|
|||
|
ok = false;
|
|||
|
System.out.println("Longueur du tableau : " + grille[colonne].length);
|
|||
|
|
|||
|
// Si colonne pas pleine, verifier a quel position les pions precedents sont poses
|
|||
|
// Si aucun pion, alors poser tout en bas
|
|||
|
|
|||
|
this.ajoutPion(colonne, joueur.donneJeton().getCouleur());
|
|||
|
this.afficherGrille();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// Il faut minimum 7 pions poses, avant de savoir si le joueur a gagne ou pas
|
|||
|
// Comme nous commencons a 0 l'incr<63>menteur (7 - 1 = 6), et que le jeton actuel
|
|||
|
// n'est pas encore compte (6 - 1 = 5),
|
|||
|
// alors on met la valeur a 5. C'est a dire que nous aurons deja i a 7 au minimum quand on fera
|
|||
|
// ce test, et que nous serons dans le cas du 8i<38>me jeton.
|
|||
|
if (i > 5){
|
|||
|
|
|||
|
// Verification si le joueur gagne
|
|||
|
// On decremente de 1 positions[colonne] car nous y avons ajoute 1 pour le pion suivant
|
|||
|
aGagne = gagnant(colonne, positions[colonne] - 1);
|
|||
|
}
|
|||
|
|
|||
|
// Instanciation de i pour confirmer que le coup est lance
|
|||
|
i++;
|
|||
|
// Idem mais alternance du joueur
|
|||
|
alternanceJoueur = !alternanceJoueur;
|
|||
|
System.out.println("Coup numero " + i + " joue !");
|
|||
|
System.out.print("\n");
|
|||
|
}
|
|||
|
|
|||
|
if (i < (nbreColonnes * nbreLignes)){
|
|||
|
System.out.println(joueur.getNom() + " a gagne !");
|
|||
|
System.out.println("Merci au joueur de l'autre equipe d'avoir participe.");
|
|||
|
}
|
|||
|
else{
|
|||
|
System.out.println("Jeu termine, aucun gagnant !");
|
|||
|
System.out.println("Merci d'avoir joue.");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public Joueurs alterneJoueur(Joueurs jUn, Joueurs jDeux){
|
|||
|
|
|||
|
if (alternanceJoueur){
|
|||
|
return jUn;
|
|||
|
}
|
|||
|
else{
|
|||
|
return jDeux;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void ajoutPion(int positionColonne, String couleur){
|
|||
|
Jeton nouveauPion = new Jeton(couleur);
|
|||
|
int positionJeton = positions[positionColonne];
|
|||
|
|
|||
|
grille[positionColonne][positionJeton] = nouveauPion;
|
|||
|
positions[positionColonne] ++;
|
|||
|
}
|
|||
|
|
|||
|
public boolean gagnant(int colonneChoisie, int positionPion){
|
|||
|
|
|||
|
// Entier qui permet de definir le nombre de puissance 4 effectues
|
|||
|
int puissance4 = 1;
|
|||
|
|
|||
|
puissance4 = estAligne(2,0,colonneChoisie,positionPion) + estAligne(1,0,colonneChoisie,positionPion) + 1;
|
|||
|
if( puissance4 < 4){
|
|||
|
//System.out.println(puissance4);
|
|||
|
puissance4 = estAligne(0,2,colonneChoisie,positionPion) + estAligne(0,1,colonneChoisie,positionPion) + 1;
|
|||
|
if(puissance4 < 4){
|
|||
|
//System.out.println(puissance4);
|
|||
|
puissance4 = estAligne(2,2,colonneChoisie,positionPion) + estAligne(1,1,colonneChoisie,positionPion) + 1;
|
|||
|
if(puissance4 < 4){
|
|||
|
//System.out.println(puissance4);
|
|||
|
puissance4 = estAligne(1,2,colonneChoisie,positionPion) + estAligne(2,1,colonneChoisie,positionPion) + 1;
|
|||
|
if(puissance4 < 4){
|
|||
|
//System.out.println(puissance4);
|
|||
|
return false;
|
|||
|
}
|
|||
|
else return true;
|
|||
|
}
|
|||
|
else return true;
|
|||
|
}
|
|||
|
else return true;
|
|||
|
}
|
|||
|
else return true;
|
|||
|
}
|
|||
|
|
|||
|
public int estAligne(int X, int Y, int colonneChoisie, int positionPion){
|
|||
|
int puissance4 = 0;
|
|||
|
boolean ok = true;
|
|||
|
int colonneTestee = colonneChoisie, ligneTestee = positionPion;
|
|||
|
|
|||
|
// Verification à l'écran que nous nous trouvons au bon endroit
|
|||
|
//System.out.println("X: " + X + " Y: " + Y + " Colonne choisie: " + colonneChoisie + " Position choisie: " + positionPion);
|
|||
|
|
|||
|
if(Y == 1){
|
|||
|
colonneTestee++;
|
|||
|
}
|
|||
|
else if(Y == 2){
|
|||
|
colonneTestee--;
|
|||
|
}
|
|||
|
else{
|
|||
|
// Rien
|
|||
|
}
|
|||
|
if(X == 1){
|
|||
|
ligneTestee++;
|
|||
|
}
|
|||
|
else if(X == 2){
|
|||
|
ligneTestee--;
|
|||
|
}
|
|||
|
else{
|
|||
|
// Rien
|
|||
|
}
|
|||
|
|
|||
|
if(colonneTestee < 0 || colonneTestee > nbreColonnes - 1){
|
|||
|
ok = false;
|
|||
|
}
|
|||
|
if(ligneTestee < 0 || ligneTestee > nbreLignes - 1){
|
|||
|
ok = false;
|
|||
|
}
|
|||
|
|
|||
|
//System.out.println("Debut des tests : " + ligneTestee);
|
|||
|
while(ok == true && grille[colonneTestee][ligneTestee].getCouleur().equals(grille[colonneChoisie][positionPion].getCouleur())){
|
|||
|
puissance4++;
|
|||
|
if(Y == 1){
|
|||
|
colonneTestee++;
|
|||
|
}
|
|||
|
else if(Y == 2){
|
|||
|
colonneTestee--;
|
|||
|
}
|
|||
|
else{
|
|||
|
// Rien
|
|||
|
}
|
|||
|
if(X == 1){
|
|||
|
ligneTestee++;
|
|||
|
}
|
|||
|
else if(X == 2){
|
|||
|
ligneTestee--;
|
|||
|
}
|
|||
|
else{
|
|||
|
// Rien
|
|||
|
}
|
|||
|
//System.out.println("Colonne : " + colonneTestee + ". Ligne : " + ligneTestee);
|
|||
|
if(colonneTestee < 0 || colonneTestee > nbreColonnes - 1){
|
|||
|
ok = false;
|
|||
|
}
|
|||
|
if(ligneTestee < 0 || ligneTestee > nbreLignes - 1){
|
|||
|
ok = false;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return puissance4;
|
|||
|
}
|
|||
|
|
|||
|
public int getPosition(int colonne)
|
|||
|
{
|
|||
|
return positions[colonne];
|
|||
|
}
|
|||
|
|
|||
|
public Vector getJoueurs(){
|
|||
|
return CollectionJoueurs;
|
|||
|
}
|
|||
|
|
|||
|
public void setAlternanceJoueur(){
|
|||
|
alternanceJoueur = !alternanceJoueur;
|
|||
|
}
|
|||
|
}
|