Я в настоящее время реализую игру Tic Tac Toe для Android в одном из моих классов.Когда игрок нажимает одну из кнопок «сетки», кнопка «Текст» устанавливается в зависимости от того, какой символ этого игрока (X или O).Одним из требований является автоматическое создание игровых кнопок при запуске.Так что ни одна из кнопок сетки не имеет реальных идентификаторов перед запуском приложения.
Здесь нет проблем, пока мне не придется заново инициализировать игру.Как только победитель объявлен, мне нужно сбросить текст кнопок сетки, чтобы он больше не показывал X или O ни на одной из них.Дело в том, что кнопки не имеют никакого идентификатора, поэтому это не так просто, как
button.setText ("");
Я также должен добавить, что наш профессор хочет, чтобы мы использовали нашсобственный класс Button (BoutonCase), который реализует onClickListener и наследуется от Button.Не то чтобы это имело значение в этом случае.Вот часть кода.
public class ticTacToeFragment extends Fragment implements View.OnClickListener {
int compteur = 0;
LinearLayout ligneColonne1;
LinearLayout ligneColonne2;
LinearLayout ligneColonne3;
boolean JOUEUR_X = true;
int[][] statutJeu = new int[3][3];
Button btnReinitialiser;
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
final Bundle savedInstanceState){
View v = inflater.inflate(R.layout.fragment_tictactoe, container, false);
int cpt = 0;
ligneColonne1 = (LinearLayout) v.findViewById(R.id.ligne1);
ligneColonne2 = (LinearLayout) v.findViewById(R.id.ligne2);
ligneColonne3 = (LinearLayout) v.findViewById(R.id.ligne3);
btnReinitialiser = (Button) v.findViewById(R.id.btnReinit);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
btnReinitialiser.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
reinitialiserJeu();
}
});
for(int i = 0; i < 3; i++ ){
final BoutonCase button = new BoutonCase(this.getContext());
button.setId(cpt);
final int positionCourante = i;
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
if(JOUEUR_X){
button.setText("X");
statutJeu[1][positionCourante] = 1;
JOUEUR_X = false;
}
else{
button.setText("0");
statutJeu[1][positionCourante] = 3;
JOUEUR_X = true;
}
button.setEnabled(false);
verifierGagnant();
}
});
ligneColonne1.addView(button, lp);
cpt++;
}
for(int i = 0; i < 3; i++ ){
final BoutonCase button = new BoutonCase(this.getContext());
button.setId(cpt);
final int positionCourante = i;
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
if(JOUEUR_X){
button.setText("X");
statutJeu[1][positionCourante] = 1;
JOUEUR_X = false;
}
else{
button.setText("0");
statutJeu[1][positionCourante] = 3;
JOUEUR_X = true;
}
button.setEnabled(false);
verifierGagnant();
}
});
ligneColonne2.addView(button, lp);
cpt++;
}
for(int i = 0; i < 3; i++ ){
final BoutonCase button = new BoutonCase(this.getContext());
button.setId(cpt);
final int positionCourante = i;
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
if(JOUEUR_X){
button.setText("X");
statutJeu[2][positionCourante] = 1;
JOUEUR_X = false;
}
else{
button.setText("0");
statutJeu[2][positionCourante] = 3;
JOUEUR_X = true;
}
button.setEnabled(false);
verifierGagnant();
}
});
ligneColonne3.addView(button, lp);
cpt++;
}
final Button button = new Button(this.getContext());
button.setId(cpt);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
onCreateView(inflater,container,savedInstanceState);
}
});return v;
}
public void onClick(View v){
}
void verifierGagnant(){
//Horizontal --- row
Toast toastGagnant;
for(int i=0; i<3; i++){
if(statutJeu[i][0] == statutJeu[i][1] && statutJeu[i][0] == statutJeu[i][2]){
if (statutJeu[i][0]==1){
toastGagnant = Toast.makeText(this.getContext(),"Joueur X a gagné !", Toast.LENGTH_SHORT );
toastGagnant.show();
break;
}
else if (statutJeu[i][0]==3) {
toastGagnant = Toast.makeText(this.getContext(),"Joueur 0 a gagné !", Toast.LENGTH_SHORT );
toastGagnant.show();
break;
}
}
}
//Vertical --- columns
for(int i=0; i<3; i++){
if(statutJeu[0][i] == statutJeu[1][i] && statutJeu[0][i] == statutJeu[2][i]){
if (statutJeu[0][i]==1){
toastGagnant = Toast.makeText(this.getContext(),"Joueur X a gagné !", Toast.LENGTH_SHORT );
toastGagnant.show();
break;
}
else if (statutJeu[0][i]==3) {
toastGagnant = Toast.makeText(this.getContext(),"Joueur 0 a gagné !", Toast.LENGTH_SHORT );
toastGagnant.show();
break;
}
}
}
//First diagonal
if(statutJeu[0][0] == statutJeu[1][1] && statutJeu[0][0] == statutJeu[2][2]){
if (statutJeu[0][0]==1){
toastGagnant = Toast.makeText(this.getContext(),"Joueur X a gagné !", Toast.LENGTH_SHORT );
toastGagnant.show();
}
else if (statutJeu[0][0]==3) {
toastGagnant = Toast.makeText(this.getContext(),"Joueur 0 a gagné !", Toast.LENGTH_SHORT );
toastGagnant.show();
}
}
//Second diagonal
if(statutJeu[0][2] == statutJeu[1][1] && statutJeu[0][2] == statutJeu[2][0]){
if (statutJeu[0][2]==1){
toastGagnant = Toast.makeText(this.getContext(),"Joueur X a gagné !", Toast.LENGTH_SHORT );
toastGagnant.show();
}
else if (statutJeu[0][2]==3) {
toastGagnant = Toast.makeText(this.getContext(),"Joueur 0 a gagné !", Toast.LENGTH_SHORT );
toastGagnant.show();
}
}
compteur++;
if(compteur == 9){
toastGagnant = Toast.makeText(this.getContext(),"Partie Null !", Toast.LENGTH_SHORT);
toastGagnant.show();
}
}
void reinitialiserJeu (){
for(int i = 0; i < 2; i++ ){
for(int j = 0; j < 2; i++ ){
statutJeu[i][j] = 0;
}
}
compteur = 0;
}