Commit 8ef40e67 authored by theray1's avatar theray1
Browse files

bug fix dans contient

parent 20fae96d
......@@ -6,19 +6,18 @@ public class Case{
protected int colonne;
private boolean acquise;
private Couleur couleur;
public boolean estAcquise() {
return this.acquise;
}
public Case(int i, int j) {
this.ligne = i;
this.colonne = j;
this.acquise = false;
this.setCouleur(Couleur.A);
}
public boolean estAcquise() {
return this.acquise;
}
public boolean caseColoriee(){
return this.couleur != Couleur.A;
......
......@@ -7,8 +7,8 @@ public class Main {
plateau.afficherPlateau();
System.out.println(plateau.getArbrePlateau().getRoot().getV1().getV2().getRegionSuperieure());
Case temp = plateau.getArbrePlateau().rechercheCase(1,4);
//System.out.println(plateau.getArbrePlateau().getRoot().getV1().getV2().getRegionSuperieure());
Case temp = plateau.getArbrePlateau().rechercheCase(2,20);
Case[] cases = plateau.voisins(temp);
......@@ -16,24 +16,6 @@ public class Main {
plateau.colorierCase(cases[i], Couleur.B);
}
/*Case temp1 = plateau.getArbrePlateau().rechercheCase(4,4);
Case[] cases1 = plateau.voisins(temp1);
for(int i = 0; i < cases.length; i++) {
plateau.colorierCase(cases1[i], Couleur.B);
}
Case temp2 = plateau.getArbrePlateau().rechercheCase(1,4);
Case[] cases2 = plateau.voisins(temp2);
for(int i = 0; i < cases.length; i++) {
plateau.colorierCase(cases2[i], Couleur.R);
}*/
plateau.afficherPlateau();
}
}
......@@ -7,15 +7,6 @@ public class PetiteRegion extends Region{
//3 4 5
//0 1 2
public Case[] getCases() {
return cases;
}
public void setCases(Case[] cases) {
this.cases = cases;
}
public PetiteRegion(Case basGauche, Case hautDroite, Case[][] cases) {
super(basGauche, hautDroite);
// TODO Auto-generated constructor stub
......@@ -29,10 +20,19 @@ public class PetiteRegion extends Region{
}
public void acquerir() {
for(int i = 9; i < 9; i++) {
for(int i = 0; i < 9; i++) {
cases[i].acquerir();
}
}
//GETTERS SETTERS
public Case[] getCases() {
return cases;
}
public void setCases(Case[] cases) {
this.cases = cases;
}
}
......@@ -42,6 +42,7 @@ public class Plateau {
this.matrice[i] = new Case[longueur];//Le plateau est un carré, donc la longueur est égale à la hauteur
for (int j = 0; j < longueur; j++) {
this.matrice[i][j] = new Case(i,j);
System.out.println(i + "; " + j);
}
}
......@@ -50,33 +51,16 @@ public class Plateau {
this.arbrePlateau.intialiserDepuisMatrice(this.matrice);
}
public void colorierCase(Case c, Couleur couleur) {
c.setCouleur(couleur);
QuadtreeNode temp = this.arbrePlateau.recherchePetiteRegion(c.colonne, c.ligne);
temp.updateColoriee();
}
//retourne un tableau de 9 cases. Si la case c passée en paramètre se trouve en bord du plateau, certains éléments de tableau retourné auront la valeur null
public Case[] voisins(Case c){
/*Case[] lambda = null;
int x = 0;
Case a = null;
if (c.ligne > 0 && c.ligne < this.longueur - 1 && c.colonne > 0 && c.colonne < this.longueur - 1){
//TODO : gérer les cases aux extrêmités du plateau
for (int i = c.ligne - 1; i <= c.ligne + 1; i++){
for (int j = c.colonne - 1; j <= c.colonne + 1; j++){
a.ligne = i;
a.colonne = j;
lambda[x] = a;
x++;
}
}
}
return lambda;
this.cases = new Case[9];
this.cases[0] = basGauche;
for(int caseIterator = 1; caseIterator < 9; caseIterator ++) {
this.cases[caseIterator] = cases[basGauche.ligne + caseIterator/3][basGauche.colonne + caseIterator%3];
}
*/
Case[] casesVoisines = new Case[9];
......@@ -116,8 +100,7 @@ public class Plateau {
return newCases;
}
public void colorierCasesBrave(Case c, Joueur player){
Case[] voisinage = this.voisins(c);
colorierCase(c, player.couleur);
......@@ -128,15 +111,13 @@ public class Plateau {
}
}
public void colorierCasesTemeraire(Case c, Joueur player){
public void colorierCasesTemeraire(Case c, Joueur joueur){
Case[] voisinage = this.voisins(c);
colorierCase(c, player.couleur);
colorierCase(c, joueur.couleur);
int check = 0;
QuadtreeNode node = this.arbrePlateau.recherchePetiteRegion(c.ligne, c.colonne);
PetiteRegion pregion = (PetiteRegion) node.getRegion();
QuadtreeNode pregionNode = this.arbrePlateau.recherchePetiteRegion(c.ligne, c.colonne);
PetiteRegion pregion = (PetiteRegion) pregionNode.getRegion();
Case[] reg = pregion.getCases();
......@@ -147,40 +128,57 @@ public class Plateau {
}
if (check == 9){ // si toute la petite région est colorée
for (Case alpha : reg){
colorierCase(alpha, player.couleur);
colorierCase(alpha, joueur.couleur);
}
pregion.acquerir();
}
for (Case x : voisinage){
if (x.caseColoriee() && !(x.estAcquise())){
colorierCase(x, player.couleur);
colorierCase(x, joueur.couleur);
}
}
if (pregion.estAcquise()) {
ReglesQuatreEtCinq(node, player);
ReglesQuatreEtCinq(pregionNode, joueur);
}
}
private void ReglesQuatreEtCinq(QuadtreeNode reg, Joueur player) {
private void ReglesQuatreEtCinq(QuadtreeNode reg, Joueur joueur) {
QuadtreeNode regsup = reg.getRegionSuperieure();
int compteurRegionsAcquises = 0;
if(regsup != null && regsup.getRegion().estColoriee()) {
int compteurRegionsAcquises = 0;
// A vérifier
if(regsup.getV1().getRegion().estAcquise()) {compteurRegionsAcquises++;}
if(regsup.getV2().getRegion().estAcquise()) {compteurRegionsAcquises++;}
if(regsup.getV3().getRegion().estAcquise()) {compteurRegionsAcquises++;}
}
if(regsup.getV4().getRegion().estAcquise()) {compteurRegionsAcquises++;}
public void colorierCase(Case c, Couleur couleur) {
c.setCouleur(couleur);
QuadtreeNode temp = this.arbrePlateau.recherchePetiteRegion(c.colonne, c.ligne);
if(compteurRegionsAcquises >= 2) {
colorierRegion(joueur.couleur, regsup);
}
if(compteurRegionsAcquises == 1) {
Couleur couleurAdversaire = joueur.couleur == Couleur.B ? Couleur.R : Couleur.B;
colorierRegion(couleurAdversaire, regsup);
}
}
temp.updateColoriee();
}
private void colorierRegion(Couleur couleur, QuadtreeNode regsup) {
// TODO Auto-generated method stub
}
public void afficherPlateau() {
for(int i = 0; i < this.matrice.length; i++) {
for(int j = 0; j < this.matrice[i].length; j++) {
......@@ -190,6 +188,8 @@ public class Plateau {
}
}
//GETTERS SETTERS
public Quadtree getArbrePlateau() {
return arbrePlateau;
}
......
......@@ -33,6 +33,8 @@ public class Quadtree {
}
//GETTERS SETTERS
public QuadtreeNode getRoot() {
// TODO Auto-generated method stub
return this.root;
......
......@@ -22,7 +22,6 @@ public class QuadtreeNode {
& this.v4 == null;
}
public Case rechercheCase(int iCaseRecherchee, int jCaseRecherchee) {
//TODO : recherche d'une case du plateau dans le quadtree
......@@ -31,9 +30,25 @@ public class QuadtreeNode {
PetiteRegion pregion = (PetiteRegion) this.region;
Case[] cases = pregion.getCases();
int indice = 3*(iCaseRecherchee-pregion.getBasGauche().ligne)
+ jCaseRecherchee-pregion.getBasGauche().colonne;
for(int i = 0; i < cases.length; i++) {
System.out.println(cases[i].ligne + "; " + cases[i].colonne);
}
System.out.println("case bas gauche : " + pregion.getBasGauche().ligne + "; " + pregion.getBasGauche().colonne);
int indice = 3*(iCaseRecherchee-pregion.getBasGauche().ligne) + jCaseRecherchee-pregion.getBasGauche().colonne;
System.out.println("iCaseRecherchee : " + iCaseRecherchee);
System.out.println("jCaseRecherchee : " + jCaseRecherchee);
System.out.println("pregion.getBasGauche().ligne : " + pregion.getBasGauche().ligne);
System.out.println("pregion.getBasGauche().colonne : " + (pregion.getBasGauche().colonne));
System.out.println("3*(iCaseRecherchee-pregion.getBasGauche().ligne) : " + 3*(iCaseRecherchee-pregion.getBasGauche().ligne));
System.out.println("jCaseRecherchee-pregion.getBasGauche().colonne : " + (jCaseRecherchee-pregion.getBasGauche().colonne));
return cases[indice];
}
} else {
if(!(v1==null)){
......@@ -98,6 +113,73 @@ public class QuadtreeNode {
return null;
}
public void acquerir(Region r) {
// TODO Auto-generated method stub
if(this.region == r) {
_acquerir(r);
} else {
if(this.v1.region.contient(r.getBasGauche().colonne, r.getBasGauche().ligne) && this.v1.region.contient(r.getHautDroite().colonne, r.getHautDroite().ligne)) {
v1.acquerir(r);
}
if(this.v2.region.contient(r.getBasGauche().colonne, r.getBasGauche().ligne) && this.v2.region.contient(r.getHautDroite().colonne, r.getHautDroite().ligne)) {
v2.acquerir(r);
}
if(this.v3.region.contient(r.getBasGauche().colonne, r.getBasGauche().ligne) && this.v3.region.contient(r.getHautDroite().colonne, r.getHautDroite().ligne)) {
v3.acquerir(r);
}
if(this.v4.region.contient(r.getBasGauche().colonne, r.getBasGauche().ligne) && this.v4.region.contient(r.getHautDroite().colonne, r.getHautDroite().ligne)) {
v4.acquerir(r);
}
}
}
private void _acquerir(Region r) {
if(this.region.getLongueur() == 3) {
((PetiteRegion) r).acquerir();
} else {
this.region.acquerir();
v1._acquerir(r);
v2._acquerir(r);
v3._acquerir(r);
v4._acquerir(r);
}
}
public void updateColoriee() {
if(this.region instanceof PetiteRegion) {
Case[] cases = ((PetiteRegion) this.region).getCases();
this.region.setColoriee(true);
int i = 0;
boolean caseNonColorieeTrouvee = false;
while(i < 9 && !caseNonColorieeTrouvee) {
if(!cases[i].caseColoriee()) {
this.region.setColoriee(false);
}
i++;
}
}
if(this.region.estColoriee()) {
this.__updateColoriee();
}
}
private void __updateColoriee() {
if(this.regionSuperieure != null) {
if(this.regionSuperieure.v1.region.estColoriee()
&& this.regionSuperieure.v2.region.estColoriee()
&& this.regionSuperieure.v3.region.estColoriee()
&& this.regionSuperieure.v4.region.estColoriee()) {
this.regionSuperieure.region.setColoriee(true);
this.regionSuperieure.__updateColoriee();
}
}
}
public void initialiserDepuisMatrice(Case[][] cases, int longueur, int iBasGauche, int jBasGauche) {
// TODO Auto-generated method stub
......@@ -112,20 +194,32 @@ public class QuadtreeNode {
this.v1.initialiserDepuisMatrice(cases, longueur/2, iBasGauche + longueur/2, jBasGauche); //Recursion sur la région en haut à gauche
this.v1.regionSuperieure = this;
System.out.println("v1 : " + (iBasGauche + longueur/2) + "; " + jBasGauche);
this.v2 = new QuadtreeNode();
this.v2.initialiserDepuisMatrice(cases, longueur/2, iBasGauche + longueur/2, jBasGauche + longueur/2); //Recursion sur la région en haut à droite
this.v2.regionSuperieure = this;
System.out.println("v2 : " + (iBasGauche + longueur/2) + "; " + (jBasGauche + longueur/2));
this.v3 = new QuadtreeNode();
this.v3.initialiserDepuisMatrice(cases, longueur/2, iBasGauche, jBasGauche + longueur/2); //Recursion sur la région en bas à droite
this.v3.regionSuperieure = this;
System.out.println("v3 : " + (iBasGauche) + "; " + (jBasGauche + longueur/2));
this.v4 = new QuadtreeNode();
this.v4.initialiserDepuisMatrice(cases, longueur/2, iBasGauche, jBasGauche); // Recusrion sur la région en bas à gauche
this.v4.regionSuperieure = this;
System.out.println("v4 : " + (iBasGauche) + "; " + (jBasGauche));
}
}
//GETTERS SETTERS
public QuadtreeNode getV1() {
return v1;
}
......@@ -173,69 +267,9 @@ public class QuadtreeNode {
public void setRegionSuperieure(QuadtreeNode regionSuperieure) {
this.regionSuperieure = regionSuperieure;
}
public void acquerir(Region r) {
// TODO Auto-generated method stub
if(this.region == r) {
_acquerir(r);
} else {
if(this.v1.region.contient(r.getBasGauche().colonne, r.getBasGauche().ligne) && this.v1.region.contient(r.getHautDroite().colonne, r.getHautDroite().ligne)) {
v1.acquerir(r);
}
if(this.v2.region.contient(r.getBasGauche().colonne, r.getBasGauche().ligne) && this.v2.region.contient(r.getHautDroite().colonne, r.getHautDroite().ligne)) {
v2.acquerir(r);
}
if(this.v3.region.contient(r.getBasGauche().colonne, r.getBasGauche().ligne) && this.v3.region.contient(r.getHautDroite().colonne, r.getHautDroite().ligne)) {
v3.acquerir(r);
}
if(this.v4.region.contient(r.getBasGauche().colonne, r.getBasGauche().ligne) && this.v4.region.contient(r.getHautDroite().colonne, r.getHautDroite().ligne)) {
v4.acquerir(r);
}
}
}
private void _acquerir(Region r) {
if(this.region.getLongueur() == 3) {
((PetiteRegion) r).acquerir();
} else {
this.region.acquerir();
v1._acquerir(r);
v2._acquerir(r);
v3._acquerir(r);
v4._acquerir(r);
}
}
public void updateColoriee() {
if(this.region instanceof PetiteRegion) {
Case[] cases = ((PetiteRegion) this.region).getCases();
this.region.setColoriee(true);
for(int i = 0; i < 9; i++) {//pour opti cet algo utiliser un while()
if(!cases[i].caseColoriee()) {
this.region.setColoriee(false);
}
}
}
if(this.region.estColoriee()) {
this.__update();
}
}
private void __update() {
if(this.regionSuperieure != null) {
if(this.regionSuperieure.v1.region.estColoriee()
&& this.regionSuperieure.v2.region.estColoriee()
&& this.regionSuperieure.v3.region.estColoriee()
&& this.regionSuperieure.v4.region.estColoriee()) {
this.regionSuperieure.region.setColoriee(true);
this.regionSuperieure.__update();
}
}
}
}
......@@ -8,10 +8,6 @@ public class Region {
private boolean acquise;
private boolean coloriee;
public int getLongueur(){
return (this.getBasGauche().colonne - this.getHautDroite().colonne + 1);// rajout de +1 car entre la région entre les colonnes 1 et 3 est de longueur 3, mais 3-1 = 2
}
public Region(Case basGauche, Case hautDroite) {
this.basGauche = basGauche;
this.hautDroite = hautDroite;
......@@ -20,6 +16,12 @@ public class Region {
this.coloriee = false;
}
//GETTERS SETTERS
public int getLongueur(){
return (this.getBasGauche().colonne - this.getHautDroite().colonne + 1);// rajout de +1 car entre la région entre les colonnes 1 et 3 est de longueur 3, mais 3-1 = 2
}
public void setHautDroite(Case hautDroite) {
this.hautDroite = hautDroite;
}
......@@ -28,11 +30,6 @@ public class Region {
this.basGauche = basGauche;
}
public boolean estAcquise() {
// TODO Auto-generated method stub
return acquise;
}
public Case getBasGauche() {
// TODO Auto-generated method stub
return this.basGauche;
......@@ -45,12 +42,17 @@ public class Region {
public boolean contient(int iCaseRecherchee, int jCaseRecherchee) {
// TODO Auto-generated method stub
return (iCaseRecherchee >= this.basGauche.colonne
&& iCaseRecherchee <= this.hautDroite.colonne
&& jCaseRecherchee >= this.basGauche.ligne
&& jCaseRecherchee <= this.hautDroite.ligne);
return (iCaseRecherchee >= this.basGauche.ligne
&& iCaseRecherchee <= this.hautDroite.ligne
&& jCaseRecherchee >= this.basGauche.colonne
&& jCaseRecherchee <= this.hautDroite.colonne);
}
public boolean estAcquise() {
// TODO Auto-generated method stub
return acquise;
}
public void setAcquise(boolean acquise) {
this.acquise = acquise;
}
......@@ -59,7 +61,6 @@ public class Region {
this.acquise = true;
}
public boolean estColoriee() {
return coloriee;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment