fix decalage notes et ajout bot, changements structures de donnes

This commit is contained in:
Haïssous Kayyissa 2023-04-06 23:42:37 +02:00
parent 402db64b6b
commit 9b08b28846
6 changed files with 98 additions and 69 deletions

View File

@ -12,6 +12,7 @@ public class HotSeatActivity extends Activity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(new GameView(this, new Saisie(), new Grille())); boolean bot = getIntent().getBooleanExtra("bot", false);
setContentView(new GameView(this, new Saisie(), new Grille(), bot));
} }
} }

View File

@ -23,29 +23,31 @@ public class MainActivity extends Activity {
mHotSeat.setOnClickListener(new View.OnClickListener() { mHotSeat.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
Intent tp1Intent = new Intent(MainActivity.this, HotSeatActivity.class); Intent HotSeat = new Intent(MainActivity.this, HotSeatActivity.class);
startActivity(tp1Intent); HotSeat.putExtra("bot", false);
startActivity(HotSeat);
} }
}); });
/*mORDI.setOnClickListener(new View.OnClickListener() { mORDI.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
Intent tp2Intent = new Intent(MainActivity.this, ORDI.class); Intent ordi = new Intent(MainActivity.this, HotSeatActivity.class);
startActivity(tp2Intent); ordi.putExtra("bot", true);
startActivity(ordi);
} }
});*/ });
mSettings.setOnClickListener(new View.OnClickListener() { mSettings.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
Intent tp3Intent = new Intent(MainActivity.this, SettingsActivity.class); Intent settings = new Intent(MainActivity.this, SettingsActivity.class);
startActivity(tp3Intent); startActivity(settings);
} }
}); });
/*mTP4.setOnClickListener(new View.OnClickListener() { /*mTP4.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
Intent tp4Intent = new Intent(MainActivity.this, TP4.class); Intent rules = new Intent(MainActivity.this, TP4.class);
startActivity(tp4Intent); startActivity(rules);
} }
});*/ });*/
} }

View File

