Bon j'ai un soucis avec mon code de morpion que je ne comprend pas. chatGPT m'est souvent d'une aide précieuse, mais alors là il bite rien autant que moi.
Pour situer le cadre j'ai des boutons organisés comme ca :
1 2 3
4 5 6
7 8 9
Joueur1 : X
Joueur2 : O
La plupart des combinaisons fonctionnent très bien (presque toutes en fait), quand les 3 sont alignés, ca bloque tout les boutons et met un label à jour "joueur machin a gagné"
SAUF, certaines combinaison, et je comprend pas pourquoi parce que mes méthodes sont des copiés-collés avec juste changement des chiffres des boutons.
Alors vous m'excuserez le code hein, c'est simplifiable, plein des trucs sont déportables dans des méthode et j'ai une idée comment faire tout ca. Bref c'est dégueulasse mais c'est pas la question.
Deux exemple de combinaison qui ne fonctionne pas :
- - -
x x x
o o -
et
- - x
- o x
- o x
Voila mon code GameActivity :
Code:
package fr.sorkar.morpion;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class GameActivity extends AppCompatActivity {
Button bouton1;
Button bouton2;
Button bouton3;
Button bouton4;
Button bouton5;
Button bouton6;
Button bouton7;
Button bouton8;
Button bouton9;
Button recommencer;
public String nomJoueur1;
public String nomJoueur2;
public String tourJoueur;
public TextView joueurGagnant;
Button vignetteJoueur1;
Button vignetteJoueur2;
Boolean fin = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
recommencer = findViewById(R.id.Recommencer);
TextView Noms = findViewById(R.id.feedback);
nomJoueur1 = getIntent().getStringExtra("nomJoueur1");
nomJoueur2 = getIntent().getStringExtra("nomJoueur2");
Noms.setText(nomJoueur1 + " VS " + nomJoueur2);
tourJoueur = getIntent().getStringExtra("nomJoueur1");
joueurGagnant = findViewById(R.id.joueurGagnant);
vignetteJoueur1 = findViewById(R.id.vignetteJoueur1);
vignetteJoueur2 = findViewById(R.id.vignetteJoueur2);
vignetteJoueur1.setText("X " + nomJoueur1);
vignetteJoueur2.setText("O " +nomJoueur2);
vignetteJoueur1.setBackgroundColor(getResources().getColor(R.color.blue));
vignetteJoueur2.setBackgroundColor(getResources().getColor(R.color.grey));
vignetteJoueur1.setClickable(false);
vignetteJoueur2.setClickable(false);
bouton1 = findViewById(R.id.button_1);
bouton2 = findViewById(R.id.button_2);
bouton3 = findViewById(R.id.button_3);
bouton4 = findViewById(R.id.button_4);
bouton5 = findViewById(R.id.button_5);
bouton6 = findViewById(R.id.button_6);
bouton7 = findViewById(R.id.button_7);
bouton8 = findViewById(R.id.button_8);
bouton9 = findViewById(R.id.button_9);
}
//Gere le changement des vignettes selon a qui le tour de jouer
public void setBackgroundColorP1(){
vignetteJoueur1.setBackgroundColor(getResources().getColor(R.color.blue));
vignetteJoueur2.setBackgroundColor(getResources().getColor(R.color.grey));
}
public void setBackgroundColorP2(){
vignetteJoueur2.setBackgroundColor(getResources().getColor(R.color.blue));
vignetteJoueur1.setBackgroundColor(getResources().getColor(R.color.grey));
}
//Remet tout à 0
public void resetGame(View view) {
tourJoueur = nomJoueur1;
setBackgroundColorP1();
joueurGagnant.setText("");
bouton1.setText("");
bouton2.setText("");
bouton3.setText("");
bouton4.setText("");
bouton5.setText("");
bouton6.setText("");
bouton7.setText("");
bouton8.setText("");
bouton9.setText("");
bouton1.setClickable(true);
bouton2.setClickable(true);
bouton3.setClickable(true);
bouton4.setClickable(true);
bouton5.setClickable(true);
bouton6.setClickable(true);
bouton7.setClickable(true);
bouton8.setClickable(true);
bouton9.setClickable(true);
fin = false;
}
//Desactiver tout les boutons
public void DesactivationBoutons(){
bouton1.setClickable(false);
bouton2.setClickable(false);
bouton3.setClickable(false);
bouton4.setClickable(false);
bouton5.setClickable(false);
bouton6.setClickable(false);
bouton7.setClickable(false);
bouton8.setClickable(false);
bouton9.setClickable(false);
}
//Fonction check condition de victoire
public void gagnant() {
if (bouton1.getText().toString().equals(bouton2.getText().toString()) &&
bouton2.getText().toString().equals(bouton3.getText().toString())) {
if (bouton1.getText().toString().equals("X")){
joueurGagnant.setText(nomJoueur1 + " a gagné !");
DesactivationBoutons();
fin = true;
}
else if (bouton1.getText().toString().equals("O")){
joueurGagnant.setText(nomJoueur2 + " a gagné !");
DesactivationBoutons();
fin = true;
}
else{
joueurGagnant.setText("");
}
}
else if (bouton4.getText().toString().equals(bouton5.getText().toString()) &&
bouton5.getText().toString().equals(bouton6.getText().toString())) {
if (bouton4.getText().toString().equals("X")){
joueurGagnant.setText(nomJoueur1 + " a gagné !");
DesactivationBoutons();
fin = true;
}
else if (bouton4.getText().toString().equals("O")){
joueurGagnant.setText(nomJoueur2 + " a gagné !");
DesactivationBoutons();
fin = true;
}
else{
joueurGagnant.setText("");
}
}
else if (bouton7.getText().toString().equals(bouton8.getText().toString()) &&
bouton8.getText().toString().equals(bouton9.getText().toString())) {
if (bouton7.getText().toString().equals("X")){
joueurGagnant.setText(nomJoueur1 + " a gagné !");
DesactivationBoutons();
fin = true;
}
else if (bouton7.getText().toString().equals("O")){
joueurGagnant.setText(nomJoueur2 + " a gagné !");
DesactivationBoutons();
fin = true;
}
else{
joueurGagnant.setText("");
}
}
else if (bouton1.getText().toString().equals(bouton4.getText().toString()) &&
bouton4.getText().toString().equals(bouton7.getText().toString())) {
if (bouton1.getText().toString().equals("X")) {
joueurGagnant.setText(nomJoueur1 + " a gagné !");
DesactivationBoutons();
fin = true;
}
else if (bouton1.getText().toString().equals("O")) {
joueurGagnant.setText(nomJoueur2 + " a gagné !");
DesactivationBoutons();
fin = true;
} else {
joueurGagnant.setText("");
}
}
else if (bouton2.getText().toString().equals(bouton5.getText().toString()) &&
bouton5.getText().toString().equals(bouton8.getText().toString())) {
if (bouton2.getText().toString().equals("X")) {
joueurGagnant.setText(nomJoueur1 + " a gagné !");
DesactivationBoutons();
fin = true;
}
else if (bouton2.getText().toString().equals("O")) {
joueurGagnant.setText(nomJoueur2 + " a gagné !");
DesactivationBoutons();
fin = true;
}
else {
joueurGagnant.setText("");
}
}
else if (bouton3.getText().toString().equals(bouton6.getText().toString()) &&
bouton6.getText().toString().equals(bouton9.getText().toString())) {
if (bouton3.getText().toString().equals("X")) {
joueurGagnant.setText(nomJoueur1 + " a gagné !");
DesactivationBoutons();
fin = true;
}
else if (bouton3.getText().toString().equals("O")) {
joueurGagnant.setText(nomJoueur2 + " a gagné !");
DesactivationBoutons();
fin = true;
}
else {
joueurGagnant.setText("");
}
}
else if (bouton1.getText().toString().equals(bouton5.getText().toString()) &&
bouton5.getText().toString().equals(bouton9.getText().toString())) {
if (bouton1.getText().toString().equals("X")) {
joueurGagnant.setText(nomJoueur1 + " a gagné !");
DesactivationBoutons();
fin = true;
}
else if (bouton1.getText().toString().equals("O")) {
joueurGagnant.setText(nomJoueur2 + " a gagné !");
DesactivationBoutons();
fin = true;
}
else {
joueurGagnant.setText("");
}
}
else if (bouton3.getText().toString().equals(bouton5.getText().toString()) &&
bouton5.getText().toString().equals(bouton7.getText().toString())) {
if (bouton3.getText().toString().equals("X")) {
joueurGagnant.setText(nomJoueur1 + " a gagné !");
DesactivationBoutons();
fin = true;
}
else if (bouton3.getText().toString().equals("O")) {
joueurGagnant.setText(nomJoueur2 + " a gagné !");
DesactivationBoutons();
fin = true;
}
else {
joueurGagnant.setText("");
}
}
}
// Parametrage de chaque clic bouton
public void clic1 (View view) {
if (tourJoueur.equals(nomJoueur1)) {
bouton1.setText("X");
gagnant();
if (!fin) {
tourJoueur = nomJoueur2;
setBackgroundColorP2();
bouton1.setClickable(false); //Rend le bouton non cliquable. Different de .setEnable(false) qui le désactive
}
else{
gagnant();
}
} else {
bouton1.setText("O");
gagnant();
if (!fin) {
tourJoueur = nomJoueur1;
setBackgroundColorP1();
bouton1.setClickable(false);
}
else{
gagnant();
}
}
}
public void clic2 (View view) {
if (tourJoueur.equals(nomJoueur1)) {
bouton2.setText("X");
gagnant();
if (!fin) {
tourJoueur = nomJoueur2;
setBackgroundColorP2();
bouton2.setClickable(false);
}
else{
gagnant();
}
} else {
bouton2.setText("O");
gagnant();
if (!fin) {
tourJoueur = nomJoueur1;
setBackgroundColorP1();
bouton2.setClickable(false);
}
else{
gagnant();
}
}
}
public void clic3 (View view) {
if (tourJoueur.equals(nomJoueur1)) {
bouton3.setText("X");
gagnant();
if (!fin) {
tourJoueur = nomJoueur2;
setBackgroundColorP2();
bouton3.setClickable(false);
}
else{
gagnant();
}
} else {
bouton3.setText("O");
gagnant();
if(!fin) {
tourJoueur = nomJoueur1;
setBackgroundColorP1();
bouton3.setClickable(false);
}
else{
gagnant();
}
}
}
public void clic4 (View view) {
if (tourJoueur.equals(nomJoueur1)) {
bouton4.setText("X");
gagnant();
if (!fin) {
tourJoueur = nomJoueur2;
setBackgroundColorP2();
bouton4.setClickable(false); //Rend le bouton non cliquable. Different de .setEnable(false) qui le désactive
}
else{
gagnant();
}
} else {
bouton4.setText("O");
gagnant();
if (!fin) {
tourJoueur = nomJoueur1;
setBackgroundColorP1();
bouton4.setClickable(false);
}
else {
gagnant();
}
}
}
public void clic5 (View view) {
if (tourJoueur.equals(nomJoueur1)) {
bouton5.setText("X");
gagnant();
if (!fin) {
tourJoueur = nomJoueur2;
setBackgroundColorP2();
bouton5.setClickable(false); //Rend le bouton non cliquable. Different de .setEnable(false) qui le désactive
}
else{
gagnant();
}
} else {
bouton5.setText("O");
gagnant();
if (!fin) {
tourJoueur = nomJoueur1;
setBackgroundColorP1();
bouton5.setClickable(false);
}
else{
gagnant();
}
}
}
public void clic6 (View view) {
if (tourJoueur.equals(nomJoueur1)) {
bouton6.setText("X");
gagnant();
if (!fin) {
tourJoueur = nomJoueur2;
setBackgroundColorP2();
bouton6.setClickable(false); //Rend le bouton non cliquable. Different de .setEnable(false) qui le désactive
}
else{
gagnant();
}
} else {
bouton6.setText("O");
gagnant();
if (!fin) {
tourJoueur = nomJoueur1;
setBackgroundColorP1();
bouton6.setClickable(false);
}
else{
gagnant();
}
}
}
public void clic7 (View view) {
if (tourJoueur.equals(nomJoueur1)) {
bouton7.setText("X");
gagnant();
if(!fin) {
tourJoueur = nomJoueur2;
setBackgroundColorP2();
bouton7.setClickable(false);
}
else{
gagnant();
}
} else {
bouton7.setText("O");
gagnant();
if(!fin) {
tourJoueur = nomJoueur1;
setBackgroundColorP1();
bouton7.setClickable(false);
}
else{
gagnant();
}
}
}
public void clic8 (View view) {
if (tourJoueur.equals(nomJoueur1)) {
bouton8.setText("X");
gagnant();
if (!fin) {
tourJoueur = nomJoueur2;
setBackgroundColorP2();
bouton8.setClickable(false); //Rend le bouton non cliquable. Different de .setEnable(false) qui le désactive
}
else{
gagnant();
}
} else {
bouton8.setText("O");
gagnant();
if (!fin) {
tourJoueur = nomJoueur1;
setBackgroundColorP1();
bouton8.setClickable(false);
}
else{
gagnant();
}
}
}
public void clic9 (View view) {
if (tourJoueur.equals(nomJoueur1)) {
bouton9.setText("X");
gagnant();
if(!fin) {
tourJoueur = nomJoueur2;
setBackgroundColorP2();
bouton9.setClickable(false);
}
else{
gagnant();
}
} else {
bouton9.setText("O");
gagnant();
if(!fin) {
tourJoueur = nomJoueur1;
setBackgroundColorP1();
bouton9.setClickable(false);
}
else{
gagnant();
}
}
}
}
et le XML activity_game :
Code:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:elevation="-1dp"
tools:context=".GameActivity">
<TextView
android:id="@+id/feedback"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/textview"
android:textColor="@color/black"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.495"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.092"
tools:ignore="MissingConstraints" />
<GridLayout
android:id="@+id/grid_layout"
android:layout_width="286dp"
android:layout_height="193dp"
android:columnCount="3"
android:rowCount="3"
android:useDefaultMargins="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<Button
android:id="@+id/button_1"
style="@style/ButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_row="0"
android:layout_column="0"
android:onClick="clic1"
android:text=""
android:textSize="40sp" />
<Button
android:id="@+id/button_2"
style="@style/ButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_row="0"
android:layout_column="1"
android:onClick="clic2"
android:text=""
android:textSize="40sp" />
<Button
android:id="@+id/button_3"
style="@style/ButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_row="0"
android:layout_column="2"
android:onClick="clic3"
android:text=""
android:textSize="40sp" />
<Button
android:id="@+id/button_4"
style="@style/ButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_row="1"
android:layout_column="0"
android:onClick="clic4"
android:text=""
android:textSize="40sp" />
<Button
android:id="@+id/button_5"
style="@style/ButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_row="1"
android:layout_column="1"
android:onClick="clic5"
android:text=""
android:textSize="40sp" />
<Button
android:id="@+id/button_6"
style="@style/ButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_row="1"
android:layout_column="2"
android:onClick="clic6"
android:text=""
android:textSize="40sp" />
<Button
android:id="@+id/button_7"
style="@style/ButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_row="2"
android:layout_column="0"
android:onClick="clic7"
android:text=""
android:textSize="40sp" />
<Button
android:id="@+id/button_8"
style="@style/ButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_row="2"
android:layout_column="1"
android:onClick="clic8"
android:text=""
android:textSize="40sp" />
<Button
android:id="@+id/button_9"
style="@style/ButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_row="2"
android:layout_column="2"
android:onClick="clic9"
android:text=""
android:textSize="40sp" />
</GridLayout>
<TextView
android:id="@+id/joueurGagnant"
android:layout_width="143dp"
android:layout_height="48dp"
android:text="@string/jouez"
android:textAlignment="center"
android:textColor="@color/black"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/grid_layout"
app:layout_constraintVertical_bias="0.167" />
<Button
android:id="@+id/vignetteJoueur1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="60dp"
android:layout_marginTop="164dp"
android:text="@string/nomjoueur1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/vignetteJoueur2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="164dp"
android:text="@string/nomjoueur2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.465"
app:layout_constraintStart_toEndOf="@+id/vignetteJoueur1"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/Recommencer"
style="@style/ButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="resetGame"
android:text="@string/recommencer"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/joueurGagnant"
app:layout_constraintVertical_bias="0.0" />
</androidx.constraintlayout.widget.ConstraintLayout>
Au secours