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 Crea la clase principal y llámala
Piedra Papel tijeras
. Esta será la clase donde escribiremos el juego. Puede elegir nombrarlo de otra manera, comoJuego
oPrincipal
. 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 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 valoresROCK
,PAPEL
yTIJERAS
.privado enum Movimiento PIEDRA PAPEL TIJERAS
- 3 Crea dos clases privadas
Usuario
yComputadora
. Estas clases representarán a nuestros jugadores en el juego. Puedes elegir hacer públicas estas clases. losUsuario
clase será la clase que solicite al usuario roca, papel o tijera, por lo que necesitaremos escribir ungetMove ()
método. losComputadora
la clase también necesitará tener ungetMove ()
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. losUsuario
clase requerirá un constructor que configure elEscáner
objeto para tomar en la entrada del usuario. Pondremos elEscáner
como un campo privado para el usuario y luego iniciarlo en el constructor. Dado que estamos usando elEscáner
clase, tenemos que escribir una declaración de importación para ello en la parte superior de nuestro código. losComputadora
la clase no requiere un constructor, por lo que no necesitamos escribir una; cuando iniciamos elComputadora
objeto, simplemente llamaremos al constructor predeterminado. Esto es lo que nuestroPiedra 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 Escribe el
getMove ()
método para elComputadora
clase. Este método devolverá un azarMovimiento
. Podemos obtener una variedad deMovimiento
enumeraciones llamando alvalores()
método:Move.values ()
. Para elegir un azarMovimiento
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 elnextInt ()
método de laAleatorio
clase de la que tenemos que importarjava.util
. Después de obtener el índice aleatorio, podemos devolver elMovimiento
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 Escribe el
getMove ()
método para elUsuario
clase. Este método devolverá unMovimiento
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 elProxima linea()
método de laEscá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 eltoUpperCase ()
método de laCuerda
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 Escribe un
juega de nuevo()
método para elUsuario
clase. El usuario debería poder jugar el juego una y otra vez. Para determinar si el usuario quiere volver a jugar, necesitamos escribir unjuega 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 elEscá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 Conecta el
Usuario
yComputadora
clases juntas en elPiedra Papel tijeras
clase. Ahora que hemos terminado de escribir elUsuario
yComputadora
clases, podemos enfocarnos en trabajar en nuestro juego real. Crear campos privados para elUsuario
yComputadora
clases en elPiedra Papel tijeras
clase. Tendremos que acceder a estos campos para acceder algetMove ()
métodos cuando estamos jugando el juego. En el constructor para elPiedra Papel tijeras
clase, inicie estos campos. También necesitaremos hacer un seguimiento del puntaje enuserScore
ycomputerScore
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 Extender el
Movimiento
enum para incluir un método que nos diga qué movimiento gana en cada caso. Necesitamos escribir uncompararMoves ()
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 Crear un
empezar juego()
método en elPiedra Papel tijeras
clase. Este método será el juego del juego. Comience poniendo un simpleSystem.out.println
en el método.público vacío empezar juego() Sistema.fuera.println("¡PIEDRA PAPEL TIJERAS!");
- 10 Obtener movimientos del usuario y la computadora. En el
empezar juego()
método, use elgetMove ()
métodos delUsuario
clase y elComputadora
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 Compare los dos movimientos y determine si el usuario ganó o ganó la computadora. Utilizar el
compararMoves ()
método de laMovimiento
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 Pregunte si el usuario quiere jugar de nuevo. Si el usuario quiere jugar nuevamente, llame
empezar juego()
de nuevo. De lo contrario, llameprintGameStats ()
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 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 usaSystem.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 Comience el juego en la clase principal. En la clase principal, inicialice una instancia de
Piedra Papel tijeras
clase y llame alempezar juego()
método.público estático vacío principal(Cuerda[] Args) Juego RockPaperScissors = nuevo Piedra Papel tijeras(); juego.empezar juego();
- 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!
Facebook
Twitter
Google+