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.

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çapara 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()-}}
    Artigos Relacionados