Compare commits

..

No commits in common. "master" and "miseEnPlaceBot" have entirely different histories.

26 changed files with 201 additions and 905 deletions

Binary file not shown.

View File

@ -14,7 +14,7 @@
android:theme="@style/Theme.MasterMind" android:theme="@style/Theme.MasterMind"
tools:targetApi="31"> tools:targetApi="31">
<activity <activity
android:name=".GameActivity" android:name=".HotSeatActivity"
android:exported="false" /> android:exported="false" />
<activity <activity
android:name=".SettingsActivity" android:name=".SettingsActivity"
@ -25,12 +25,6 @@
android:name="android.app.lib_name" android:name="android.app.lib_name"
android:value="" /> android:value="" />
</activity> </activity>
<activity
android:name=".RulesActivity"
android:exported="false"/>
<activity
android:name=".ChoiceCombi"
android:exported="false"/>
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
android:exported="true"> android:exported="true">

View File

@ -1,78 +0,0 @@
package com.example.mastermind;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import com.example.mastermind.game.GameView;
import com.example.mastermind.game.Saisie;
public class ChoiceCombi extends Activity implements SaisieActivity {
private Saisie saisie;
private Integer[] combiGagnante;
private Integer[] pions;
private boolean emptyPion;
private View view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int[] tab = getIntent().getIntArrayExtra("pions");
this.emptyPion = getIntent().getBooleanExtra("emptyPion", false);
if(emptyPion) {
this.pions=new Integer[7];
} else {
this.pions=new Integer[6];
}
for (int i=0;i<tab.length;i++) {
this.pions[i] = tab[i];
}
this.saisie=new Saisie();
this.saisie.initSelection(this.getResources().getColor(R.color.pionVide));
this.saisie.setChoix(this.pions);
this.view=new GameView(this,this,this.saisie, null);
this.view.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
setContentView(R.layout.activity_game);
LinearLayout linearLayout = findViewById(R.id.layout);
linearLayout.addView(this.view);
}
public void changeState(){
if(this.saisie.getSizeSelection()==4) {
Intent returnIntent = new Intent();
int[] tabpions;
if(emptyPion) {
tabpions=new int[7];
} else {
tabpions=new int[6];
}
for (int i=0;i<this.saisie.getSizeSelection();i++) {
tabpions[i] = this.saisie.getSelection()[i];
}
returnIntent.putExtra("choix", tabpions);
setResult(Activity.RESULT_OK, returnIntent);
finish();
}
}
public void addChoix(int choix){
this.saisie.addSelection(choix);
this.view.invalidate();
}
public void removePion() {
this.saisie.removeSelection(this.getResources().getColor(R.color.pionVide));
this.view.invalidate();
}
public void clearChoix() {
this.saisie.initSelection(this.getResources().getColor(R.color.pionVide));
this.view.invalidate();
}
public int getNbrPion() {
return this.saisie.getSizeChoix();
}
}

View File

