如何在自动创建的按钮上重置文本android studio

时间:2018-04-24 17:50:50

标签: java android button text tic-tac-toe

我目前正在为我的一个班级实现Android的tic tac toe游戏。当玩家点击其中一个"网格"按钮,按钮文本设置为此播放器的任何符号(X或O)。其中一个要求是让我们的游戏按钮在启动时自动生成。因此,在应用程序启动之前,没有任何网格按钮具有实际ID。

这里没问题,直到我必须重新初始化游戏。一旦宣布获胜者,我需要重置网格按钮'文本,以便它不再显示任何一个上的X或O.问题是,按钮没有任何ID,所以它不像

那么容易

button.setText("&#34);

我还要补充一点,我们的教授希望我们使用自己的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;
    }

1 个答案:

答案 0 :(得分:0)

您可以将所有按钮保存在ArrayList<BoutonCase> buttons;

然后添加按钮:

final BoutonCase button = new BoutonCase(this.getContext());
buttons.add(button);

当你想要重置游戏时,你可以循环所有游戏并设置文本。

for (BoutonCase button : buttons) {
        button.setText(""); 
    }