@ -19,27 +19,26 @@ public class Bot {
private Integer pionVide; private Integer pionVide;
private Integer[] pionsNotation; private Integer[] pionsNotation;
public Bot(Collection<Integer> pionsAutorisés, Integer[] pionsNotation, Integer pionVide){ public Bot(Integer[] pionsAutorisés, Integer[] pionsNotation, Integer pionVide){
this.collectionWin = new Integer[4]; this.collectionWin = new Integer[4];
this.pionVide=pionVide; this.pionVide=pionVide;
this.pionsNotation=pionsNotation; this.pionsNotation=pionsNotation;
generationCombiWin(pionsAutorisés); generationCombiWin(pionsAutorisés);
} }
protected void generationCombiWin(Collection<Integer> pions){ protected void generationCombiWin(Integer[] pions){
Random rand = new Random(); Random rand = new Random();
int nbPions = pions.size(); int nbPions = pions.length;
Integer[] tabPions=(Integer[]) pions.toArray();
for (int i=0;i<4;i++){ for (int i=0;i<4;i++){
this.collectionWin[i]=tabPions[rand.nextInt(nbPions)]; this.collectionWin[i]=pions[rand.nextInt(nbPions)];
} }
} }
public Collection<Integer> notation(Integer[] soumission){ public Integer[] notation(Integer[] soumission){
Collection<Integer> note=new LinkedList<Integer>(); Integer[] note=new Integer[4];
for(int i=0; i<4;i++) { for(int i=0; i<4;i++) {
if (this.collectionWin[i] == soumission[i]) { if (this.collectionWin[i] == soumission[i]) {
note.add(this.pionsNotation[1]); note[i]=(this.pionsNotation[1]);
} }
} }
//On crée une copie de la combinaison gagnante pour la modifier et éviter la fausse répétition de pions blancs //On crée une copie de la combinaison gagnante pour la modifier et éviter la fausse répétition de pions blancs
@ -47,9 +46,9 @@ public class Bot {
for(int i=0; i<4;i++) { for(int i=0; i<4;i++) {
for (int y=0; y<4;y++) { for (int y=0; y<4;y++) {
if (i!=y){ if (i!=y){
if (this.collectionWin[y] == soumission[i]){ if (copyCombi[y] == soumission[i]){
note.add(this.pionsNotation[0]); note[i]=(copyCombi[0]);
this.collectionWin[y]=null; copyCombi[y]=null;
} }
} }
} }

View File

@ -13,20 +13,24 @@ import java.util.LinkedList;
public class GameView extends View { public class GameView extends View {
private Collection<Integer> pionsAttaquant; private Integer[] pionsAttaquant;
private Collection<Integer> pionsDefenseur; private Integer[] pionsDefenseur;
private Collection<Integer> pionsPasPlaces; private Integer pionVide;
private Saisie saisie; private Saisie saisie;
private Grille grille; private Grille grille;
private boolean bot;
private Bot theBot;
private Paint circle; private Paint circle;
private boolean state; private boolean state;
public GameView(Context context,Saisie saisie,Grille grille) { public GameView(Context context,Saisie saisie,Grille grille, boolean bot) {
super(context); super(context);
this.saisie=saisie; this.saisie=saisie;
this.grille=grille; this.grille=grille;
this.bot=bot;
initpions();
this.theBot=new Bot(this.pionsAttaquant, this.pionsDefenseur, this.pionVide);
this.setOnTouchListener(new TouchListener(this)); this.setOnTouchListener(new TouchListener(this));
//on initialise les collections de pions //on initialise les collections de pions
initpions();
//state indique true si le joueur soumet une combinaison ou false si elle est noté //state indique true si le joueur soumet une combinaison ou false si elle est noté
this.state=true; this.state=true;
this.circle = new Paint(); this.circle = new Paint();
@ -50,10 +54,9 @@ public class GameView extends View {
} }
// affichage de la zone de saisie // affichage de la zone de saisie
//copie de la zone de saisie //copie de la zone de saisie
LinkedList<Integer> saisie = new LinkedList<Integer>(); Integer[] saisie = this.saisie.getSelection();
saisie.addAll(this.saisie.getSelection()); for (int i=0;i<this.saisie.getSelection().length;i++){
for (int i=0;i<this.saisie.getSelection().size();i++){ this.circle.setColor(saisie[i]);
this.circle.setColor(saisie.pop());
//TODO: coordonnées propres (encore) //TODO: coordonnées propres (encore)
canvas.drawCircle((i*this.getWidth()/5+this.getWidth()/5),this.getHeight()-this.getHeight()*2/9, this.getWidth()/14, this.circle); canvas.drawCircle((i*this.getWidth()/5+this.getWidth()/5),this.getHeight()-this.getHeight()*2/9, this.getWidth()/14, this.circle);
} }
@ -96,17 +99,28 @@ public class GameView extends View {
//Change l'état de soumission à notation après qu'une combinaision ai été soumise puis inversement //Change l'état de soumission à notation après qu'une combinaision ai été soumise puis inversement
public void changeState() { public void changeState() {
if (this.saisie.getSizeSelection() == 4) { if(!this.bot) {
this.state = !this.state; if (!this.state) {
if (this.state) {
this.saisie.setChoix(this.pionsAttaquant); this.saisie.setChoix(this.pionsAttaquant);
this.grille.addNotation(this.saisie.getSelection()); this.grille.addNotation(this.saisie.getSelection());
} else if (!this.state) { this.saisie.initSelection(this.getResources().getColor(R.color.pionVide));
this.invalidate();
this.state = !this.state;
} else if (this.state && this.saisie.getSizeSelection() == 4) {
this.saisie.setChoix(this.pionsDefenseur); this.saisie.setChoix(this.pionsDefenseur);
this.grille.addSoumission(this.saisie.getSelection()); this.grille.addSoumission(this.saisie.getSelection());
this.saisie.initSelection(this.getResources().getColor(R.color.pionVide));
this.invalidate();
this.state = !this.state;
} }
} else if (this.state && this.saisie.getSizeSelection() == 4) {
this.saisie.setChoix(this.pionsDefenseur);
this.grille.addSoumission(this.saisie.getSelection());
this.saisie.initSelection(this.getResources().getColor(R.color.pionVide)); this.saisie.initSelection(this.getResources().getColor(R.color.pionVide));
//On fait noter la combinaison au Bot
this.grille.addNotation(this.theBot.notation((this.saisie.getSelection())));
this.invalidate(); this.invalidate();
} }
} }
@ -126,7 +140,6 @@ public class GameView extends View {
}*/ }*/
public void clearChoix() { public void clearChoix() {
this.saisie.getSelection().clear();
this.saisie.initSelection(R.color.pionVide); this.saisie.initSelection(R.color.pionVide);
this.invalidate(); this.invalidate();
} }
@ -145,30 +158,27 @@ public class GameView extends View {
public void initpions(){ public void initpions(){
//on initialise les pions //on initialise les pions
//on créer une ligne de 4 pions gris représentants une ligne de pions vides //on créer une ligne de 4 pions gris représentants une ligne de pions vides
this.pionsPasPlaces = new LinkedList<Integer>(); this.pionVide = this.getResources().getColor(R.color.grey);
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 //Le défenseur a des pions noirs et blancs
this.pionsDefenseur = new LinkedList<Integer>(); this.pionsDefenseur = new Integer[2];
this.pionsDefenseur.add(this.getResources().getColor(R.color.white)); this.pionsDefenseur[0]=this.getResources().getColor(R.color.white);
this.pionsDefenseur.add(this.getResources().getColor(R.color.black)); this.pionsDefenseur[1]=this.getResources().getColor(R.color.black);
//L'attaquant a des pions de couleurs //L'attaquant a des pions de couleurs
this.pionsAttaquant = new LinkedList<Integer>(); this.pionsAttaquant = new Integer[6];
this.pionsAttaquant.add(this.getResources().getColor(R.color.pink)); this.pionsAttaquant[0]=this.getResources().getColor(R.color.pink);
this.pionsAttaquant.add(this.getResources().getColor(R.color.purple)); this.pionsAttaquant[1]=this.getResources().getColor(R.color.purple);
this.pionsAttaquant.add(this.getResources().getColor(R.color.blue)); this.pionsAttaquant[2]=this.getResources().getColor(R.color.blue);
this.pionsAttaquant.add(this.getResources().getColor(R.color.green)); this.pionsAttaquant[3]=this.getResources().getColor(R.color.green);
this.pionsAttaquant.add(this.getResources().getColor(R.color.yellow)); this.pionsAttaquant[4]=this.getResources().getColor(R.color.yellow);
this.pionsAttaquant.add(this.getResources().getColor(R.color.white)); this.pionsAttaquant[5]=this.getResources().getColor(R.color.white);
// on inisialise la saisie // on inisialise la saisie
saisie.setChoix(this.pionsAttaquant); saisie.setChoix(this.pionsAttaquant);
saisie.initSelection(this.getResources().getColor(R.color.pionVide)); saisie.initSelection(this.getResources().getColor(R.color.pionVide));
// on rempli la grille de cases grises // on rempli la grille de cases grises
grille.initGrille(this.pionsPasPlaces); grille.initGrille(this.pionVide);
} }
} }

View File

@ -10,6 +10,7 @@ import java.util.LinkedList;
représente la grille de jeu à savoir la liste des soumissions ainsi que leur notation représente la grille de jeu à savoir la liste des soumissions ainsi que leur notation
*/ */
public class Grille { public class Grille {
private Integer pionVide;
//sizeSubs indique le nombre de soumissions dans la grille. Il permet de limiter ce nombre à 10 //sizeSubs indique le nombre de soumissions dans la grille. Il permet de limiter ce nombre à 10
private int sizeSubs; private int sizeSubs;
// soumission représente la liste des soumissions réalisées ainsi que des cases grises pour compléter la grille // soumission représente la liste des soumissions réalisées ainsi que des cases grises pour compléter la grille
@ -23,38 +24,48 @@ public class Grille {
} }
// Méthode permettant d'ajouter une soumission // Méthode permettant d'ajouter une soumission
public void addSoumission(LinkedList<Integer> newSub){ public void addSoumission(Integer[] newSub){
//le nombre de soumissions ne doit pas dépasser 10 //le nombre de soumissions ne doit pas dépasser 10
if (this.sizeSubs<10) { if (this.sizeSubs<10) {
for (int i=0; i<4; i++) { for (int i=0; i<4; i++) {
//On retire une ligne vide en haut pour remonter l'affichage //On retire une ligne vide en haut pour remonter l'affichage
this.soumissions.remove(0); this.soumissions.remove(0);
this.notations.remove(0);
//On ajoute ensuite une deriere ligne qui correspond à la nouvelle soumission //On ajoute ensuite une deriere ligne qui correspond à la nouvelle soumission
this.soumissions.addLast(newSub.poll()); this.soumissions.addLast(newSub[i]);
//Et une ligne vide pour les notations
this.notations.addLast(this.pionVide);
} }
this.sizeSubs += 1; this.sizeSubs += 1;
} }
} }
// Méthode qui permet d'initialiser la grille vide // Méthode qui permet d'initialiser la grille vide
public void initGrille(Collection<Integer> SubToCopy){ public void initGrille(Integer pionVide){
this.pionVide=pionVide;
//On réécupère une ligne de la couleur qui correspond à l'absence de pion et on remplit la grille avec (soumissions et notations //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++){ for(int i=0;i<10;i++){
this.soumissions.addAll(SubToCopy); for(int y=0;y<4;y++) {
this.notations.addAll(SubToCopy); this.soumissions.add(pionVide);
this.notations.add(pionVide);
}
} }
// Au début il n'y a pas de soumission // Au début il n'y a pas de soumission
this.sizeSubs=0; this.sizeSubs=0;
} }
// Méthode qui permet d'ajouter des notations comme pour les soumissions // Méthode qui permet d'ajouter des notations comme pour les soumissions
public void addNotation(LinkedList<Integer> newNot){ public void addNotation(Integer[] newNot){
for (int i=0; i<4; i++) { for (int i=0; i<4; i++) {
//On retire une ligne vide en haut pour remonter l'affichage //On retire la derniere ligne vide
this.notations.remove(0); this.notations.removeLast();
//On ajoute ensuite une deriere ligne qui correspond à la nouvelle soumission
this.notations.addLast(newNot.poll());
} }
for (int i=0; i<4; i++) {
//On ajoute ensuite une deriere ligne qui correspond à la nouvelle note
this.notations.addLast(newNot[i]);
}
} }
//getters des soumissions et notations //getters des soumissions et notations

View File

@ -28,20 +28,20 @@ public class Saisie {
// getters et setters // getters et setters
//récupère la couleur d'un pion vide pour remplir la zone de saisie avec //récupère la couleur d'un pion vide pour remplir la zone de saisie avec
public void initSelection(Integer chosenColors){ public void initSelection(Integer pionVide){
this.selection.removeAll(this.selection); this.selection.removeAll(this.selection);
for (int i=0;i<4;i++){ for (int i=0;i<4;i++){
this.selection.add(chosenColors); this.selection.add(pionVide);
} }
//au début la zone de séléction est vide //au début la zone de séléction est vide
this.sizeSelection=0; this.sizeSelection=0;
} }
//addSelection permet d'ajouter un pion à la zone de saisie //addSelection permet d'ajouter un pion à la zone de saisie
public void addSelection(Integer chosenColors){ public void addSelection(int indexcolor){
//On vérifie qu'il n'y a pas déjà 4 pions //On vérifie qu'il n'y a pas déjà 4 pions
if (this.sizeSelection<4){ if (this.sizeSelection<4){
this.selection.set(this.sizeSelection,this.choix.get(chosenColors)); this.selection.set(this.sizeSelection,this.choix.get(indexcolor));
this.sizeSelection+=1; this.sizeSelection+=1;
} }
@ -63,13 +63,19 @@ public class Saisie {
} }
//Méthode qui permet depuis GameView de changer la liste des choix de couleur en fonction de l'état de la partie //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){ public void setChoix(Integer[] colorsSelected){
this.choix.removeAll(this.choix); this.choix.removeAll(this.choix);
this.choix.addAll(colorsSelected); for (int i=0;i<colorsSelected.length;i++){
this.choix.add(colorsSelected[i]);
}
} }
public LinkedList<Integer> getSelection(){ public Integer[] getSelection(){
return this.selection; Integer[] selectiontab=new Integer[4];
for (int i=0;i<this.selection.size();i++){
selectiontab[i]=this.selection.get(i);
}
return selectiontab;
} }
} }