@ -1,220 +0,0 @@
package com.example.mastermind;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.example.mastermind.end.EndView;
import com.example.mastermind.game.Bot;
import com.example.mastermind.game.GameView;
import com.example.mastermind.game.Grille;
import com.example.mastermind.game.Saisie;
import com.example.mastermind.game.TapListener;
public class GameActivity extends Activity implements SaisieActivity {
private Integer[] pionsAttaquant;
private Integer[] pionsDefenseur;
private Integer[] combiGagnante;
private Integer pionVide;
private Saisie saisie;
private Grille grille;
private boolean bot;
private Bot theBot;
private boolean emptyPion;
private boolean state;
private View view;
private LinearLayout rootView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.bot = getIntent().getBooleanExtra("bot", false);
this.emptyPion = getIntent().getBooleanExtra("pionVide", false);
this.state=true;
this.saisie=new Saisie();
this.grille=new Grille();
initpions();
if (this.bot){
this.theBot=new Bot(this.pionsAttaquant, this.pionsDefenseur, this.pionVide);
this.combiGagnante=this.theBot.getCollectionWin();
} else if(!this.bot){
Intent choiceCombi = new Intent(this, ChoiceCombi.class);
int[] tabpions;
if(emptyPion) {
tabpions=new int[7];
} else {
tabpions=new int[6];
}
for (int i=0;i<this.pionsAttaquant.length;i++) {
tabpions[i] = this.pionsAttaquant[i];
}
choiceCombi.putExtra("emptyPion", emptyPion);
choiceCombi.putExtra("pions", tabpions);
startActivityForResult(choiceCombi, 1);
}
this.view=new GameView(this,this,this.saisie, this.grille);
this.view.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
setContentView(R.layout.activity_game);
this.rootView = findViewById(R.id.layout);
this.rootView.addView(this.view);
this.rootView.setOnTouchListener(new TapListener(this));
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if(resultCode == Activity.RESULT_OK){
int[] tab = data.getIntArrayExtra("choix");
if(emptyPion) {
this.combiGagnante=new Integer[7];
} else {
this.combiGagnante=new Integer[6];
}
for (int i=0;i<tab.length;i++) {
this.combiGagnante[i] = tab[i];
}
}
if(resultCode == Activity.RESULT_CANCELED) {
this.finish();
}
}
}
public int getNbrPion() {
return this.saisie.getSizeChoix();
}
//Change l'état de soumission à notation après qu'une combinaision ai été soumise puis inversement
public void changeState() {
if(!this.bot) {
if (!this.state) {
this.saisie.setChoix(this.pionsAttaquant);
this.grille.addNotation(this.saisie.getSelection());
if(end()){return;}
this.saisie.initSelection(this.getResources().getColor(R.color.pionVide));
this.view.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.view.invalidate();
this.state = !this.state;
}
} else if (this.state && this.saisie.getSizeSelection() == 4) {
Integer[] combi = this.saisie.getSelection();
this.grille.addSoumission(combi);
this.saisie.initSelection(this.getResources().getColor(R.color.pionVide));
//On fait noter la combinaison au Bot
this.grille.addNotation(this.theBot.notation((combi)));
if(end()){return;}
this.view.invalidate();
}
}
//ajoute une nouvelle couleur pour la séléction à soumettre
public void addChoix(int choix){
this.saisie.addSelection(choix);
this.view.invalidate();
}
public void removePion() {
this.saisie.removeSelection(this.getResources().getColor(R.color.pionVide));
this.view.invalidate();
}
public void clearChoix() {
this.saisie.initSelection(this.getResources().getColor(R.color.pionVide));
this.view.invalidate();
}
public boolean end (){
Integer[] lastNotation = this.grille.getLastNotation();
int nbWin=0;
for (int i=0;i<4;i++){
if (lastNotation[i]==this.pionsDefenseur[1]){
nbWin++;
}
}
if(nbWin==4) {
System.out.println("WIN");
victoire(true);
return true;
} else if (this.grille.getSizeSubs()==10){
System.out.println("LOSE");
victoire(false);
return true;
} else {
return false;
}
}
public void victoire(boolean gagne){
for (int i=0;i<4;i++){
this.saisie.addSelection(this.combiGagnante[i]);
}
EndView lastview=new EndView(this, this.grille, this.combiGagnante, this.rootView);
this.view=lastview;
this.rootView.removeAllViews();
this.view.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
this.view.setBackgroundColor(this.getResources().getColor(R.color.grey));
this.rootView.addView(this.view);
TextView textView = new TextView(this);
textView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
textView.setGravity(Gravity.CENTER);
if (gagne){
textView.setText("Victoire de l'attaquant en "+this.grille.getSizeSubs()+" coups");
} else {
textView.setText("Victoire du défenseur");
}
this.rootView.addView(textView);
System.out.println(textView.getX() + " : " + textView.getY());
this.rootView.invalidate();
}
//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.pionVide = this.getResources().getColor(R.color.grey);
//Le défenseur a des pions noirs et blancs
this.pionsDefenseur = new Integer[2];
this.pionsDefenseur[0]=this.getResources().getColor(R.color.white);
this.pionsDefenseur[1]=this.getResources().getColor(R.color.black);
//L'attaquant a des pions de couleurs
if(emptyPion) {
this.pionsAttaquant = new Integer[7];
} else {
this.pionsAttaquant = new Integer[6];
}
this.pionsAttaquant[0]=this.getResources().getColor(R.color.pink);
this.pionsAttaquant[1]=this.getResources().getColor(R.color.purple);
this.pionsAttaquant[2]=this.getResources().getColor(R.color.blue);
this.pionsAttaquant[3]=this.getResources().getColor(R.color.green);
this.pionsAttaquant[4]=this.getResources().getColor(R.color.yellow);
this.pionsAttaquant[5]=this.getResources().getColor(R.color.white);
if(emptyPion) {
this.pionsAttaquant[6]=this.getResources().getColor(R.color.vide);
}
// on inisialise la saisie
this.saisie.setChoix(this.pionsAttaquant);
this.saisie.initSelection(this.getResources().getColor(R.color.pionVide));
// on rempli la grille de cases grises
this.grille.initGrille(this.pionVide);
}
}

View File

@ -0,0 +1,17 @@
package com.example.mastermind;
import android.app.Activity;
import android.os.Bundle;
import com.example.mastermind.game.GameView;
import com.example.mastermind.game.Grille;
import com.example.mastermind.game.Saisie;
public class HotSeatActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new GameView(this, new Saisie(), new Grille()));
}
}

View File

