Com fer un joc de roca, paper i tisores a Java (amb imatges)

Taula de continguts:

Com fer un joc de roca, paper i tisores a Java (amb imatges)
Com fer un joc de roca, paper i tisores a Java (amb imatges)

Vídeo: Com fer un joc de roca, paper i tisores a Java (amb imatges)

Vídeo: Com fer un joc de roca, paper i tisores a Java (amb imatges)
Vídeo: How to add NOISE (GRAIN) TEXTURE without any brushes | Illustrator tutorial 2024, Maig
Anonim

Rock, Paper, Scissors és un joc de mans jugat per dues persones. Totes dues persones dirien "roca, paper, tisores" i després formarien simultàniament un dels tres objectes (roca, paper o tisores) amb la mà estesa. El guanyador està determinat per les formacions de mans. Les tisores vencen el paper, el paper a la roca i la roca a les tisores. Si els dos jugadors juguen la mateixa formació de mans, es considera un empat. Escriurem un joc senzill en Java per simular Rock, Paper, Scissors on un jugador és l’usuari i l’altre jugador l’ordinador.

Passos

1585279 1 1
1585279 1 1

Pas 1. Creeu la classe principal i anomeneu-la

Pedra paper tisores

.

Aquesta serà la classe on escriurem el joc. Podeu optar per anomenar-lo a una altra cosa com ara

Joc

o bé

Principal

. Escriviu en declaracions de mètodes per al constructor i el mètode principal.

classe pública RockPaperScissors {public RockPaperScissors () {} public static void main (String args) {}}

1585279 2 1
1585279 2 1

Pas 2. Creeu una enumeració per als gestos amb les mans (roca, paper o tisores)

Podríem fer servir cordes per representar roca, paper o tisores, però una enumeració ens permet predefinir les nostres constants, cosa que significa que l’ús de l’enumeració és un millor disseny. Anomenarem al nostre tipus enum

Mou

amb els valors

ROCK

PAPER

i

TISORES

privat privat Move {ROCK, PAPER, SCISSORS}

1585279 3 1
1585279 3 1

Pas 3. Creeu dues classes privades

Usuari

i

Ordinador

.

Aquestes classes representaran els nostres jugadors en el joc. Podeu fer públiques aquestes classes. El

Usuari

class serà la classe que demana a l'usuari roca, paper o tisores, de manera que haurem d'escriure un

getMove ()

mètode. El

Ordinador

la classe també haurà de tenir un

getMove ()

mètode perquè l'ordinador també pugui fer un moviment. Posarem espais reservats en aquests mètodes i els implementarem més endavant. El

Usuari

La classe requerirà un constructor que configure el fitxer

Escàner

objecte per introduir l'entrada de l'usuari. Posarem el

Escàner

com a camp privat per a l'usuari i després iniciar-lo al constructor. Ja que estem utilitzant el fitxer

Escàner

class, hem d’escriure una declaració d’importació a la part superior del nostre codi. El

Ordinador

class no requereix un constructor, de manera que no cal escriure'n cap; quan iniciem el

Ordinador

objecte, només anomenarem el constructor per defecte. Això és el que el nostre

Pedra paper tisores

la classe es veu ara:

