Juego de Android Tic Tac Toe -- java campo con beginner campo con android campo con tic-tac-toe camp codereview Relacionados El problema

Tic Tac Toe Android game


3
vote

problema

Español

¿Puedes ayudarme con sugerencias con respecto a mi código para el juego TIC TAC TOE? Este es mi código, lo he probado y funciona, pero siento que todavía se puede hacer más cortos / más claros. No soy un buen codificador y podría parecer feo para algunos.

  public class MainActivity extends Activity {      /**      * Called when the activity is first created.      */      @Override     public void onCreate(Bundle savedInstanceState)     {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         setBoard();     }      int check[][];     int i,j;     Button b[][];     int player=0;     TextView textView;     Button newGame;      // Set up the game board.     private void setBoard()     {          b = new Button[4][4];         check = new int[4][4];           textView = (TextView) findViewById(R.id.textview1);          newGame = (Button) findViewById(R.id.newgame);         newGame.setOnClickListener (new View.OnClickListener(){              public void onClick(View v)             {                 if(newGame.isEnabled())                 {                     textView.setText("Click button to start!");                     player=0;                     setBoard();                 }             }         });          b[1][3] = (Button) findViewById(R.id.one);         b[1][2] = (Button) findViewById(R.id.two);         b[1][1] = (Button) findViewById(R.id.three);           b[2][3] = (Button) findViewById(R.id.four);         b[2][2] = (Button) findViewById(R.id.five);         b[2][1] = (Button) findViewById(R.id.six);           b[3][3] = (Button) findViewById(R.id.seven);         b[3][2] = (Button) findViewById(R.id.eight);         b[3][1] = (Button) findViewById(R.id.nine);          for (i = 1; i <= 3; i++) {             for (j = 1; j <= 3; j++)                 check[i][j] = 2;         }          // add the click listeners for each button          for (i = 1; i <= 3; i++) {             for (j = 1; j <= 3; j++) {                 b[i][j].setOnClickListener(new MyClickListener(i, j));                 if (!b[i][j].isEnabled()) {                     b[i][j].setText("");                     b[i][j].setEnabled(true);                 }             }         }     }      class MyClickListener implements View.OnClickListener     {         int x;         int y;           public MyClickListener(int x, int y)         {             this.x = x;             this.y = y;         }            public void onClick(View view)         {             if (b[x][y].isEnabled())             {                 b[x][y].setEnabled(false);                 if (player == 0)                 {                     b[x][y].setText("X");                     check[x][y] = 0;                     player = 1;                     checkBoard();                 } else                 {                     b[x][y].setText("O");                     check[x][y] = 1;                     player = 0;                     checkBoard();                 }             }         }     // check the board to see if someone has won     private boolean checkBoard() {             boolean gameOver = false;             if (( check[1][1] == 0 && check[2][2] == 0 &&  check[3][3] == 0)                     || ( check[1][3] == 0 && check[2][2] == 0 &&  check[3][1] == 0)                     || ( check[1][2] == 0 &&  check[2][2] == 0 &&  check[3][2] == 0)                     || ( check[1][3] == 0 &&  check[2][3] == 0 &&  check[3][3] == 0)                     || ( check[1][1] == 0 &&  check[1][2] == 0 &&  check[1][3] == 0)                     || ( check[2][1] == 0 &&  check[2][2] == 0 &&  check[2][3] == 0)                     || ( check[3][1] == 0 &&  check[3][2] == 0 &&  check[3][3] == 0)                     || ( check[1][1] == 0 &&  check[2][1] == 0 &&  check[3][1] == 0)) {                 textView.setText("Player 1: You win!");                 gameOver = true;             } else if (( check[1][1] == 1 && check[2][2] == 1 && check[3][3] == 1)                     || ( check[1][3] == 1 && check[2][2] == 1 && check[3][1] == 1)                     || ( check[1][2] == 1 && check[2][2] == 1 && check[3][2] == 1)                     || ( check[1][3] == 1 && check[2][3] == 1 && check[3][3] == 1)                     || ( check[1][1] == 1 && check[1][2] == 1 && check[1][3] == 1)                     || ( check[2][1] == 1 && check[2][2] == 1 && check[2][3] == 1)                     || ( check[3][1] == 1 && check[3][2] == 1 && check[3][3] == 1)                     || ( check[1][1] == 1 &&  check[2][1] == 1 && check[3][1] == 1)) {                 textView.setText("Player 2: You Win!");                 gameOver = true;             } else {                 boolean empty = false;                 for (i = 1; i <= 3; i++) {                     for (j = 1; j <= 3; j++) {                         if (check[i][j] == 2) {                             empty = true;                             break;                         }                     }                 }                 if (!empty) {                     gameOver = true;                     textView.setText("Game over. It's a draw!");                  }             }if(gameOver)                  for(i=1;i<=3;i++)                 {                     for(j=1;j<=3;j++)                     {                         b[i][j].setEnabled(false);                     }                 }              return gameOver;         }     }  }   
Original en ingles

Can you help me with suggestions regarding my code for Tic Tac Toe Game? This is my code, I've tested it and it works, but I feel like it can still be made shorter/clearer. I am not a good coder and it might look ugly to some.

public class MainActivity extends Activity {      /**      * Called when the activity is first created.      */      @Override     public void onCreate(Bundle savedInstanceState)     {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         setBoard();     }      int check[][];     int i,j;     Button b[][];     int player=0;     TextView textView;     Button newGame;      // Set up the game board.     private void setBoard()     {          b = new Button[4][4];         check = new int[4][4];           textView = (TextView) findViewById(R.id.textview1);          newGame = (Button) findViewById(R.id.newgame);         newGame.setOnClickListener (new View.OnClickListener(){              public void onClick(View v)             {                 if(newGame.isEnabled())                 {                     textView.setText("Click button to start!");                     player=0;                     setBoard();                 }             }         });          b[1][3] = (Button) findViewById(R.id.one);         b[1][2] = (Button) findViewById(R.id.two);         b[1][1] = (Button) findViewById(R.id.three);           b[2][3] = (Button) findViewById(R.id.four);         b[2][2] = (Button) findViewById(R.id.five);         b[2][1] = (Button) findViewById(R.id.six);           b[3][3] = (Button) findViewById(R.id.seven);         b[3][2] = (Button) findViewById(R.id.eight);         b[3][1] = (Button) findViewById(R.id.nine);          for (i = 1; i <= 3; i++) {             for (j = 1; j <= 3; j++)                 check[i][j] = 2;         }          // add the click listeners for each button          for (i = 1; i <= 3; i++) {             for (j = 1; j <= 3; j++) {                 b[i][j].setOnClickListener(new MyClickListener(i, j));                 if (!b[i][j].isEnabled()) {                     b[i][j].setText("");                     b[i][j].setEnabled(true);                 }             }         }     }      class MyClickListener implements View.OnClickListener     {         int x;         int y;           public MyClickListener(int x, int y)         {             this.x = x;             this.y = y;         }            public void onClick(View view)         {             if (b[x][y].isEnabled())             {                 b[x][y].setEnabled(false);                 if (player == 0)                 {                     b[x][y].setText("X");                     check[x][y] = 0;                     player = 1;                     checkBoard();                 } else                 {                     b[x][y].setText("O");                     check[x][y] = 1;                     player = 0;                     checkBoard();                 }             }         }     // check the board to see if someone has won     private boolean checkBoard() {             boolean gameOver = false;             if (( check[1][1] == 0 && check[2][2] == 0 &&  check[3][3] == 0)                     || ( check[1][3] == 0 && check[2][2] == 0 &&  check[3][1] == 0)                     || ( check[1][2] == 0 &&  check[2][2] == 0 &&  check[3][2] == 0)                     || ( check[1][3] == 0 &&  check[2][3] == 0 &&  check[3][3] == 0)                     || ( check[1][1] == 0 &&  check[1][2] == 0 &&  check[1][3] == 0)                     || ( check[2][1] == 0 &&  check[2][2] == 0 &&  check[2][3] == 0)                     || ( check[3][1] == 0 &&  check[3][2] == 0 &&  check[3][3] == 0)                     || ( check[1][1] == 0 &&  check[2][1] == 0 &&  check[3][1] == 0)) {                 textView.setText("Player 1: You win!");                 gameOver = true;             } else if (( check[1][1] == 1 && check[2][2] == 1 && check[3][3] == 1)                     || ( check[1][3] == 1 && check[2][2] == 1 && check[3][1] == 1)                     || ( check[1][2] == 1 && check[2][2] == 1 && check[3][2] == 1)                     || ( check[1][3] == 1 && check[2][3] == 1 && check[3][3] == 1)                     || ( check[1][1] == 1 && check[1][2] == 1 && check[1][3] == 1)                     || ( check[2][1] == 1 && check[2][2] == 1 && check[2][3] == 1)                     || ( check[3][1] == 1 && check[3][2] == 1 && check[3][3] == 1)                     || ( check[1][1] == 1 &&  check[2][1] == 1 && check[3][1] == 1)) {                 textView.setText("Player 2: You Win!");                 gameOver = true;             } else {                 boolean empty = false;                 for (i = 1; i <= 3; i++) {                     for (j = 1; j <= 3; j++) {                         if (check[i][j] == 2) {                             empty = true;                             break;                         }                     }                 }                 if (!empty) {                     gameOver = true;                     textView.setText("Game over. It's a draw!");                  }             }if(gameOver)                  for(i=1;i<=3;i++)                 {                     for(j=1;j<=3;j++)                     {                         b[i][j].setEnabled(false);                     }                 }              return gameOver;         }     }  } 
           

Lista de respuestas

4
 
vote
vote
La mejor respuesta
 

Este es el principal problema con su código:

  cut1  

Esta línea es el mayor error en su código, y lo usa en todas partes, por ejemplo:

  cut2  

Hay una serie de lugares que usa ese tipo de horrible estructura duplicada. Desaste de eso. Una alternativa aceptable (más) es hacer algo como esto:

  cut3  

en un Bare Mínimo , incluso algo como esto todavía hará que su código sea más legible:

  cut4  

No hay necesidad de comprobar cut5 en su código, ya que está haciendo el exactamente lo mismo de cualquier manera, la única diferencia es que está modificando de manera trivial Los parametros. Manejarlo haciendo una clase separada 9988777665544332655443326

Una vez que haya hecho eso, debe refactar una serie de métodos de su código, pero no tiene sentido hasta que se ocupe del primer número.

 

This is the main problem with your code:

if(player==0) 

This one line is the biggest mistake in your code, and you use it everywhere, for instance:

if (player == 0) {   b[x][y].setText("X");   check[x][y] = 0;   player = 1;   checkBoard(); } else {   b[x][y].setText("O");   check[x][y] = 1;   player = 0;   checkBoard(); } 

There are a number of places you use that type of horrid duplicate structure. Get rid of it. A (more) acceptable alternative is to do something like this:

b[x][y].setText(player.getSymbol()); check[x][y] = player; player = player.next(); checkBoard(); 

At a bare minimum, even something like this would still make your code more readable:

b[x][y].setText(symbol[player]); check[x][y] = player; player = (player + 1)%2; checkBoard(); 

There is no need to check if(player==0) in your code, since you are doing the exact same thing either way - the only difference is that you are trivially modifying some of the parameters. Handle it by making a separate Player class to keep track of the differences those parameters.

Once you have done that, you should refactor out a number of methods from your code, but there is no point until you take care of the first issue.

 
 
 
 

Relacionados problema

0  Java Tic Tac Toe [cerrado]  ( Java tic tac toe ) 
cerrado. Esta pregunta es off-topic . Actualmente no está aceptando respuestas. ¿Quieres ...

4  Algoritmo tic tac toe usando las esterlinas  ( Tic tac toe algorithm using itertools ) 
Estoy buscando comentarios sobre la legibilidad de mi código y opiniones sobre el algoritmo Pick_Best. Hago esto para divertirme cuando tenga tiempo, y nunca ...

4  Tic-Tac-Toe en Python 2.x  ( Tic tac toe in python 2 x ) 
Esta es una clase llamada $db = new db; $user = $db->smartQuery(array( 'sql' => "SELECT UserName FROM `post` WHERE UserUID = :uid", 'par' => array('u...

6  PRIGO DE PODER TICTACTOO EN C #  ( Command prompt tictactoe in c ) 
Escribí un juego básico de comando TIC TAC TOE juego. Quiero saber qué se puede mejorar en términos de modelado y qué errores he hecho (si corresponde). vo...

2  C ++ Tic-tac-toe juego  ( C tic tac toe game ) 
Decidí hacer un simple juego de Tic-Tac-Toe en C ++ como un pequeño proyecto. ¡Toda ayuda y sugerencias son muy apreciadas! main.cpp: Exit3 tictototoe...

3  Simple programa C ++ para comprobar la victoria en Tictactoe  ( Simple c program to check win in tictactoe ) 
Dada una cadena de tamaño 9 que representa una placa TIC TAC TOE, determine si X o O ha ganado, o si la placa está en un estado no válido. Cualquier otro pers...

2  Juego TicTOCTOE en Python  ( Tictactoe game in python ) 
Solo me gustaría preguntar si hay que hacer las funciones play_Game() o is_move_valid() ya más eficiente. Por ejemplo, utilizando un bucle de algún tipo, ...

14  Ultimatoe - 2. El modelo  ( Ultimatoe 2 the model ) 
El modelo de juego ( Ultimatoe ) consta de 9 instancias de TIC-TAC-TOE ( UltimatoeBoard1 ) y alguna información auxiliar. Como el número de todos los tableros...

1  Juego Tic-Tac-Toe en JavaScript / HTML / CSS  ( Tic tac toe game in javascript html css ) 
Necesito ayuda con una pregunta que mi maestro quiere que hagamos para mañana. Me encantaría que intentes ayudarme con esto. Se deben implementar las siguie...

4  Aprendizaje de la máquina Tic-Tac-Toe  ( Tic tac toe machine learning ) 
Recientemente comencé a meterme en el aprendizaje de la máquina y quería escribir un "programa para principiantes" que aprendería a jugar a Tic Tac Toe. Este ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos