This commit is contained in:
Haïssous Kayyissa 2023-04-05 17:22:48 +02:00
commit dfc3a84cd3
4 changed files with 166 additions and 38 deletions

View File

@ -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<Integer> grille = new LinkedList<Integer>();
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<Integer> saisie = new LinkedList<Integer>();
saisie.addAll(this.saisie.getSelection());
for (int i=0;i<this.saisie.getSelection().size();i++){
this.circle.setColor(saisie.pop());
//TODO: coordonnées propres (encore)
canvas.drawCircle((i*this.getWidth()/5+this.getWidth()/5),this.getWidth()*58/40, this.getWidth()/12, this.circle);
}
// affichage des couleurs choisissables
//copie des couleurs dispos
LinkedList<Integer> couleurs = new LinkedList<Integer>();
couleurs.addAll(this.saisie.getChoix());
System.out.println(couleurs.size());
for (int i=0;i<this.saisie.getChoix().size();i++){
this.circle.setColor(couleurs.pop());
//TODO: coordonnées propres (encore)
canvas.drawCircle((i*this.getWidth()*2/13+this.getWidth()/8),this.getWidth()*689/420, this.getWidth()/15, this.circle);
}
//TODO: ajout des colonnes de notation
//TODO: ajout des boutons
//Test de bouton valider
this.circle.setColor(this.getResources().getColor(R.color.green));
canvas.drawCircle((this.getWidth()/2),this.getHeight()-this.getWidth()/9, this.getWidth()/10, this.circle);
}
//Change l'état de soumission à notation après qu'une combinaision ai été soumise puis inversement
public void changeState() {
if (this.saisie.getSizeSelection() == 4) {
//partie à décommenter pour acceder à la notation
/*this.state = !this.state;
if (this.state) {
this.saisie.setChoix(this.pionsAttaquant);
} else if (!this.state) {
this.saisie.setChoix(this.pionsDefenseur);
}*/
this.grille.addSoumission(this.saisie.getSelection());
this.saisie.initSelection(this.getResources().getColor(R.color.pionVide));
this.invalidate();
}
}
public void redraw(){
invalidate();
//ajoute une nouvelle couleur pour la séléction à soumettre
public void addChoix(int choix){
this.saisie.addSelection(choix);
this.invalidate();
}
//Créer les vues nécessaires pour le jeu
public void createViews(){
LinearLayout parent = new LinearLayout(this.context);
parent.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
parent.setOrientation(LinearLayout.HORIZONTAL);
}
//initialise les collections de pions
//initialise les collections de pions et remplie saisie et grille de pions vides
public void initpions(){
//on initialise les pions
//on créer une ligne de 4 pions gris représentants une ligne de pions vides
this.pionsPasPlaces = new LinkedList<Integer>();
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<Integer>();
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<Integer>();
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);

View File

@ -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<Integer> soumissions;
// notations est la liste des notes attribuées aux soumissions
private LinkedList<Integer> notations;
public Grille(){
@ -18,20 +22,42 @@ public class Grille {
this.notations=new LinkedList<Integer>();
}
public void addSoumission(Collection<Integer> newSub){
this.soumissions.addAll((this.soumissions.size()-4),newSub);
}
public void initGrille(Collection<Integer> SubToCopy){
for(int i=0;i<10;i++){
this.soumissions.addAll(SubToCopy);
// Méthode permettant d'ajouter une soumission
public void addSoumission(LinkedList<Integer> 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<Integer> newNot){
this.notations.addAll(newNot);
// Méthode qui permet d'initialiser la grille vide
public void initGrille(Collection<Integer> 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<Integer> 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<Integer> getSoumissions(){
return this.soumissions;
}

View File

@ -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<Integer> choix;
//selection est la liste des pions choisis pour une soumission ou une notation
private LinkedList<Integer> selection;
public Saisie(){
this.choix=new LinkedList<Integer>();
@ -22,22 +27,41 @@ public class Saisie {
// getters et setters
public void setChoix(Collection<Integer> 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<Integer> getChoix(){
return this.choix;
}
public void setSelection(Collection<Integer> 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<Integer> colorsSelected){
this.choix.removeAll(this.choix);
this.choix.addAll(colorsSelected);
}
public Collection<Integer> getSelection(){
public LinkedList<Integer> getSelection(){
return this.selection;
}

View File

@ -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<y && y<v.getWidth()*689/420+v.getWidth()/15){
if(v.getWidth()/8-v.getWidth()/15<x && x<v.getWidth()/8+v.getWidth()/15){
this.view.addChoix(0);
} else if(v.getWidth()*2/13+v.getWidth()/8-v.getWidth()/15<x && x<v.getWidth()*2/13+v.getWidth()/8+v.getWidth()/15){
this.view.addChoix(1);
} else if(2*v.getWidth()*2/13+v.getWidth()/8-v.getWidth()/15<x && x<2*v.getWidth()*2/13+v.getWidth()/8+v.getWidth()/15) {
this.view.addChoix(2);
} else if(3*v.getWidth()*2/13+v.getWidth()/8-v.getWidth()/15<x && x<3*v.getWidth()*2/13+v.getWidth()/8+v.getWidth()/15){
this.view.addChoix(3);
} else if(4*v.getWidth()*2/13+v.getWidth()/8-v.getWidth()/15<x && x<4*v.getWidth()*2/13+v.getWidth()/8+v.getWidth()/15) {
this.view.addChoix(4);
} else if(5*v.getWidth()*2/13+v.getWidth()/8-v.getWidth()/15<x && x<5*v.getWidth()*2/13+v.getWidth()/8+v.getWidth()/15){
this.view.addChoix(5);
}
// surveille si un bouton de controlle est cliqué (ici seule la soumission est gérée)
} else if (v.getHeight()-v.getWidth()/9-v.getWidth()/10<y && y<v.getHeight()-v.getWidth()/9+v.getWidth()/10){
this.view.changeState();
}
}
return true;
}
}