importar java.util. Scanner; classe pública RockPaperScissors {private enum Move {ROCK, PAPER, SCISSORS} classe privada Usuari {private Scanner inputScanner; Usuari públic () {inputScanner = nou escàner (System.in); } public Move getMove () {// TODO: implementa aquest mètode return null; }} classe privada Computer {public Move getMove () {// TODO: implementa aquest mètode return null; }} public RockPaperScissors () {} public static void main (String args) {}}

1585279 4 1
1585279 4 1

Pas 4. Escriviu el

getMove ()

mètode per al

Ordinador

classe.

Aquest mètode retornarà aleatòriament

Mou

. Podem obtenir un ventall de

Mou

enumeracions trucant al

values ()

mètode:

Move.values ()

. Per triar un aleatori

Mou

Enumeració en aquesta matriu de valors, hem de generar un índex aleatori que sigui un enter entre 0 i la longitud de la nostra matriu de valors. Per fer-ho, podem utilitzar el fitxer

nextInt ()

mètode de la

Aleatori

classe que hem d'importar

java.util

. Després d’haver obtingut l’índex aleatori, podem retornar el fitxer

Mou

d'aquest índex de la nostra matriu de valors.

public Move getMove () {Move moves = Move.values (); Random random = new Random (); int index = random.nextInt (moves.length); retorn es mou [índex]; }

1585279 5 1
1585279 5 1

Pas 5. Escriviu el

getMove ()

mètode per al

Usuari

classe.

Aquest mètode retornarà un fitxer

Mou

corresponent al que ha introduït l’usuari. Esperarem que l'usuari escrigui "roca", "paper" o "tisores". En primer lloc, hem de demanar a l'usuari una entrada:

System.out.print ("Roca, paper o tisores?")

. A continuació, utilitzeu el fitxer

nextLine ()

mètode de la

Escàner

objecte per obtenir l'entrada de l'usuari com una cadena. Ara hem de comprovar si l'usuari ha enviat un moviment vàlid, però podem ser indulgents si l'usuari ha escrit malament una paraula. Per tant, només comprovarem si la primera lletra de l'entrada de l'usuari és "R" (per a roca), "P" (per a paper) o "S" (per a tisores), i no ens importarà el cas perquè primer utilitzarem el

toUpperCase ()

mètode de la

Corda

class per fer que la cadena d'entrada de l'usuari sigui majúscula. Si l’usuari no ha introduït cap entrada remota correcta, tornarem a sol·licitar-lo. Després, en funció del que hagi introduït l’usuari, tornarem el moviment corresponent.

public Move getMove () {// Sol·licita a l'usuari System.out.print ("Roca, paper o tisores?"); // Obtén l'entrada d'usuari String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// L'usuari ha introduït un commutador d'entrada vàlid (firstLetter) {case 'R': return Move. ROCK; cas 'P': torna Move. PAPER; cas 'S': torna Move. SCISSORS; }} // L'usuari no ha introduït cap entrada vàlida. Pregunteu de nou. retorn getMove (); }

1585279 6
1585279 6

Pas 6. Escriviu un

juga un altre cop()

mètode per al

Usuari

classe.

L'usuari hauria de poder jugar el joc una i altra vegada. Per determinar si l’usuari vol reproduir-lo, hem d’escriure un

juga un altre cop()

mètode que retorna un booleà que indica al joc si l'usuari ha decidit tornar a jugar o no. En aquest mètode, fem servir el fitxer

Escàner

que prèviament havíem iniciat al constructor per obtenir un "Sí" o un "No" de l'usuari. Només comprovarem si la primera lletra és "Y" per determinar si l'usuari vol tornar a jugar. Qualsevol altra entrada significa que l'usuari no vol tornar a jugar.

public boolean playAgain () {System.out.print ("Voleu tornar a jugar?"); String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); return userInput.charAt (0) == 'Y'; }

1585279 7
1585279 7

Pas 7. Connecteu el

Usuari

i

Ordinador

classes junts al

Pedra paper tisores

classe.

Ara que hem acabat d’escriure el

Usuari

i

Ordinador

classes, ens podem centrar a treballar en el nostre joc real. Creeu camps privats per a

Usuari

i

Ordinador

classes a la

Pedra paper tisores

classe. Haurem d’accedir a aquests camps per accedir al

getMove ()

mètodes quan estem jugant al joc. Al constructor per al

Pedra paper tisores

classe, inicieu aquests camps. També haurem de fer un seguiment de la puntuació

userScore

i

computerScore

camps, que hem d’iniciar com a 0 al constructor. També hem de fer un seguiment del nombre de jocs, que també serà un camp iniciat com a 0.

usuari d'usuari privat; ordinador privat; private int userScore; private int computerScore; private int numberOfGames; RockPaperScissors públic () {usuari = nou usuari (); computer = new Computer (); userScore = 0; computerScore = 0; numberOfGames = 0; }

1585279 8
1585279 8

Pas 8. Amplieu el fitxer

Mou

enum per incloure un mètode que ens indiqui quin moviment guanya en cada cas.

Hem d’escriure un

compareMoves ()

mètode que retorna 0 si els moviments són els mateixos, 1 si el moviment actual supera l’altre moviment i -1 si el moviment actual perd per l’altre moviment. Això serà útil per determinar el guanyador del joc. Per implementar aquest mètode, primer retornarem 0 si els moviments són els mateixos i, per tant, tenim un empat. A continuació, escriviu una instrucció switch per retornar 1 o -1.

private enum Move {ROCK, PAPER, TISORES; / ** * Compara aquest moviment amb un altre moviment per determinar un empat, una victòria o una * pèrdua. * * @param otherMove * move to compare to * @return 1 if this move beats the other move, -1 if this move perds to * the other move, 0 if these moves tie * / public int compareMoves (Move otherMove) {/ / Empata si (aquest == altreMou) retorna 0; switch (this) {case ROCK: return (otherMove == TISORES? 1: -1); cas PAPER: return (otherMove == ROCK? 1: -1); TISORES de cas: return (otherMove == PAPER? 1: -1); } // No hauria d’arribar mai aquí retornar 0; }}

1585279 9
1585279 9

Pas 9. Creeu un

començar el joc()

mètode a

Pedra paper tisores

classe.

Aquest mètode serà el joc del joc. Comenceu posant un senzill

System.out.println

en el mètode.

public void startGame () {System.out.println ("ROCK, PAPER, TISORES!"); }

1585279 10
1585279 10

Pas 10. Obteniu moviments de l'usuari i l'ordinador

A la

començar el joc()

mètode, utilitzeu el mètode

getMove ()

mètodes de

Usuari

classe i el

Ordinador

classe per obtenir els moviments de l'usuari i l'ordinador.

Move userMove = user.getMove (); Mou computerMove = computer.getMove (); System.out.println ("\ nHeu jugat" + userMove + "."); System.out.println ("S'ha reproduït l'ordinador" + ComputerMove + ". / N");

1585279 11
1585279 11

Pas 11. Compareu els dos moviments i determineu si l’usuari ha guanyat o l’equip ha guanyat

Utilitzar el

compareMoves ()

mètode de la

Mou

enum to per determinar si l'usuari ha guanyat o no. Si l'usuari ha guanyat, augmenteu la puntuació de l'usuari en 1. Si l'usuari ha perdut, incrementeu la puntuació de l'ordinador en 1. Si hi ha hagut un empat, no incrementeu cap de les puntuacions. A continuació, incrementeu el nombre de partides jugades per una.

int compareMoves = userMove.compareMoves (computerMove); switch (compareMoves) {case 0: // Tie System.out.println ("Tie!"); trencar; cas 1: // L'usuari guanya System.out.println (userMove + "beats" + computerMove + ". Has guanyat!"); userScore ++; trencar; cas -1: // L'equip guanya System.out.println (computerMove + "beats" + userMove + ". Has perdut."); computerScore ++; trencar; } numberOfGames ++;

1585279 12
1585279 12

Pas 12. Pregunteu si l'usuari vol tornar a jugar

Si l'usuari vol tornar a jugar, truqueu

començar el joc()

de nou. En cas contrari, truqueu

printGameStats ()

que imprimirà les estadístiques del joc. Escriure aquest mètode al següent pas.

if (user.playAgain ()) {System.out.println (); començar el joc(); } else {printGameStats (); }

1585279 13
1585279 13

Pas 13. Escriviu el

printGameStats ()

mètode.

Aquest mètode mostrarà les estadístiques del joc: nombre de victòries, nombre de pèrdues, nombre d'empats, nombre de jocs jugats i percentatge de jocs guanyats per l'usuari. El percentatge de jocs guanyats es calcula per (# victòries + (# empats / 2)) / (# jocs jugats). Aquest mètode utilitza

System.out.printf

per imprimir text formatat.

private void printGameStats () {int wins = userScore; int pèrdues = computerScore; int ties = numberOfGames - userScore - computerScore; doble percentatge Guanyat = (guanya + ((doble) empats) / 2) / nombreOfGames; // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); // Imprimir títols System.out.printf ("|% 6s |% 6s |% 6s |% 12s |% 14s | / n", "GUANYA", "PÈRDUES", "LLIGATS", "JOCS JUGATS", "PORCENTATGE GUANYAT "); // Line System.out.print ("|"); printDashes (10); System.out.print ("+"); printDashes (10); System.out.print ("+"); printDashes (10); System.out.print ("+"); printDashes (16); System.out.print ("+"); printDashes (18); System.out.println ("|"); // Imprimeix els valors System.out.printf ("|% 6d |% 6d |% 6d |% 12d |% 13.2f %% | / n", victòries, pèrdues, empats, nombreDeJocs, percentatge Guanyat * 100); // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); }

1585279 14
1585279 14

Pas 14. Comenceu el joc a la classe principal

A la classe principal, inicialitzeu una instància del fitxer

Pedra paper tisores

classe i truqueu al

començar el joc()

mètode.

public static void main (String args) {Joc RockPaperScissors = nou RockPaperScissors (); game.startGame (); }

1585279 15
1585279 15

Pas 15. Proveu el vostre joc

Ara que hem passat tot l’esforç d’escriure el joc Rock, Paper, Scissors, és hora de compilar i provar-ho tot.

Programa de mostra

importa java.util. Random; importar java.util. Scanner; classe pública RockPaperScissors {usuari d'usuari privat; ordinador privat; private int userScore; private int computerScore; private int numberOfGames; private enum Move {ROCK, PAPER, TISORES; / ** * Compara aquest moviment amb un altre moviment per determinar un empat, una victòria o una * pèrdua. * * @param otherMove * move to compare to * @return 1 if this move beats the other move, -1 if this move perds to * the other move, 0 if these moves tie * / public int compareMoves (Move otherMove) {/ / Empateu si (this == otherMove) retorna 0; switch (this) {case ROCK: return (otherMove == TISORES? 1: -1); cas PAPER: return (otherMove == ROCK? 1: -1); TISORES de cas: return (otherMove == PAPER? 1: -1); } // No hauria d’arribar mai aquí retornar 0; }} usuari de classe privada {private Scanner inputScanner; Usuari públic () {inputScanner = nou escàner (System.in); } public Move getMove () {// Sol·licita a l'usuari System.out.print ("Roca, paper o tisores?"); // Obteniu l'entrada d'usuari String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// L'usuari ha introduït un commutador d'entrada vàlid (firstLetter) {case 'R': return Move. ROCK; cas 'P': torna Move. PAPER; cas 'S': torna Move. SCISSORS; }} // L'usuari no ha introduït cap entrada vàlida. Pregunteu de nou. retorn getMove (); } public boolean playAgain () {System.out.print ("Voleu tornar a jugar?"); String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); return userInput.charAt (0) == 'Y'; }} private class Computer {public Move getMove () {Move moves = Move.values (); Random random = new Random (); int index = random.nextInt (moves.length); retorn es mou [índex]; }} public RockPaperScissors () {usuari = usuari nou (); computer = new Computer (); userScore = 0; computerScore = 0; numberOfGames = 0; } public void startGame () {System.out.println ("ROCK, PAPER, SCISSORS!"); // Obtenir moviments Move userMove = user.getMove (); Mou computerMove = computer.getMove (); System.out.println ("\ nHeu jugat" + userMove + "."); System.out.println ("S'ha reproduït l'ordinador" + ComputerMove + ". / N"); // Compara moviments i determina el guanyador int compareMoves = userMove.compareMoves (computerMove); switch (compareMoves) {case 0: // Tie System.out.println ("Tie!"); trencar; cas 1: // L'usuari guanya System.out.println (userMove + "beats" + computerMove + ". Has guanyat!"); userScore ++; trencar; cas -1: // L'equip guanya System.out.println (computerMove + "beats" + userMove + ". Has perdut."); computerScore ++; trencar; } numberOfGames ++; // Demaneu a l'usuari que torni a jugar si (user.playAgain ()) {System.out.println (); començar el joc(); } else {printGameStats (); }} / ** * Imprimeix les estadístiques del joc. Calcula els empats com a 1/2 una victòria en * percentatge de guanys. * / private void printGameStats () {int wins = userScore; int pèrdues = computerScore; int ties = numberOfGames - userScore - computerScore; doble percentatge Guanyat = (guanya + ((doble) empats) / 2) / nombreOfGames; // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); // Imprimir títols System.out.printf ("|% 6s |% 6s |% 6s |% 12s |% 14s | / n", "GUANYA", "PÈRDUES", "LLIGATS", "JOCS JUGATS", "PORCENTATGE GUANYAT "); // Line System.out.print ("|"); printDashes (10); System.out.print ("+"); printDashes (10); System.out.print ("+"); printDashes (10); System.out.print ("+"); printDashes (16); System.out.print ("+"); printDashes (18); System.out.println ("|"); // Imprimir valors System.out.printf ("|% 6d |% 6d |% 6d |% 12d |% 13.2f %% | / n", victòries, pèrdues, empats, nombreDeJocs, percentatge Guanyat * 100); // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); } private void printDashes (int numberOfDashes) {for (int i = 0; i <numberOfDashes; i ++) {System.out.print ("-"); }} public static void main (String args) {Joc RockPaperScissors = new RockPaperScissors (); game.startGame (); }}

Recomanat: