Rock, Paper, Scissors es un juego de manos jugado por dos personas. Ambas personas dirían "roca, papel, tijeras" y luego, al mismo tiempo, formarían uno de los tres objetos (roca, papel o tijera) con la mano extendida. El ganador está determinado por las formaciones de mano. Tijeras beats de papel, papel beats rock y rock beats tijeras. Si ambos jugadores juegan la misma formación de mano, se considera un empate. Vamos a escribir un juego simple en Java para simular Rock, Paper, Scissors, donde un jugador es el usuario y el otro jugador es la computadora.

Pasos

  1. 1 Crea la clase principal y llámala Piedra Papel tijeras. Esta será la clase donde escribiremos el juego. Puede elegir nombrarlo de otra manera, como Juego o Principal. Escribir en las declaraciones de métodos para el constructor y el método principal.
     público clase Piedra Papel tijeras  público Piedra Papel tijeras()   público estático vacío principal(Cuerda[] Args)    
  2. 2 Crea una enumeración para los gestos con las manos (roca, papel o tijera). Podríamos usar cadenas para representar el rock, el papel o las tijeras, pero una enumeración nos permite predefinir nuestras constantes, lo que significa que el uso de la enumeración es un mejor diseño. Llamaremos a nuestro tipo enum Movimiento con los valores ROCK, PAPELy TIJERAS.
     privado enum Movimiento  PIEDRA PAPEL TIJERAS  
  3. 3 Crea dos clases privadas Usuario y Computadora. Estas clases representarán a nuestros jugadores en el juego. Puedes elegir hacer públicas estas clases. los Usuario clase será la clase que solicite al usuario roca, papel o tijera, por lo que necesitaremos escribir un getMove () método. los Computadora la clase también necesitará tener un getMove () método para que la computadora también pueda hacer un movimiento. Pondremos marcadores de posición en estos métodos y los implementaremos más adelante. los Usuario clase requerirá un constructor que configure el Escáner objeto para tomar en la entrada del usuario. Pondremos el Escáner como un campo privado para el usuario y luego iniciarlo en el constructor. Dado que estamos usando el Escáner clase, tenemos que escribir una declaración de importación para ello en la parte superior de nuestro código. los Computadora la clase no requiere un constructor, por lo que no necesitamos escribir una; cuando iniciamos el Computadora objeto, simplemente llamaremos al constructor predeterminado. Esto es lo que nuestro Piedra Papel tijeras clase se ve ahora:
     importar java.util.Scanner; público clase Piedra Papel tijeras  privado enum Movimiento  PIEDRA PAPEL TIJERAS  privado clase Usuario  privado Scanner inputScanner; público Usuario()  inputScanner = nuevo Escáner(Sistema.en);  público Mover getMove()  // TODO: Implementar este método regreso nulo;   privado clase Computadora  público Mover getMove()  // TODO: Implementar este método regreso nulo;   público Piedra Papel tijeras()   público estático vacío principal(Cuerda[] Args)    
  4. 4 Escribe el getMove () método para el Computadora clase. Este método devolverá un azar Movimiento. Podemos obtener una variedad de Movimiento enumeraciones llamando al valores() método: Move.values ​​(). Para elegir un azar Movimiento Enumeración en esta matriz de valores, necesitamos generar un índice aleatorio que sea un número entero entre 0 y la longitud de nuestra matriz de valores. Para hacer esto, podemos usar el nextInt () método de la Aleatorio clase de la que tenemos que importar java.util. Después de obtener el índice aleatorio, podemos devolver el Movimiento de ese índice de nuestra matriz de valores.
     público Mover getMove()  Movimiento[] movimientos = Movimiento.valores(); Aleatorio aleatorio = nuevo Aleatorio(); En t índice = aleatorio.nextInt(movimientos.longitud); regreso movimientos[índice];  
  5. 5 Escribe el getMove () método para el Usuario clase. Este método devolverá un Movimiento correspondiente a lo que el usuario ha ingresado. Esperaremos que el usuario escriba "roca", "papel" o "tijeras". Primero, necesitamos pedirle al usuario una entrada: System.out.print ("¿Piedra, papel o tijera?"). Luego usa el Proxima linea() método de la Escáner objeto para obtener la entrada del usuario como una cadena. Ahora necesitamos verificar si el usuario ha enviado un movimiento válido, pero podemos ser indulgentes si el usuario ha escrito mal una palabra. Así que solo comprobaremos si la primera letra de la entrada del usuario es "R" (para rock), "P" (para papel) o "S" (para tijeras), y no nos importará el caso porque primero usaremos el toUpperCase () método de la Cuerda clase para hacer que el usuario ingrese la cadena en mayúsculas. Si el usuario no ha ingresado una entrada remotamente correcta, le avisaremos nuevamente al usuario. Luego, dependiendo de lo que el usuario haya ingresado, le devolveremos el movimiento correspondiente.
     público Mover getMove()  // Indicar al usuario Sistema.fuera.impresión("¿Piedra, papel o tijeras?"); // Obtener la entrada del usuario Cuerda entrada del usuario = inputScanner.Proxima linea(); entrada del usuario = entrada del usuario.toUpperCase(); carbonizarse primera letra = entrada del usuario.CharAt(0); Si (primera letra == 'R' || primera letra == 'PAG' || primera letra == 'S')  // El usuario ha ingresado una entrada válida cambiar (primera letra)  caso 'R': regreso Movimiento.ROCK; caso 'PAG': regreso Movimiento.PAPEL; caso 'S': regreso Movimiento.TIJERAS;   // El usuario no ha ingresado una entrada válida. Preguntar de nuevo. regreso getMove();  
  6. 6 Escribe un juega de nuevo() método para el Usuario clase. El usuario debería poder jugar el juego una y otra vez. Para determinar si el usuario quiere volver a jugar, necesitamos escribir un juega de nuevo() método que devuelve un booleano que le dice al juego si el usuario ha determinado jugar de nuevo o no. En este método, estamos usando el Escáner que previamente habíamos iniciado en el constructor para obtener un "Sí" o un "No" del usuario. Solo comprobaremos si la primera letra es 'Y' para determinar si el usuario desea volver a jugar. Cualquier otra entrada significará que el usuario no quiere jugar de nuevo.
     público booleano juega de nuevo()  Sistema.fuera.impresión("¿Quieres jugar de nuevo? "); Cuerda entrada del usuario = inputScanner.Proxima linea(); entrada del usuario = entrada del usuario.toUpperCase(); regreso entrada del usuario.CharAt(0) == 'Y';  
  7. 7 Conecta el Usuario y Computadora clases juntas en el Piedra Papel tijeras clase. Ahora que hemos terminado de escribir el Usuario y Computadora clases, podemos enfocarnos en trabajar en nuestro juego real. Crear campos privados para el Usuario y Computadora clases en el Piedra Papel tijeras clase. Tendremos que acceder a estos campos para acceder al getMove () métodos cuando estamos jugando el juego. En el constructor para el Piedra Papel tijeras clase, inicie estos campos. También necesitaremos hacer un seguimiento del puntaje en userScore y computerScore campos, que necesitamos iniciar como 0 en el constructor. Necesitamos hacer un seguimiento de la cantidad de juegos también, que también será un campo iniciado como 0.
     privado Usuario usuario; privado Computadora de computadora; privado En t userScore; privado En t computerScore; privado En t numero de juegos; público Piedra Papel tijeras()  usuario = nuevo Usuario(); computadora = nuevo Computadora(); userScore = 0; computerScore = 0; numero de juegos = 0;  
  8. 8 Extender el Movimiento enum para incluir un método que nos diga qué movimiento gana en cada caso. Necesitamos escribir un compararMoves () método que devuelve 0 si los movimientos son iguales, 1 si el movimiento actual supera al otro movimiento, y -1 si el movimiento actual pierde al otro movimiento. Esto será útil para determinar el ganador en el juego. Para implementar este método, primero devolveremos 0 si los movimientos son los mismos y, por lo tanto, tenemos un empate. Luego, escriba una declaración de cambio para devolver 1 o -1.
     privado enum Movimiento  PIEDRA PAPEL TIJERAS; / ** * Compara este movimiento con otro movimiento para determinar un empate, una victoria o * una pérdida. * * @param otherMove * move para comparar con * @return 1 si este movimiento supera al otro movimiento, -1 si este movimiento pierde a * el otro movimiento, 0 si estos movimientos empatan * / público En t compararMoves(Mover otroMove)  // Corbata Si (esta == otherMove) regreso 0; cambiar (esta)  caso ROCK: regreso (otherMove == TIJERAS ? 1 : -1); caso PAPEL: regreso (otherMove == ROCK ? 1 : -1); caso TIJERAS: regreso (otherMove == PAPEL ? 1 : -1);  // Nunca debería llegar aquí regreso 0;   
  9. 9 Crear un empezar juego() método en el Piedra Papel tijeras clase. Este método será el juego del juego. Comience poniendo un simple System.out.println en el método.
     público vacío empezar juego()  Sistema.fuera.println("¡PIEDRA PAPEL TIJERAS!");  
  10. 10 Obtener movimientos del usuario y la computadora. En el empezar juego() método, use el getMove () métodos del Usuario clase y el Computadora clase para obtener el usuario y los movimientos de la computadora.
     Mover usuarioMove = usuario.getMove(); Mover computadoraMove = computadora.getMove(); Sistema.fuera.println("\norteTú jugaste " + userMove + "."); Sistema.fuera.println("Computadora jugada" + computerMove + ".\norte"); 
  11. 11 Compare los dos movimientos y determine si el usuario ganó o ganó la computadora. Utilizar el compararMoves () método de la Movimiento enum para determinar si el usuario ganó o no. Si el usuario ganó, incremente el puntaje del usuario en 1. Si el usuario perdió, incremente el puntaje del equipo en 1. Si hubo un empate, no incremente ninguno de los puntajes. Luego, incremente la cantidad de juegos jugados por uno.
     En t compararMoves = userMove.compararMoves(computerMove); cambiar (compararMoves)  caso 0: // Corbata Sistema.fuera.println("¡Corbata!"); descanso; caso 1: // El usuario gana Sistema.fuera.println(userMove + "latidos" + computerMove + ". ¡Ganaste!"); userScore++; descanso; caso -1: // La computadora gana Sistema.fuera.println(computerMove + "latidos" + userMove + ". Perdiste."); computerScore++; descanso;  numero de juegos++; 
  12. 12 Pregunte si el usuario quiere jugar de nuevo. Si el usuario quiere jugar nuevamente, llame empezar juego() de nuevo. De lo contrario, llame printGameStats () que imprimirá las estadísticas del juego. Escribiremos este método en el siguiente paso.
     Si (usuario.juega de nuevo())  Sistema.fuera.println(); empezar juego();  más  printGameStats();  
  13. 13 Escribe el printGameStats () método. Este método mostrará las estadísticas del juego: número de victorias, número de derrotas, número de vínculos, número de juegos jugados y porcentaje de juegos ganados por el usuario. El porcentaje de juegos ganados se calcula por (# wins + (# ties / 2)) / (# juegos jugados). Este método usa System.out.printf para imprimir texto formateado.
     privado vacío printGameStats()  En t gana = userScore; En t pérdidas = computerScore; En t corbatas = numero de juegos - userScore - computerScore; doble porcentajeWon = (gana + ((doble) corbatas) / 2) / numero de juegos; // Line Sistema.fuera.impresión("+"); printDashes(68); Sistema.fuera.println("+"); // Imprimir títulos Sistema.fuera.printf("|% 6s |% 6s |% 6s |% 12s |% 14s |\norte", "GANAS", "PÉRDIDAS", "CORBATAS", "JUEGOS JUGADOS", "PORCENTAJE GANADO"); // Line Sistema.fuera.impresión("|"); printDashes(10); Sistema.fuera.impresión("+"); printDashes(10); Sistema.fuera.impresión("+"); printDashes(10); Sistema.fuera.impresión("+"); printDashes(16); Sistema.fuera.impresión("+"); printDashes(18); Sistema.fuera.println("|"); // Imprimir valores Sistema.fuera.printf("|% 6d |% 6d |% 6d |% 12d |% 13.2f %% |\norte", victorias, derrotas, empates, numberOfGames, porcentajeWon * 100); // Line Sistema.fuera.impresión("+"); printDashes(68); Sistema.fuera.println("+");  
  14. 14 Comience el juego en la clase principal. En la clase principal, inicialice una instancia de Piedra Papel tijeras clase y llame al empezar juego() método.
     público estático vacío principal(Cuerda[] Args)  Juego RockPaperScissors = nuevo Piedra Papel tijeras(); juego.empezar juego();  
  15. 15 Prueba tu juego. Ahora que hemos hecho todo el esfuerzo de escribir el juego Rock, Paper, Scissors, ¡es hora de compilar y probar todo!