Como fazer um jogo de pedra, papel e tesoura em java
Rock Paper Scissors é um jogo de mão para duas pessoas. Ambos os jogadores devem dizer "pedra, papel e tesoura" e, simultaneamente, formando um dos três objetos (pedra, papel, tesoura) com uma mão estendida. O vencedor é determinado por formações de mão. Tesoura iates bater papel, papel batidas de rock e rock bate tesoura. Se ambos os jogadores têm a mesma formação de mão é considerado um empate. Escrever um jogo simples em Java para simular Rock, Paper, Scissors sobre um jogador é o usuário eo outro é o computador.
Conteúdo
passos
1
Criar e nomear a classe principal
PiedraPapelTijeras
. Esta será a classe que vai escrever o jogo. Você pode escolher para nomeá-la de outra forma, como jogo
ou principal
. Escrever declarações de método para o construtor eo método principal.público classe PiedraPapelTijeras {público PiedraPapelTijeras() {}público estático vazio principal(corda args) {}}
2
Criar uma lista de gestos com as mãos (pedra, papel e tesoura). Nós poderíamos usar cordas para representar tesouras de papel da rocha, mas uma enumeração nos permite predefinir a nossa constante, o que significa que o uso de resultados de enumeração em melhor design. Chamamos nosso tipo de enumeração
mudança
com os valores ROCA
, PAPEL
, e TESOURA
.privado enum mudança {Pedra, Papel, Tesoura}
3
Criar duas aulas particulares
usuário
e computador
. Estas classes representam os nossos jogadores no jogo. A aula usuário
a classe irá solicitar que o usuário escolha entre pedra, papel ou tesoura, para que escrever um método getMove ()
. A aula computador
Ele também deve ter um método getMove ()
de modo que o computador também pode fazer a sua jogada. Vamos colocar espaços reservados nesses métodos para implementá-las mais tarde. A aula usuário
requerem um construtor para definir o objecto Scanner
levará a entrada do usuário. Vamos colocar o Scanner
como um campo privado para o usuário e, em seguida, começar no construtor. Como estamos usando a classe Scanner
, Precisamos de escrever uma declaração de importação na parte superior do nosso código. A aula computador
Ele não requer um construtor, para que você não precisa escrever um- quando começamos o objeto computador
, estamos simplesmente chamando o construtor padrão. Isto é como parece agora nossa classe PiedraPapelTijeras
:importação java.util.Scanner-público classe PiedraPapelTijeras {privado enum mudança {Pedra, Papel, Tesoura}privado classe usuário {privado inputScanner Scanner-público usuário() {inputScanner = novo Scanner(sistema.em)-}público mover getMove() {// `TODO: Implementar este métodoretorno nulo-}}privado classe computador {público mover getMove() {// TODO: Implementar este métodoretorno nulo-}}público PiedraPapelTijeras() {}público estático vazio principal(corda args) {}}
4
método de gravação
getMove ()
para a classe computador
. Este método irá retornar você receber uma mudança
aleatória. Podemos obter uma matriz de enumerações mudança
chamar o método valores ()
: Move.values ()
. Para escolher uma enumeração aleatória mudança
nesta matriz de valores precisa para gerar um índice aleatório é um número inteiro entre 0 e o comprimento da nossa matriz de valores. Para fazer isso, podemos usar o método nextInt ()
da classe acaso
, que importar de java.util
. Depois de obter o índice aleatório, podemos voltar a mudança
que o índice da nossa matriz de valores.público mover getMove() {mover move = Mover.valores()-acaso acaso = novo acaso()-int índice = aleatória.nextInt(move-se.comprimento)-retorno movimentos-}
5
método de gravação
getMove ()
para a classe usuário
. Este método irá retornar uma mudança
correspondente ao que o usuário inseriu. Vamos supor que o usuário vai escrever rocha, papel ou tesoura. Primeiro temos de perguntar ao usuário para a entrada: System.out.print ("Pedra, papel ou tesoura?")
. Nós, então, usar o método nextLine ()
objeto Scanner
para receber a entrada do usuário como uma string. Agora, temos de verificar se o usuário entrou em uma jogada válida, mas podemos ser tolerantes com ortografia. Então, basta verificar para ver se a primeira letra digitada pelo usuário é um R (Para rock), uma P (Paper) ou T (Para uma tesoura), independentemente de serem ou não sensível a maiúsculas e vamos usar o método toUpperCase ()
da classe corda
para capitalizar toda a entrada do usuário. Se o usuário inserir uma entrada incorreta, vamos pedir novamente para entrar. Então, dependendo do que o usuário inseriu, um jogo restituição correspondente.público mover getMove() {Pedindo que o usuário //sistema.fora.impressão("Pedra, papel ou tesoura? ")-// Obter a entrada do usuáriocorda usuarioInput = inputScanner.nextLine()-usuarioInput = usuarioInput.toUpperCase()-carbonizar firstLetter = usuarioInput.charAt(0)-se (firstLetter == `R` || firstLetter == `P` || firstLetter == `T`) {// Usuário entrou em uma dados válidosinterruptor (firstLetter) {caso `R`:retorno Mover.ROCA-caso `P`:retorno Mover.PAPEL-caso `T`:retorno Mover.TESOURA-}}// Usuário não entrou dados válidos. Reaplicar.retorno getMove()-}
6
Escreva um método
playagain ()
para a classe usuário
. O usuário deve ser capaz de jogar novamente e novamente. Para determinar se o usuário quer jogar novamente, precisamos escrever um método playagain ()
que retorna um valor booleano que diz se o usuário tenha determinado para jogar novamente ou não. Neste método, usamos o Scanner
tínhamos anteriormente iniciado no construtor de uma sim ou não usuário. Basta verificar para ver se a primeira letra é um `S` para determinar se o usuário quer jogar novamente. Qualquer outra entrada significa que o usuário não quer jogar novamente.público boolean playagain() {sistema.fora.impressão("Você quer jogar de novo? ")-corda usuarioInput = inputScanner.nextLine()-usuarioInput = usuarioInput.toUpperCase()-retorno usuarioInput.charAt(0) == `S`-}
7
Ligue aulas
usuário
e computador
junto com a classe PiedraPapelTijeras
. Agora que já terminou aulas de redação usuário
e computador
, podemos nos concentrar no jogo em si. Criar campos privados para as classes usuário
e computador
Na classe PiedraPapelTijeras
. Vamos acessar esses campos para métodos de acesso getMove ()
quando estamos a jogar. No construtor para a classe PiedraPapelTijeras
, inicia nestes domínios. Devemos também ter em conta os pontos nos campos usuarioPuntos
e computadoraPuntos
, que temos de começar a 0 no construtor. Nós também precisa manter o controle do número de jogos, que também será iniciado em um campo 0.privado usuario-privado computador computador-privado int usuarioPuntos-privado int computadoraPuntos-privado int cantidadDeJuegos-público PiedraPapelTijeras() {usuário = novo usuário()-computador = novo computador()-usuarioPuntos = 0-computadoraPuntos = 0-cantidadDeJuegos = 0-}
8
Alarga a lista
mudança
para incluir um método para nos dizer quem vai ganhar em cada caso. Temos de escrever um método compareMoves ()
ele retorna 0 se as peças são as mesmas, 1 se o movimento atual bate o outro, e -1 se o movimento atual perde para o outro. Isso será útil para determinar o vencedor do jogo. Para implementar este método, primeiro reembolso 0 se as peças são as mesmas, e, portanto, teremos um empate. Em seguida, escreva uma instrução switch para retornar 1 ou -1.privado enum mudança {Pedra, Papel, Tesoura-/ *** Comparar este movimento com um outro movimento para determinar empate, vitória ou derrota *. ** * @param OtherMove movimento para comparar * @return 1 se este movimento bate o outro, -1 se este movimento perde para * outro, 0 se as peças amarrar * /público int compareMoves(mover otherMove) {// Desenhase (ESTA == otherMove)retorno 0-interruptor (ESTA) {caso ROCA:retorno (otherMove == TESOURA ? 1 : -1)-caso PAPEL:retorno (otherMove == ROCA ? 1 : -1)-caso TESOURA:retorno (otherMove == PAPEL ? 1 : -1)-}// Nunca deve ficar aquiretorno 0-}}
9
Um método
startGame ()
Na classe PiedraPapelTijeras
. Este método será o desenvolvimento do jogo. Comece por colocar uma simples System.out.println
no método.público vazio startGame() {sistema.fora.println("Pedra, papel, tesoura!")-}
10
Obter os movimentos do usuário e computador. No método
startGame ()
, métodos utilizados getMove ()
da classe usuário
e classe computador
joga pelo utilizador e computador.mover usuarioMove = usuário.getMove()-mover computadoraMove = computador.getMove()-sistema.fora.println(" nvocê jogou " + usuarioMove + ".")-sistema.fora.println("computador jogado " + computadoraMove + ". n")-
11
Compare os dois jogos e ganhou determina se o usuário ou computador. Use o método
compareMoves ()
enum mudança
para determinar se ou não o usuário ganhou. Se você ganhou o usuário aumenta os usuários de pontuação 1. Se o usuário perdeu aumenta a pontuação do computador 1. Se houve um empate, não se pode aumentar a qualquer das pontuações. Em seguida, aumenta o número de jogos em um.int compareMoves = usuarioMove.compareMoves(computadoraMove)-interruptor (compareMoves) {caso 0: // Desenhasistema.fora.println("Desenhar!")-pausa-caso 1: // Win Usuáriosistema.fora.println(usuarioMove + " batimentos " + computadoraMove + ". Você ganhou!")-usuarioPuntos++-pausa-caso -1: // Computador Winsistema.fora.println(computadoraMove + " batimentos " + usuarioMove + ". Você perdeu.")-computadoraPuntos++-pausa-}cantidadDeJuegos++-
12
Perguntar ao usuário se ele quer jogar novamente. Se o usuário quer jogar de novo, ele chama novamente
startGame ()
. Caso contrário, as chamadas printGameStats ()
que as estatísticas do jogo impressão. Nós escrevemos este método na próxima etapa.se (usuário.playagain()) {sistema.fora.println()-startGame()-} mais {printGameStats()-}
13
método de gravação
printGameStats ()
. Este método irá exibir estatísticas de jogo: número de vitórias, número de perdas, número de empates, número de jogos, porcentagem de vitórias e e usuário. A percentagem de jogos ganhos é calculada (# voctorias + (# desenha / 2)) / (jogos #). Este método utiliza System.out.printf
para imprimir texto formatado.privado vazio printGameStats() % 12d
14
Iniciar o jogo na classe principal. Na classe principal, inicializa uma instância da classe
PiedraPapelTijeras
e chama o método startGame ()
.público estático vazio principal(corda args) {jogo PiedraPapelTijeras = novo PiedraPapelTijeras()-jogo.startGame()-}
15
Teste o jogo. Agora, temos feito todos os esforços para escrever o jogo Pedra, Papel, Tesoura, é hora de compilar e tentar tudo!
Programa de amostra
importação java.util.Random-importação java.util.Scanner-público classe PiedraPapelTijeras {privado usuario-privado computador computador-privado int usuarioPuntos-privado int computadoraPuntos-privado int cantidadDeJuegos-privado enum mudança {Pedra, Papel, Tesoura-/ *** Compare esta peça uns com os outros para determinar se ele é um empate, uma vitória ou uma derrota *. ** * @param OtherMove movimento para comparar * @return 1 se este movimento bate o outro, este movimento -1 * perde para o outro, 0, se as peças amarrar * /público int compareMoves(mover otherMove) {// Desenhase (ESTA == otherMove)retorno 0-interruptor (ESTA) {caso ROCA:retorno (otherMove == TESOURA ? 1 : -1)-caso PAPEL:retorno (otherMove == ROCA ? 1 : -1)-caso TESOURA:retorno (otherMove == PAPEL ? 1 : -1)-}// Nunca deve ficar aquiretorno 0-}}privado classe usuário {privado inputScanner Scanner-público usuário() {inputScanner = novo Scanner(sistema.em)-}público mover getMove() {Pedindo que o usuário //sistema.fora.impressão("Pedra, papel ou tesoura? ")-// Obter a entrada do usuáriocorda usuarioInput = inputScanner.nextLine()-usuarioInput = usuarioInput.toUpperCase()-carbonizar firstLetter = usuarioInput.charAt(0)-se (firstLetter == `R` || firstLetter == `P` || firstLetter == `T`) {// Usuário entrou em uma dados válidosinterruptor (firstLetter) {caso `R`:retorno Mover.ROCA-caso `P`:retorno Mover.PAPEL-caso `T`:retorno Mover.TESOURA-}}// Usuário não entrou dados válidos. Reaplicar.retorno getMove()-}público boolean playagain() {sistema.fora.impressão("Você quer jogar de novo? ")-corda usuarioInput = inputScanner.nextLine()-usuarioInput = usuarioInput.toUpperCase()-retorno usuarioInput.charAt(0) == `S`-}}privado classe computador {público mover getMove() {mover move = Mover.valores()-acaso acaso = novo acaso()-int índice = aleatória.nextInt(move-se.comprimento)-retorno movimentos-}}público PiedraPapelTijeras() {usuário = novo usuário()-computador = novo computador()-usuarioPuntos = 0-computadoraPuntos = 0-cantidadDeJuegos = 0-}público vazio startGame() {sistema.fora.println("Pedra, papel, tesoura!")-// Obtem jogadomover usuarioMove = usuário.getMove()-mover computadoraMove = computador.getMove()-sistema.fora.println(" nvocê jogou " + usuarioMove + ".")-sistema.fora.println("computador jogado " + computadoraMove + ". n")-// Compare peças e determinar o vencedorint compareMoves = usuarioMove.compareMoves(computadoraMove)-interruptor (compareMoves) {caso 0: // Desenhasistema.fora.println("Desenhar!")-pausa-caso 1: // Win Usuáriosistema.fora.println(usuarioMove + " batimentos " + computadoraMove + ". Você ganhou!")-usuarioPuntos++-pausa-caso -1: // Computador Winsistema.fora.println(computadoraMove + " batimentos " + usuarioMove + ". Você perdeu.")-computadoraPuntos++-pausa-}cantidadDeJuegos++-// Avisar usuário para jogar novamentese (usuário.playagain()) {sistema.fora.println()-startGame()-} mais {printGameStats()-}}/ *** Estatísticas do jogo impressão. Calcule um empate, ½ vitória no percentual * vencedora. * /privado vazio printGameStats() n","VITÓRIAS", "TRILHAS", "TIES", "JOGOS", "Vencer Percentagem")-// Linhasistema.fora.impressão("privado vazio printDashes(int numberOfDashes) {para (int Eu = 0- Eu lt; numberOfDashes- Eu++) {sistema.fora.impressão("-")-}}público estático vazio principal(corda args) {jogo PiedraPapelTijeras = novo PiedraPapelTijeras()-jogo.startGame()-}}