我目前正在为我的一个班级实现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;
}
答案 0 :(得分:0)
您可以将所有按钮保存在ArrayList<BoutonCase> buttons;
然后添加按钮:
final BoutonCase button = new BoutonCase(this.getContext());
buttons.add(button);
当你想要重置游戏时,你可以循环所有游戏并设置文本。
for (BoutonCase button : buttons) {
button.setText("");
}