cours0708/G5a/Puissance4/fr/blankoworld/plateau/PlateauPuissance4.java

397 lines
10 KiB
Java
Raw Permalink Blame History

package fr.blankoworld.plateau;
import java.util.Vector;
/**
* @author Olivier DOSSMANN
*
*/
/**
* Classe plateau qui permet de creer un plateau de jeu
*/
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;
/**
*
* @param args - Arguments passes en parametre
*/
/**
* Methode principale MAIN
*/
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();
}
/**
* Initialisation des variables, des joueurs, de la grille, etc ...
*
*/
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;
}
}
/**
* Permet de relancer le jeu (prevu pour l'ajout supplementaire d'un menu)
*
*/
public void reinitialiser(){
lancer();
}
/**
* Affiche la grille de jeu
*
*/
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");
}
/**
* C'est ici que le jeu se deroule, que les appels sont faits, etc ...
* Tout est la !
*
*/
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.");
}
}
/**
*
* @param jUn - Joueur Un
* @param jDeux - Joueur Deux
* @return Joueur qui dois jouer
*/
/**
* On recupere le joueur qui doit jouer
*/
public Joueurs alterneJoueur(Joueurs jUn, Joueurs jDeux){
if (alternanceJoueur){
return jUn;
}
else{
return jDeux;
}
}
/**
*
* @param positionColonne - Position de la colonne choisie
* @param couleur - Couleur du pion pose
*/
/**
* Ajoute un pion dans la colonne choisie en donnant la couleur dudit pion
*/
public void ajoutPion(int positionColonne, String couleur){
Jeton nouveauPion = new Jeton(couleur);
int positionJeton = positions[positionColonne];
grille[positionColonne][positionJeton] = nouveauPion;
positions[positionColonne] ++;
}
/**
*
* @param colonneChoisie - Colonne que l'utilisateur a choisi
* @param positionPion - Position du pion dans ladite colonne
* @return Avons nous un gagnant ? Oui ou non ?
*/
/**
* Determine si le pion pose donne un jeu gagnant au joueur qui l'a pose ou pas
*/
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;
}
/**
*
* @param X - Valeur 0,1 ou 2. Avec 1 nous incrementons, avec 2 l'inverse, et avec 0 nous ne faisons rien
* @param Y - Idem que X
* @param colonneChoisie - Colonne de laquelle nous partons
* @param positionPion - position du pion de lequel nous partons
* @return Avons nous une ligne de puissance 4 ? Combien de pions alors ?
*/
/**
* Renvoie le nombre de pions de meme couleur alignes
*/
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;
}
/**
*
* @param colonne - Colonne choisise
* @return Position du pion dans la colonne
*/
/**
* Permet de recuperer la position du pion dans une colonne donnee
*/
public int getPosition(int colonne)
{
return positions[colonne];
}
/**
*
* @return Collection de joueurs
*/
/**
* On recupere une collection de joueurs sous forme de Vecteurs
*/
public Vector getJoueurs(){
return CollectionJoueurs;
}
/**
* Affirme que nous changeons de joueurs (ce qui n'inclue pas le fait que nous ayons a le recuperer !)
*
*/
public void setAlternanceJoueur(){
alternanceJoueur = !alternanceJoueur;
}
}