Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

271
Views
Tablero de ajedrez que verificará si una pieza ingresada en el tablero está en una posición válida

Soy muy nuevo en la programación de Java en general y acabo de comenzar a usar matrices 2D. Lo que estoy tratando de hacer es crear un programa que cree un tablero de ajedrez de 8x8 y le pida al usuario que ingrese cadenas (piezas) para almacenarlas en el tablero de ajedrez. Por ahora, no quiero verificar si la pieza es una pieza de ajedrez válida o no, pero quiero asegurarme de que la ubicación sea válida (es decir, cuando se le solicite colocar una pieza y el usuario elija una coordenada no válida, el programa le dirá el usuario que está mal). De lo contrario, si la coordenada es correcta, almacenará la cadena, que usaré otra clase para imprimir la(s) cadena(s) y enviarlas al usuario, así como también dónde están ubicadas. Como es un tablero de ajedrez, estoy tratando de convertir 8x8 a 8 seguido de un personaje de ag.

Esto es lo que tengo hasta ahora:

 public class ChessBoard { public static void main(String[] args) { char rows = 'a'; String spot; int[][] grid = new int[8][8]; for (int i = 0; i < grid.length; i++, rows++) { for (int col = 0; col < grid[i].length; col++) { System.out.print(rows + "" + (col + 1) + " "); } System.out.println(); } } }

Esto imprime el diseño del tablero de ajedrez, pero no estoy seguro de cómo pedirle al usuario una cadena en una coordenada válida, por ejemplo, e5, que luego se puede imprimir en otra clase.

Me gustaría que mi resultado esperado fuera algo como:

 Enter a coordinate: a5 Enter a piece to be placed here: Queen

Continúe hasta que el usuario desee ver lo que ha colocado:

 You have placed a Queen at a5

¡Cualquier ayuda será apreciada, gracias!

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Para obtener la posición del usuario, puede usar algo como

 // only once, to initialize the scanner Scanner scanner = new Scanner(System.in); // each time you need input from the user String input = scanner.next();

Para solicitar una posición, puede verificar si la entrada coincide con lo que espera y, de lo contrario, solicitar una nueva entrada:

 String input = null; // will be changed to a valid position boolean iLikeThisInput = false; // will be true if position is valid while ( ! iLikeThisInput) { System.out.println("Enter a coordinate (for example, a5): "); input = scanner.next(); iLikeThisInput = input.matches("[ag][1-8]"); // this is a regular expression }; // now we now that the input is valid int col = (int)(input.charAt(0) - 'a'); // 'a' is column 0: 'a' - 'a' = 0. int row = (int)(input.charAt(1) - '0'); // '0' is row 0: same trick

Las expresiones regulares probablemente sean nuevas para usted (si es nuevo en la programación), pero son muy poderosas para verificar si el texto coincide con un patrón determinado y se encuentran en todos los principales lenguajes de programación.

El truco de restar códigos de caracteres (últimas 2 líneas) funciona porque los códigos de caracteres para los dígitos 0123456789 y los del alfabeto abcd ... están en orden numérico/alfabético, de modo que escribir (int)('b'-'a') es lo mismo que escribir 1 .

Solo te faltará el código para obtener la pieza. Se puede construir fácilmente una expresión regular para muchas palabras usando | :

 input.matches("Bob|Robert|Rob"); // matches only Bob or Robert or Rob

La pieza final es convertir números enteros a nombres de piezas y viceversa. Recomiendo escribir dos métodos:

 public static String pieceToName(int piece) { /**/ }

y

 public static int nameToPiece(String name) { /**/ }

Usando la declaración de switch , puede implementar rápidamente ambos con su codificación preferida:

 switch(name) { case "Queen": return 9; case "Pawn": return 1; ... }

Tenga en cuenta que si comienza a construir un programa de juego de ajedrez real, tendrá que distinguir entre piezas blancas y negras. Una forma de hacerlo es usar números positivos para un color y negativos para el otro.

¡Buena suerte con tu programa!

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!