@ -10,8 +10,7 @@ public class MainActivity extends Activity {
private Button mHotSeat; private Button mHotSeat;
private Button mORDI; private Button mORDI;
private Button mSettings; private Button mSettings;
private Button mRules; //private Button mRules;
private boolean pionV;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -20,47 +19,34 @@ public class MainActivity extends Activity {
mHotSeat = findViewById(R.id.HotSeat); mHotSeat = findViewById(R.id.HotSeat);
mORDI = findViewById(R.id.ORDI); mORDI = findViewById(R.id.ORDI);
mSettings = findViewById(R.id.Settings); mSettings = findViewById(R.id.Settings);
mRules = findViewById(R.id.Rules); //mRules = findViewById(R.id.Rules);
mHotSeat.setOnClickListener(new View.OnClickListener() { mHotSeat.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
Intent HotSeat = new Intent(MainActivity.this, GameActivity.class); Intent tp1Intent = new Intent(MainActivity.this, HotSeatActivity.class);
HotSeat.putExtra("bot", false); startActivity(tp1Intent);
HotSeat.putExtra("pionVide", pionV);
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 ordi = new Intent(MainActivity.this, GameActivity.class); Intent tp2Intent = new Intent(MainActivity.this, ORDI.class);
ordi.putExtra("bot", true); startActivity(tp2Intent);
ordi.putExtra("pionVide", pionV);
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 settings = new Intent(MainActivity.this, SettingsActivity.class); Intent tp3Intent = new Intent(MainActivity.this, SettingsActivity.class);
startActivityForResult(settings, 2); startActivity(tp3Intent);
} }
}); });
mRules.setOnClickListener(new View.OnClickListener() { /*mTP4.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
Intent rules = new Intent(MainActivity.this, RulesActivity.class); Intent tp4Intent = new Intent(MainActivity.this, TP4.class);
startActivity(rules); startActivity(tp4Intent);
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 2) {
pionV = data.getBooleanExtra("pionV", false);
} }
});*/
} }
} }

View File

@ -1,14 +0,0 @@
package com.example.mastermind;
import android.app.Activity;
import android.os.Bundle;
public class RulesActivity extends Activity {
@Override
protected void onCreate(Bundle saveInstanceState) {
super.onCreate(saveInstanceState);
setContentView(R.layout.activity_rules);
}
}

View File

@ -1,14 +0,0 @@
package com.example.mastermind;
public interface SaisieActivity {
public void addChoix(int index);
void changeState();
void removePion();
void clearChoix();
int getNbrPion();
}

View File

@ -1,44 +1,33 @@
package com.example.mastermind; package com.example.mastermind;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.Switch;
public class SettingsActivity extends Activity { import androidx.appcompat.app.ActionBar;
private Button mButton; import androidx.appcompat.app.AppCompatActivity;
private Switch mSwitch; import androidx.preference.PreferenceFragmentCompat;
private boolean pionV;
public class SettingsActivity extends AppCompatActivity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.settings_activity); setContentView(R.layout.settings_activity);
if (savedInstanceState == null) {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.settings, new SettingsFragment())
.commit();
}
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
mButton = findViewById(R.id.backButton); public static class SettingsFragment extends PreferenceFragmentCompat {
mSwitch = findViewById(R.id.switchPion);
mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override @Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
if(isChecked) { setPreferencesFromResource(R.xml.root_preferences, rootKey);
pionV = true;
} else {
pionV = false;
} }
} }
});
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("pionV", pionV);
setResult(2, intent);
finish();
}
});
}
} }

View File

@ -1,104 +0,0 @@
package com.example.mastermind.end;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;
import android.widget.LinearLayout;
import com.example.mastermind.GameActivity;
import com.example.mastermind.R;
import com.example.mastermind.SaisieActivity;
import com.example.mastermind.game.Grille;
import com.example.mastermind.game.Saisie;
import java.util.Collection;
import java.util.LinkedList;
public class EndView extends View {
private Integer[] combiWin;
private Grille grille;
private Paint circle;
private int nbcoups;
private LinearLayout rootView;
public EndView(Context context, Grille grille, Integer[] combiWin, LinearLayout rootView) {
super(context);
this.combiWin=combiWin;
this.grille=grille;
this.circle = new Paint();
this.rootView = rootView;
}
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
//affichage des anciennes soumissions
//copie des soumissions
LinkedList<Integer> grille = new LinkedList<Integer>();
grille.addAll(this.grille.getSoumissions());
for (int y = 0; y < 10; y++) {
for (int x = 0; x < 4; x++) {
this.circle.setColor(grille.pop());
canvas.drawCircle((x * this.getWidth() / 8 + (this.getWidth() * 21 / 68)), (y * this.rootView.getHeight() / 14 + this.rootView.getHeight() / 21), this.getWidth() / 17, this.circle);
}
}
LinkedList<Integer> notation = new LinkedList<Integer>();
notation.addAll(this.grille.getNotations());
for(int y=0; y<10; y++) {
for(int x=0; x<2; x++) { // colonne gauche
this.circle.setColor(notation.pop());
canvas.drawCircle((x*this.getWidth()/11+(this.getWidth()/11)),(y*this.rootView.getHeight()/14+this.rootView.getHeight()/21), this.getWidth()/26, this.circle);
}
for(int x=0; x<2; x++) { // colonne droite
this.circle.setColor(notation.pop());
canvas.drawCircle((x*this.getWidth()/11+(this.getWidth()*4/5)),(y*this.rootView.getHeight()/14+this.rootView.getHeight()/21), this.getWidth()/26, this.circle);
}
}
// affichage de la zone de saisie
//copie de la zone de saisie
for (int i=0;i<4;i++){
this.circle.setColor(this.combiWin[i]);
canvas.drawCircle((i*this.getWidth()/5+this.getWidth()/5),this.rootView.getHeight()*7/9, this.getWidth()/14, this.circle);
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int desiredWidth = this.getWidth();
int desiredHeight = this.rootView.getHeight()*7/9+this.getWidth()/5+this.rootView.getWidth()/7;
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);
int width;
int height;
if (widthMode == MeasureSpec.EXACTLY) {
width = widthSize;
} else if (widthMode == MeasureSpec.AT_MOST) {
width = Math.min(desiredWidth, widthSize);
} else {
width = desiredWidth;
}
if (heightMode == MeasureSpec.EXACTLY) {
height = heightSize;
} else if (heightMode == MeasureSpec.AT_MOST) {
height = Math.min(desiredHeight, heightSize);
} else {
height = desiredHeight;
}
setMeasuredDimension(width, height);
System.out.println("Voulu : "+width+" par "+height);
}
}

View File

@ -19,65 +19,42 @@ public class Bot {
private Integer pionVide; private Integer pionVide;
private Integer[] pionsNotation; private Integer[] pionsNotation;
public Bot(Integer[] pionsAutorisés, Integer[] pionsNotation, Integer pionVide){ public Bot(Collection<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(Integer[] pions){ protected void generationCombiWin(Collection<Integer> pions){
Random rand = new Random(); Random rand = new Random();
int nbPions = pions.length; int nbPions = pions.size();
Integer[] tabPions=(Integer[]) pions.toArray();
for (int i=0;i<4;i++){ for (int i=0;i<4;i++){
this.collectionWin[i]=pions[rand.nextInt(nbPions)]; this.collectionWin[i]=tabPions[rand.nextInt(nbPions)];
} }
} }
public Integer[] notation(Integer[] soumission){ public Collection<Integer> notation(Integer[] soumission){
LinkedList<Integer> note=new LinkedList<>(); Collection<Integer> note=new LinkedList<Integer>();
Integer[] copyCombi = new Integer[4];
System.arraycopy(this.collectionWin, 0, copyCombi, 0,4);
//noirs
for(int i=0; i<4;i++) { for(int i=0; i<4;i++) {
if (copyCombi[i]==soumission[i]) { if (this.collectionWin[i] == soumission[i]) {
note.add(this.pionsNotation[1]); note.add(this.pionsNotation[1]);
copyCombi[i]=null;
soumission[i]=null;
} }
} }
//On crée une copie de la combinaison gagnante pour la modifier et éviter la fausse répétition de pions blancs
//blancs Integer[] copyCombi = this.collectionWin;
for(int i=0; i<4;i++) { for(int i=0; i<4;i++) {
if(soumission[i]!=null){
for (int y=0; y<4;y++) { for (int y=0; y<4;y++) {
if (soumission[i]==copyCombi[y]) { if (i!=y){
if (this.collectionWin[y] == soumission[i]){
note.add(this.pionsNotation[0]); note.add(this.pionsNotation[0]);
copyCombi[y] = null; this.collectionWin[y]=null;
soumission[i] = null;
System.out.println(i+" "+y);
break;
} }
} }
} }
} }
// On complête avec des cases vides return note;
while (note.size()<4){
note.addLast(this.pionVide);
}
Integer[] tabnote = new Integer[4];
//fill tab
Random rand = new Random();
for(int i=0; i<4;i++) {
tabnote[i]=note.get(i);
}
return tabnote;
}
public Integer[] getCollectionWin(){
return this.collectionWin;
} }
} }

View File

@ -1,72 +1,60 @@
package com.example.mastermind.game; package com.example.mastermind.game;
import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.Paint; import android.graphics.Paint;
import android.view.View; import android.view.View;
import com.example.mastermind.GameActivity;
import com.example.mastermind.R; import com.example.mastermind.R;
import com.example.mastermind.SaisieActivity;
import java.util.Collection; import java.util.Collection;
import java.util.LinkedList; import java.util.LinkedList;
public class GameView extends View { public class GameView extends View {
private Collection<Integer> pionsAttaquant;
private Collection<Integer> pionsDefenseur;
private Collection<Integer> pionsPasPlaces;
private Saisie saisie; private Saisie saisie;
private Grille grille; private Grille grille;
private Paint circle; private Paint circle;
private Bitmap cancelBtn; private boolean state;
private Bitmap backBtn; public GameView(Context context,Saisie saisie,Grille grille) {
private Bitmap validBtn; super(context);
private SaisieActivity activity;
public GameView(Context con, SaisieActivity context, Saisie saisie, Grille grille) {
super(con);
this.activity=context;
this.saisie=saisie; this.saisie=saisie;
this.grille=grille; this.grille=grille;
this.setOnTouchListener(new TouchListener(context)); this.setOnTouchListener(new TouchListener(this));
//on initialise les collections de pions
initpions();
//state indique true si le joueur soumet une combinaison ou false si elle est noté
this.state=true;
this.circle = new Paint(); this.circle = new Paint();
} }
@Override @Override
protected void onDraw(Canvas canvas){ protected void onDraw(Canvas canvas){
super.onDraw(canvas); super.onDraw(canvas);
if(this.grille!=null) { this.setBackgroundColor(this.getResources().getColor(R.color.grey));
//affichage des anciennes soumissions //affichage des anciennes soumissions
//copie des soumissions //copie des soumissions
LinkedList<Integer> grille = new LinkedList<Integer>(); LinkedList<Integer> grille = new LinkedList<Integer>();
grille.addAll(this.grille.getSoumissions()); grille.addAll(this.grille.getSoumissions());
System.out.println(grille.size());
for (int y=0; y<10;y++) { for (int y=0; y<10;y++) {
for (int x=0;x<4;x++) { for (int x=0;x<4;x++) {
this.circle.setColor(grille.pop()); this.circle.setColor(grille.pop());
//TODO: coordonnées propres
canvas.drawCircle(( x*this.getWidth()/8+(this.getWidth()*21/68)),(y*this.getHeight()/14+this.getHeight()/21), this.getWidth()/17, this.circle); canvas.drawCircle(( x*this.getWidth()/8+(this.getWidth()*21/68)),(y*this.getHeight()/14+this.getHeight()/21), this.getWidth()/17, this.circle);
} }
} }
LinkedList<Integer> notation = new LinkedList<Integer>();
notation.addAll(this.grille.getNotations());
for(int y=0; y<10; y++) {
for(int x=0; x<2; x++) { // colonne gauche
this.circle.setColor(notation.pop());
canvas.drawCircle((x*this.getWidth()/11+(this.getWidth()/11)),(y*this.getHeight()/14+getHeight()/21), this.getWidth()/26, this.circle);
}
for(int x=0; x<2; x++) { // colonne droite
this.circle.setColor(notation.pop());
canvas.drawCircle((x*this.getWidth()/11+(this.getWidth()*4/5)),(y*this.getHeight()/14+getHeight()/21), this.getWidth()/26, this.circle);
}
}
}
// affichage de la zone de saisie // affichage de la zone de saisie
//copie de la zone de saisie //copie de la zone de saisie
Integer[] saisie = this.saisie.getSelection(); LinkedList<Integer> saisie = new LinkedList<Integer>();
for (int i=0;i<4;i++){ saisie.addAll(this.saisie.getSelection());
this.circle.setColor(saisie[i]); 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.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);
} }
@ -74,51 +62,71 @@ public class GameView extends View {
//copie des couleurs dispos //copie des couleurs dispos
LinkedList<Integer> couleurs = new LinkedList<Integer>(); LinkedList<Integer> couleurs = new LinkedList<Integer>();
couleurs.addAll(this.saisie.getChoix()); couleurs.addAll(this.saisie.getChoix());
if(this.saisie.getChoix().size() == 6 || this.saisie.getChoix().size() == 2) { System.out.println(couleurs.size());
for (int i=0;i<this.saisie.getChoix().size();i++){ for (int i=0;i<this.saisie.getChoix().size();i++){
this.circle.setColor(couleurs.pop()); this.circle.setColor(couleurs.pop());
//TODO: coordonnées propres (encore)
canvas.drawCircle((i*this.getWidth()*2/13+this.getWidth()/8),this.getHeight()-this.getHeight()/7, this.getWidth()/16, this.circle); canvas.drawCircle((i*this.getWidth()*2/13+this.getWidth()/8),this.getHeight()-this.getHeight()/7, this.getWidth()/16, this.circle);
} }
} else if(this.saisie.getChoix().size() == 7) { //TODO: ajout des colonnes de notation
for (int i = 0; i < this.saisie.getChoix().size(); i++) { //TODO: ajout des boutons
this.circle.setColor(couleurs.pop()); //Test de bouton valider
canvas.drawCircle((i * this.getWidth() * 2 / 14 + this.getWidth() / 14), this.getHeight() - this.getHeight() / 7, this.getWidth() / 19, this.circle); this.circle.setColor(this.getResources().getColor(R.color.green));
} canvas.drawCircle((this.getWidth()/2),this.getHeight()-this.getHeight()/16, this.getWidth()/13, this.circle);
}
// bouton valider
validBtn = decodeSampledBitmapFromResource(getResources(), R.drawable.valid_button, getWidth()/13, getWidth()/13); // version img
canvas.drawBitmap(validBtn, this.getWidth()/2+(this.getWidth()/11)*2-getWidth()/13, this.getHeight()/2+this.getHeight()*2/5, null);
// bouton retour // bouton retour
backBtn = decodeSampledBitmapFromResource(getResources(), R.drawable.back_button, getWidth()/13, getWidth()/13); /* this.circle.setColor(this.getResources().getColor(R.color.blue));
canvas.drawBitmap(backBtn, this.getWidth()/2-getWidth()/13, this.getHeight()/2+this.getHeight()*2/5, null); canvas.drawCircle((this.getWidth()/2), this.getHeight()-this.getHeight()/16, this.getWidth()/13, this.circle);*/
// bouton annuler
cancelBtn = decodeSampledBitmapFromResource(getResources(), R.drawable.cancel_button, getWidth()/13, getWidth()/13);
canvas.drawBitmap(cancelBtn, this.getWidth()/2-(getWidth()/11)*2-getWidth()/13, this.getHeight()/2+this.getHeight()*2/5, null);
} }
public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { //Change l'état de soumission à notation après qu'une combinaision ai été soumise puis inversement
final int height = options.outHeight; public void changeState() {
final int width = options.outWidth; if (this.saisie.getSizeSelection() == 4) {
int inSampleSize = 1; //partie à décommenter pour acceder à la notation
/*this.state = !this.state;
if (height > reqHeight || width > reqWidth) { if (this.state) {
final int halfHeight = height / 2; this.saisie.setChoix(this.pionsAttaquant);
final int halfWidth = width / 2; } else if (!this.state) {
this.saisie.setChoix(this.pionsDefenseur);
while ((halfHeight / inSampleSize) >= reqHeight && (halfWidth / inSampleSize) >= reqWidth) { }*/
inSampleSize *= 3; this.grille.addSoumission(this.saisie.getSelection());
this.saisie.initSelection(this.getResources().getColor(R.color.pionVide));
this.invalidate();
} }
} }
return inSampleSize; //ajoute une nouvelle couleur pour la séléction à soumettre
public void addChoix(int choix){
this.saisie.addSelection(choix);
this.invalidate();
} }
public Bitmap decodeSampledBitmapFromResource(Resources res, int resId, int width, int height) { //initialise les collections de pions et remplie saisie et grille de pions vides
BitmapFactory.Options options = new BitmapFactory.Options(); public void initpions(){
options.inJustDecodeBounds = true; //on initialise les pions
BitmapFactory.decodeResource(res, resId, options); //on créer une ligne de 4 pions gris représentants une ligne de pions vides
options.inSampleSize = calculateInSampleSize(options, width, height); this.pionsPasPlaces = new LinkedList<Integer>();
options.inJustDecodeBounds = false; for (int i=0;i<4;i++){
return BitmapFactory.decodeResource(res, resId, options); 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));
this.pionsAttaquant.add(this.getResources().getColor(R.color.blue));
this.pionsAttaquant.add(this.getResources().getColor(R.color.green));
this.pionsAttaquant.add(this.getResources().getColor(R.color.yellow));
this.pionsAttaquant.add(this.getResources().getColor(R.color.white));
// on inisialise la saisie
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,6 @@ 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
@ -24,48 +23,38 @@ public class Grille {
} }
// Méthode permettant d'ajouter une soumission // Méthode permettant d'ajouter une soumission
public void addSoumission(Integer[] newSub){ public void addSoumission(LinkedList<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[i]); this.soumissions.addLast(newSub.poll());
//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(Integer pionVide){ public void initGrille(Collection<Integer> SubToCopy){
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++){
for(int y=0;y<4;y++) { this.soumissions.addAll(SubToCopy);
this.soumissions.add(pionVide); this.notations.addAll(SubToCopy);
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(Integer[] newNot){ public void addNotation(LinkedList<Integer> newNot){
for (int i=0; i<4; i++) { for (int i=0; i<4; i++) {
//On retire la derniere ligne vide //On retire une ligne vide en haut pour remonter l'affichage
this.notations.removeLast(); this.notations.remove(0);
//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
@ -76,15 +65,5 @@ public class Grille {
return this.notations; return this.notations;
} }
public Integer[] getLastNotation(){
Integer[] lastNotation = new Integer[4];
for (int i=0;i<4;i++){
lastNotation[i]=this.notations.get(this.notations.size()-i-1);
}
return lastNotation;
}
public int getSizeSubs(){
return this.sizeSubs;
}
} }

View File

@ -28,39 +28,23 @@ 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 pionVide){ public void initSelection(Integer chosenColors){
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(pionVide); this.selection.add(chosenColors);
} }
//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 par index à la zone de saisie //addSelection permet d'ajouter un pion à la zone de saisie
public void addSelection(int indexcolor){ public void addSelection(Integer chosenColors){
//On vérifie qu'il n'y a pas déjà 4 pions
if (this.sizeSelection<4&&this.choix.size()>indexcolor){
this.selection.set(this.sizeSelection,this.choix.get(indexcolor));
this.sizeSelection+=1;
}
}
//addSelection permet d'ajouter un pion par index à la zone de saisie
public void addSelection(Integer color){
//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,color); this.selection.set(this.sizeSelection,this.choix.get(chosenColors));
this.sizeSelection++; this.sizeSelection+=1;
}
} }
public void removeSelection(Integer pionVide) {
if(this.sizeSelection>0) {
this.selection.remove(this.sizeSelection-1);
this.selection.add(pionVide);
this.sizeSelection--;
}
} }
public int getSizeSelection(){ public int getSizeSelection(){
@ -72,23 +56,13 @@ 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(Integer[] colorsSelected){ public void setChoix(Collection<Integer> colorsSelected){
this.choix.removeAll(this.choix); this.choix.removeAll(this.choix);
for (int i=0;i<colorsSelected.length;i++){ this.choix.addAll(colorsSelected);
this.choix.add(colorsSelected[i]);
}
} }
public int getSizeChoix() { public LinkedList<Integer> getSelection(){
return this.choix.size(); return this.selection;
}
public Integer[] getSelection(){
Integer[] selectiontab=new Integer[4];
for (int i=0;i<this.selection.size();i++){
selectiontab[i]=this.selection.get(i);
}
return selectiontab;
} }
} }

