diff --git a/app/src/main/java/com/example/mastermind/game/GameView.java b/app/src/main/java/com/example/mastermind/game/GameView.java index 029c66b..21110d6 100644 --- a/app/src/main/java/com/example/mastermind/game/GameView.java +++ b/app/src/main/java/com/example/mastermind/game/GameView.java @@ -27,15 +27,16 @@ public class GameView extends View { private Saisie saisie; private Grille grille; private Paint circle; - private Context context; + private boolean state; public GameView(Context context,Saisie saisie,Grille grille) { super(context); - this.context=context; this.saisie=saisie; this.grille=grille; + this.setOnTouchListener(new TouchListener(this)); //on initialise les collections de pions initpions(); - createViews(); + //state indique true si le joueur soumet une combinaison ou false si elle est noté + this.state=true; this.circle = new Paint(); } @@ -43,45 +44,81 @@ public class GameView extends View { protected void onDraw(Canvas canvas){ super.onDraw(canvas); this.setBackgroundColor(this.getResources().getColor(R.color.grey)); + //affichage des anciennes soumissions + //copie des soumissions LinkedList grille = new LinkedList(); grille.addAll(this.grille.getSoumissions()); - System.out.println(grille); - System.out.println(this.grille.getSoumissions()); + System.out.println(grille.size()); for (int y=0; y<10;y++) { for (int x=0;x<4;x++) { this.circle.setColor(grille.pop()); //TODO: coordonnées propres - canvas.drawCircle((x*130+350),(y*130+100), 60, this.circle); - System.out.println("rond grille"); + canvas.drawCircle(( x*this.getWidth()/8+(this.getWidth()*21/68)),(y*this.getWidth()/8+this.getWidth()/10), this.getWidth()/17, this.circle); } } + // affichage de la zone de saisie + //copie de la zone de saisie + LinkedList saisie = new LinkedList(); + saisie.addAll(this.saisie.getSelection()); + for (int i=0;i couleurs = new LinkedList(); + couleurs.addAll(this.saisie.getChoix()); + System.out.println(couleurs.size()); + for (int i=0;i(); for (int i=0;i<4;i++){ this.pionsPasPlaces.add(this.getResources().getColor(R.color.pionVide)); } + //Le défenseur a des pions noirs et blancs this.pionsDefenseur = new LinkedList(); this.pionsDefenseur.add(this.getResources().getColor(R.color.white)); this.pionsDefenseur.add(this.getResources().getColor(R.color.black)); + //L'attaquant a des pions de couleurs this.pionsAttaquant = new LinkedList(); this.pionsAttaquant.add(this.getResources().getColor(R.color.pink)); this.pionsAttaquant.add(this.getResources().getColor(R.color.purple)); @@ -91,8 +128,8 @@ public class GameView extends View { this.pionsAttaquant.add(this.getResources().getColor(R.color.white)); // on inisialise la saisie - saisie.setSelection(this.pionsAttaquant); - saisie.setChoix(this.pionsPasPlaces); + saisie.setChoix(this.pionsAttaquant); + saisie.initSelection(this.getResources().getColor(R.color.pionVide)); // on rempli la grille de cases grises grille.initGrille(this.pionsPasPlaces); diff --git a/app/src/main/java/com/example/mastermind/game/Grille.java b/app/src/main/java/com/example/mastermind/game/Grille.java index a4d4159..a40dfed 100644 --- a/app/src/main/java/com/example/mastermind/game/Grille.java +++ b/app/src/main/java/com/example/mastermind/game/Grille.java @@ -10,7 +10,11 @@ import java.util.LinkedList; représente la grille de jeu à savoir la liste des soumissions ainsi que leur notation */ public class Grille { + //sizeSubs indique le nombre de soumissions dans la grille. Il permet de limiter ce nombre à 10 + private int sizeSubs; + // soumission représente la liste des soumissions réalisées ainsi que des cases grises pour compléter la grille private LinkedList soumissions; + // notations est la liste des notes attribuées aux soumissions private LinkedList notations; public Grille(){ @@ -18,20 +22,42 @@ public class Grille { this.notations=new LinkedList(); } - public void addSoumission(Collection newSub){ - this.soumissions.addAll((this.soumissions.size()-4),newSub); - } - - public void initGrille(Collection SubToCopy){ - for(int i=0;i<10;i++){ - this.soumissions.addAll(SubToCopy); + // Méthode permettant d'ajouter une soumission + public void addSoumission(LinkedList newSub){ + //le nombre de soumissions ne doit pas dépasser 10 + if (this.sizeSubs<10) { + for (int i=0; i<4; i++) { + //On retire une ligne vide en haut pour remonter l'affichage + this.soumissions.remove(0); + //On ajoute ensuite une deriere ligne qui correspond à la nouvelle soumission + this.soumissions.addLast(newSub.poll()); + } + this.sizeSubs += 1; } } - public void addNotation(Collection newNot){ - this.notations.addAll(newNot); + // Méthode qui permet d'initialiser la grille vide + public void initGrille(Collection SubToCopy){ + //On réécupère une ligne de la couleur qui correspond à l'absence de pion et on remplit la grille avec (soumissions et notations + for(int i=0;i<10;i++){ + this.soumissions.addAll(SubToCopy); + this.notations.addAll(SubToCopy); + } + // Au début il n'y a pas de soumission + this.sizeSubs=0; } + // Méthode qui permet d'ajouter des notations comme pour les soumissions + public void addNotation(LinkedList newNot){ + for (int i=0; i<4; i++) { + //On retire une ligne vide en haut pour remonter l'affichage + this.notations.remove(0); + //On ajoute ensuite une deriere ligne qui correspond à la nouvelle soumission + this.notations.addLast(newNot.poll()); + } + } + + //getters des soumissions et notations public Collection getSoumissions(){ return this.soumissions; } diff --git a/app/src/main/java/com/example/mastermind/game/Saisie.java b/app/src/main/java/com/example/mastermind/game/Saisie.java index 1b49854..3bf845c 100644 --- a/app/src/main/java/com/example/mastermind/game/Saisie.java +++ b/app/src/main/java/com/example/mastermind/game/Saisie.java @@ -13,7 +13,12 @@ import java.util.LinkedList; */ public class Saisie { + //sizeSelection est le nombre de pions dans la zone actuelle de saisie. + // Cela permet de limiter ce nombre à 4 et vérfier qu'il y en a 4 avant de soumettre + private int sizeSelection; + //choix est la liste des couleurs que l'on peut choisir (N&B pour la notation et couleuts pour les soumissions) private LinkedList choix; + //selection est la liste des pions choisis pour une soumission ou une notation private LinkedList selection; public Saisie(){ this.choix=new LinkedList(); @@ -22,22 +27,41 @@ public class Saisie { // getters et setters - public void setChoix(Collection chosenColors){ - this.choix.addAll(chosenColors); + //récupère la couleur d'un pion vide pour remplir la zone de saisie avec + public void initSelection(Integer chosenColors){ + this.selection.removeAll(this.selection); + for (int i=0;i<4;i++){ + this.selection.add(chosenColors); + } + //au début la zone de séléction est vide + this.sizeSelection=0; + } - public void setChoix(Integer chosenColors, int index){ - this.choix.set(index, chosenColors); + //addSelection permet d'ajouter un pion à la zone de saisie + public void addSelection(Integer chosenColors){ + //On vérifie qu'il n'y a pas déjà 4 pions + if (this.sizeSelection<4){ + this.selection.set(this.sizeSelection,this.choix.get(chosenColors)); + this.sizeSelection+=1; + } + + } + + public int getSizeSelection(){ + return this.sizeSelection; } public Collection getChoix(){ return this.choix; } - public void setSelection(Collection colorsSelected){ - this.selection.addAll(colorsSelected); + //Méthode qui permet depuis GameView de changer la liste des choix de couleur en fonction de l'état de la partie + public void setChoix(Collection colorsSelected){ + this.choix.removeAll(this.choix); + this.choix.addAll(colorsSelected); } - public Collection getSelection(){ + public LinkedList getSelection(){ return this.selection; } diff --git a/app/src/main/java/com/example/mastermind/game/TouchListener.java b/app/src/main/java/com/example/mastermind/game/TouchListener.java new file mode 100644 index 0000000..d4f1ac7 --- /dev/null +++ b/app/src/main/java/com/example/mastermind/game/TouchListener.java @@ -0,0 +1,41 @@ +package com.example.mastermind.game; + +import android.view.MotionEvent; +import android.view.View; + +public class TouchListener implements View.OnTouchListener{ + private GameView view; + public TouchListener(GameView view) { + this.view=view; + } + @Override + public boolean onTouch(View v, MotionEvent event) { + int action = event.getActionMasked(); + Float x = event.getX(); + Float y = event.getY(); + + if (action==MotionEvent.ACTION_UP) + { + //Surveille quel bouton de couleur est choisi + if (v.getWidth()*689/420-v.getWidth()/15