View File

@ -1,24 +0,0 @@
package com.example.mastermind.game;
import android.app.Activity;
import android.view.MotionEvent;
import android.view.View;
import com.example.mastermind.GameActivity;
import com.example.mastermind.SaisieActivity;
public class TapListener implements View.OnTouchListener{
private Activity context;
public TapListener(Activity context) {
this.context=context;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getActionMasked();
if (action == MotionEvent.ACTION_UP) {
this.context.finish();
}
return true;
}
}

View File

@ -3,13 +3,10 @@ package com.example.mastermind.game;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
import com.example.mastermind.GameActivity;
import com.example.mastermind.SaisieActivity;
public class TouchListener implements View.OnTouchListener{ public class TouchListener implements View.OnTouchListener{
private SaisieActivity context; private GameView view;
public TouchListener(SaisieActivity context) { public TouchListener(GameView view) {
this.context=context; this.view=view;
} }
@Override @Override
public boolean onTouch(View v, MotionEvent event) { public boolean onTouch(View v, MotionEvent event) {
@ -21,47 +18,22 @@ public class TouchListener implements View.OnTouchListener{
{ {
//Surveille quel bouton de couleur est choisi //Surveille quel bouton de couleur est choisi
if (v.getHeight()-v.getHeight()/7-v.getWidth()/16<y && y<v.getHeight()-v.getHeight()/7+v.getWidth()/16){ if (v.getHeight()-v.getHeight()/7-v.getWidth()/16<y && y<v.getHeight()-v.getHeight()/7+v.getWidth()/16){
if(this.context.getNbrPion() == 6 || this.context.getNbrPion() == 2) {
if(v.getWidth()/8-v.getWidth()/15<x && x<v.getWidth()/8+v.getWidth()/15){ if(v.getWidth()/8-v.getWidth()/15<x && x<v.getWidth()/8+v.getWidth()/15){
this.context.addChoix(0); 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){ } 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.context.addChoix(1); 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) { } 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.context.addChoix(2); 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){ } 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.context.addChoix(3); 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) { } 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.context.addChoix(4); 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){ } 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.context.addChoix(5); this.view.addChoix(5);
}
} else if(this.context.getNbrPion() == 7) {
if (v.getWidth() / 8 - v.getWidth() / 15 < x && x < v.getWidth() / 8 + v.getWidth() / 15) {
this.context.addChoix(0);
} else if (v.getWidth() * 2 / 14 + v.getWidth() / 14 - v.getWidth() / 18 < x && x < v.getWidth() * 2 / 14 + v.getWidth() / 14 + v.getWidth() / 18) {
this.context.addChoix(1);
} else if (2 * v.getWidth() * 2 / 14 + v.getWidth() / 14 - v.getWidth() / 18 < x && x < 2 * v.getWidth() * 2 / 14 + v.getWidth() / 14 + v.getWidth() / 18) {
this.context.addChoix(2);
} else if (3 * v.getWidth() * 2 / 14 + v.getWidth() / 14 - v.getWidth() / 18 < x && x < 3 * v.getWidth() * 2 / 14 + v.getWidth() / 14 + v.getWidth() / 18) {
this.context.addChoix(3);
} else if (4 * v.getWidth() * 2 / 14 + v.getWidth() / 14 - v.getWidth() / 18 < x && x < 4 * v.getWidth() * 2 / 14 + v.getWidth() / 14 + v.getWidth() / 18) {
this.context.addChoix(4);
} else if (5 * v.getWidth() * 2 / 14 + v.getWidth() / 14 - v.getWidth() / 18 < x && x < 5 * v.getWidth() * 2 / 14 + v.getWidth() / 14 + v.getWidth() / 18) {
this.context.addChoix(5);
} else if(6 * v.getWidth() * 2 / 14 + v.getWidth() / 14 - v.getWidth() / 18 < x && x < 6 * v.getWidth() * 2 / 14 + v.getWidth() / 14 + v.getWidth() / 18) {
this.context.addChoix(6);
}
}
// surveille si un bouton de controle est cliqué
} else if (v.getHeight()-v.getWidth()/16-v.getWidth()/13<y && y<v.getHeight()-v.getHeight()/16+v.getWidth()/13){
if(v.getWidth()/2+(v.getWidth()/11)*2-v.getWidth()/13<x && x<v.getWidth()/2+(v.getWidth()/11)*2+v.getWidth()/13) { // soumettre
this.context.changeState();
} else if (v.getWidth()/2-v.getWidth()/13<x && x<v.getWidth()/2+v.getWidth()/13) { // retour
this.context.removePion();
} else if (v.getWidth()/2-(v.getWidth()/11)*2-v.getWidth()/13<x && x<v.getWidth()/2-(v.getWidth()/11)*2+v.getWidth()/13) { // annuler
this.context.clearChoix();
} }
// 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; return true;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

View File

@ -1,11 +0,0 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/grey"
tools:context=".GameActivity"
android:orientation="vertical">
</LinearLayout>

View File

@ -25,8 +25,7 @@
android:text="Mastermind" android:text="Mastermind"
android:gravity="center" android:gravity="center"
android:textColor="#eee" android:textColor="#eee"
android:paddingHorizontal="10dp" android:padding="50dp"
android:paddingVertical="40dp"
android:textSize="50dp" android:textSize="50dp"
android:autoSizeMaxTextSize="100dp" android:autoSizeMaxTextSize="100dp"
android:autoSizeMinTextSize="10dp"> android:autoSizeMinTextSize="10dp">

View File

@ -1,70 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/cardview_dark_background"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/title_rules_activity"
android:textColor="#eee"
android:textSize="40dp" />
<TextView
android:id="@+id/title_gen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:padding="5dp"
android:text="@string/title_gen_rules"
android:textColor="#eee"
android:textSize="20dp"/>
<TextView
android:id="@+id/gen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="@string/general_rules"
android:textColor="#eee"
android:textSize="16dp"/>
<TextView
android:id="@+id/title_hot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:padding="5dp"
android:text="@string/title_hotseat"
android:textColor="#eee"
android:textSize="20dp"/>
<TextView
android:id="@+id/hot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="@string/rules_hotseat"
android:textColor="#eee"
android:textSize="16dp"/>
<TextView
android:id="@+id/title_bot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:padding="5dp"
android:text="@string/title_bot"
android:textColor="#eee"
android:textSize="20dp"/>
<TextView
android:id="@+id/bot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="@string/rules_bot"
android:textColor="#eee"
android:textSize="16dp"/>
</LinearLayout>

View File

@ -1,46 +1,10 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/cardview_dark_background" android:background="@color/cardview_dark_background">
android:orientation="vertical"
tools:ignore="UseSwitchCompatOrMaterialXml">
<TextView <FrameLayout
android:layout_width="wrap_content" android:id="@+id/settings"
android:layout_height="wrap_content" android:layout_width="match_parent"
android:layout_gravity="center" android:layout_height="match_parent" />
android:layout_marginTop="20dp"
android:text="@string/header"
android:textColor="#eee"
android:textSize="40dp"/>
<Button
android:id="@+id/backButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="60dp"
android:background="#aaa"
android:padding="7dp"
android:text="@string/back_menu"/>
<Switch
android:id="@+id/switchPion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="50dp"
android:text="@string/pions_title"
android:textColor="#eee"
android:textSize="20dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="40dp"
android:layout_marginTop="5dp"
android:layout_marginRight="40dp"
android:text="@string/summary"
android:textColor="#eee"
android:textSize="15dp"/>
</LinearLayout> </LinearLayout>

View File

@ -14,6 +14,6 @@
<color name="yellow">#FFFEC603</color> <color name="yellow">#FFFEC603</color>
<color name="grey">#FF333333</color> <color name="grey">#FF333333</color>
<color name="pionVide">#FF999999</color> <color name="pionVide">#FF999999</color>
<color name="vide">#FF889998</color>
<color name="red">#d32f2f</color>
</resources> </resources>

View File

@ -1,25 +1,11 @@
<resources> <resources>
<string name="app_name">MasterMind</string> <string name="app_name">MasterMind</string>
<string name="title_activity_settings">SettingsActivity</string> <string name="title_activity_settings">SettingsActivity</string>
<string name="title_rules_activity">Règles</string>
<!-- Preference Titles --> <!-- Preference Titles -->
<string name="header">Paramètres</string> <string name="header">Paramètres</string>
<!-- Sync Preferences --> <!-- Sync Preferences -->
<string name="back_menu">&lt; Retour au menu</string>
<string name="pions_title">Autoriser les pions vides</string> <string name="pions_title">Autoriser les pions vides</string>
<string name="summary">Cette fonctionnalité augmente la difficultédu jeu pour l\'attaquant</string> <string name="summary">Cette fonctionnalité augmente la difficultédu jeu pour l\'attaquant</string>
<!-- Rules -->
<string name="title_gen_rules">Règles générales :</string>
<string name="general_rules">Le mastermind est un jeu qui se joue généralement à deux, un défenseur doit choisir un code couleur que l\'attaquant devra deviner.
Pour se faire, une fois le code choisi par le 1er joueur, le 2nd a 10 tentatives pour le retrouver, après chaque essai la proposition est évalué.
Avec des pions noirs il indique les couleurs bien placées, et avec des pions blancs des couleurs mal placées, s\'il ne place pas de pion c\'est que la couleur
de la proposition n\'est pas dans le code à trouver.</string>
<string name="title_hotseat">Mode 1 vs 1 :</string>
<string name="rules_hotseat">Mode de jeu classique, le défenseur choisit un code, l\'attaquant fait ces propositions et la notation de chaque tentative est faite à la main par le défenseur.</string>
<string name="title_bot">Mode 1 vs Ordi :</string>
<string name="rules_bot">Dans ce mode de jeu, le code couleur est choisi aléatoirement par un bot, et les notations des essaies est sont faites de manière automatique.</string>
</resources> </resources>

View File

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory app:title="@string/header">
<SwitchPreferenceCompat
app:key="switchPion"
app:title="@string/pions_title"
app:summaryOff="@string/summary"
app:summaryOn="@string/summary" />
</PreferenceCategory>
</PreferenceScreen>