Cum se face un joc de piatră, hârtie și foarfece în Java

Piatra, hârtia și foarfeca este un set de mâini pentru două persoane. Ambii jucători trebuie să spună "piatră, hârtie, foarfece" și să formeze simultan unul din cele trei obiecte (piatră, hârtie sau foarfece) cu o mână extinsă. Câștigătorul este determinat de formațiunile mâinilor. Foarfecele bate hârtia, hârtia bate piatra, iar piatra bate foarfecele. Dacă ambii jucători prezintă aceeași formare de mână, se consideră o remiză. Vom scrie un joc simplu în Java pentru a simula piatra, hârtia, foarfecele în care un jucător este cel de-al doilea și celălalt este calculatorul.

pași

1
Creați clasa principală și apelați-o PiedraPapelTijeras. Aceasta va fi clasa în care vom scrie jocul. Puteți alege să o numiți în alt mod, cum ar fi joc sau principal. Scrieți declarațiile metodelor pentru constructor și pentru metoda principală.

clasa publică StonePaperShoes {publicStonePaperScissors () {} public static void principal (String [] args) {}}
  • 2
    Creați o enumerare pentru gesturi de mână (piatră, hârtie sau foarfece). Am putea folosi lanțuri pentru a reprezenta piatra, hârtia sau foarfecele, dar o enumerare ne permite să ne predefinăm constantele, ceea ce înseamnă că utilizarea enumerării are ca rezultat un design mai bun. Vom numi tipul de enumerare mutare cu valorile ROCA, ROLUL, și fOARFECE.

    private enum Mutare {ROCK, HAPPY, SCISSORS}
  • 3
    Creați două clase private utilizator și calculator. Aceste clase vor reprezenta jucătorii noștri în joc. Clasa utilizator va fi clasa care cere utilizatorului să aleagă între rocă, hârtie sau foarfece, așa că trebuie să scriem o metodă getMove (). Clasa calculator trebuie să aveți și o metodă getMove () astfel încât și computerul să poată să se miște. Vom plasa substituenți în aceste metode pentru a le implementa mai târziu. Clasa utilizator va necesita un constructor pentru a configura obiectul Scanner care va lua intrarea utilizatorului. Vom pune Scanner ca un câmp privat pentru utilizator și apoi îl vom porni în constructor. Cum folosim clasa Scanner, trebuie să scriem o declarație de import în partea de sus a codului nostru. Clasa calculator nu este nevoie de un constructor, deci nu va trebui să scriem unul - când începem obiectul calculator, noi pur și simplu sunăm implicit constructorul. Acesta este modul în care arată clasa noastră acum PiedraPapelTijeras:

    clasa de import java.util.Scanner-publice PiedraPapelTijeras enum {Move privat {ROCA, hârtie, foarfece} class User privat {inputScanner Scanner User public-privat () {inputScanner = new Scanner (System.in) -} getMove publice Move () {// `TODO: Punerea în aplicare a acestui métodoreturn nul -}} clasa de computer privat {getMove Move publice () {// TODO: Punerea în aplicare a acestui métodoreturn nul -}} PiedraPapelTijeras publice () {} void main ([] String args) public static {}}
  • 4
    Scrieți metoda getMove () pentru clasă calculator. Această metodă va reveni a mutare aleatoare. Putem obține o serie de enumerări din mutare apelarea metodei valori (): Move.values ​​(). Pentru a alege o enumerare aleatorie din mutare în această gamă de valori trebuie să generăm un index aleatoriu care este un număr întreg între 0 și lungimea matricei noastre de valori. Pentru aceasta putem folosi metoda nextInt () din clasă întâmplător, de la care trebuie să importăm java.util. După ce am obținut indicele aleator, putem returna mutare pentru acel indice al gamei noastre de valori.

    getMove publice Move () {Mutare [] Moves = Move.values ​​() - aleatoare aleatoare = new aleatoare () - int index = random.nextInt (moves.length) Mută ​​-RETURN [index] -}
  • 5
    Scrieți metoda getMove () pentru clasă utilizator. Această metodă va reveni a mutare în funcție de ceea ce a intrat utilizatorul. Vom presupune că utilizatorul va scrie rock, hârtie sau foarfece. În primul rând, trebuie să solicităm o intrare pentru utilizator: System.out.print ("Rock, hârtie sau foarfece?"). Apoi vom folosi metoda nextLine () a obiectului Scanner pentru a lua intrarea utilizatorului ca șir. Acum trebuie să verificăm dacă utilizatorul a introdus o mutare validă, dar putem fi toleranți în privința ortografiei. Deci, vom verifica numai dacă prima literă pe care utilizatorul o introduce este a R (pentru rocă), a P (pentru hârtie) sau a T (pentru foarfece), indiferent dacă acestea sunt majuscule sau mici, deoarece vom folosi metoda toUpperCase () din clasă șir pentru a valorifica toate intrările utilizatorilor. Dacă utilizatorul introduce o intrare incorectă, îl vom cere să intre din nou. Apoi, în funcție de ceea ce a intrat utilizatorul, vom reveni la o piesă corespunzătoare.

    public Mutarea getMove () {// Cereți utilizatorului System.out.print ("Rock, hârtie sau foarfece? ") - // Ia intrare usuarioString usuarioInput = inputScanner.nextLine () - usuarioInput = usuarioInput.toUpperCase () - char firstLetter = usuarioInput.charAt (0) -dacă (firstLetter == `R` || P firstLetter ==“ `|| firstLetter ==` t `) {// Utilizatorul a introdus o conexiune de date válidoswitch (firstLetter) {caz` R `: întoarce Move.ROCA caz` P `: întoarce Move.PAPEL caz` T „: întoarcere Mută .TIJERAS -}} // Utilizatorul nu a introdus date valide. Solicitați din nou. Returna getMove () -}
  • 6
    Scrieți o metodă playAgain () pentru clasă utilizator. Utilizatorul ar trebui să poată juca din nou și din nou. Pentru a determina dacă utilizatorul dorește să redea, trebuie să scriem o metodă playAgain () care returnează o valoare booleană care spune că utilizatorul a decis să redea sau nu. În această metodă folosim Scanner pe care am inceput-o inainte in constructor pentru a obtine o Da sau a Nu utilizatorul Vom verifica numai dacă prima literă este "S" pentru a determina dacă utilizatorul dorește să redea. Orice altă intrare va însemna că utilizatorul nu dorește să redea mai mult.

    public boolean playAgain () {System.out.print ("Doriți să jucați din nou? ") -string usuarioInput = inputScanner.nextLine () - usuarioInput = usuarioInput.toUpperCase () - returnează usuarioInput.charAt (0) == „S`-}
  • 7
    Conectați clasele utilizator și calculator împreună în clasă PiedraPapelTijeras. Acum că am terminat să scriem clasele utilizator și calculator, Ne putem concentra pe jocul în sine. Creați câmpuri private pentru clase utilizator și calculator în clasă PiedraPapelTijeras. Trebuie să accesăm aceste câmpuri pentru a accesa metodele getMove () când jucăm. În constructor pentru clasă PiedraPapelTijeras, Porniți aceste câmpuri. De asemenea, trebuie să urmărim punctele din câmp usuarioPuntos și computadoraPuntos, care trebuie să înceapă la 0 în constructor. De asemenea, trebuie să urmărim numărul de jocuri, care va fi, de asemenea, un domeniu începând cu 0.

    utilizator privat user-privat calculator de computer-privat usuarioPuntos-privat int cantidadDeJuegos-publice int int computadoraPuntos-privat PiedraPapelTijeras () {utilizator = utilizator nou () - PC = nou computer () - usuarioPuntos = 0-computadoraPuntos = 0-cantidadDeJuegos = 0 -}
  • 8
    Extinde enumerarea mutare pentru a include o metodă care ne spune cine va câștiga în fiecare caz. Trebuie să scriem o metodă compareMoves () care returnează 0 dacă piesele sunt aceleași, 1 dacă piesa curentă bate cealaltă și -1 dacă piesa curentă pierde în fața celuilalt. Acest lucru va fi util pentru a determina câștigătorul jocului. Pentru a implementa această metodă, vom reveni mai întâi la 0 dacă jocurile sunt aceleași și, prin urmare, vom avea o remiză. Apoi scrieți o declarație de comutare pentru a reveni 1 sau -1.



    Mută ​​enum privat {ROCK, hârtie, foarfeci - / *** Comparați acest joc cu un alt joc pentru a determina o cravată, victoria sau înfrângerea ** * * @param otherMove muta pentru a compara * @return 1 în cazul în care câștigă această mutare la. altul, -1 dacă acest joc pierde la * de altă parte, în cazul în care piesele 0 cravată * / compareMoves public int (muta otherMove) {// Empateif (acest == otherMove) return 0-comutator (acest) {caz ROCK: întoarcere (? otherMove == SCISSORS 1: 1) HÂRTIE -case: întoarcere (? otherMove ROCK == 1: 1) -case SCISSORS: întoarcere (otherMove == hârtie 1: -1) -} // Nu ar trebui să sosească până aici 0 0}}
  • 9
    Creați o metodă startGame () în clasă PiedraPapelTijeras. Această metodă va fi dezvoltarea jocului. Începeți prin a pune un simplu System.out.println în metodă.

    public void startGame () {System.out.println ("ROCK, HÂRTIE, LUCRĂRI!") -}
  • 10
    Obțineți piesele utilizatorului și ale computerului. În metodă startGame (), utilizați metodele getMove () din clasă utilizator și clasa calculator pentru a obține piesele utilizatorului și ale computerului.

    Deplasați userMove = user.getMove () - Deplasați computerMove = computer.getMove () - System.out.println (" nAți jucat " + userMove + ".") -System.out.println ("Calculatorul a fost jucat " + computerMove + ". n") -
  • 11
    Comparați cele două mișcări și determinați dacă utilizatorul sau computerul au câștigat. Utilizați metoda compareMoves () din enum mutarepentru a determina dacă utilizatorul a câștigat sau nu. Dacă utilizatorul a câștigat, crește scorul utilizatorilor cu 1. Dacă utilizatorul a pierdut, crește scorul calculatorului cu 1. Dacă a existat o egalitate, nu măriți niciun punctaj. Apoi, măriți numărul de jocuri dintr-o singură dată.

    int compareMoves = userMove.compareMoves (computerMove) -switch (compareMoves) {caz 0: // EmpateSystem.out.println ("Desenați!") -cutia-caz 1: // Win User System.out.println (userMove + " ai bătut " + computerMove + ". Ai câștigat!") -userPoints ++ - break-case -1: / / Win Computer System.out.println (computerMove + " ai bătut " + userMove + ". Ai pierdut") -computerPoints ++ - break-} sumă de jocuri ++ -
  • 12
    Întreabă-l pe utilizator dacă dorește să se mai joace din nou. Dacă utilizatorul dorește să redea din nou, apelați din nou startGame (). În caz contrar, sunați printGameStats () care va imprima statisticile jocului. Vom scrie această metodă în pasul următor.

    dacă (user.playAgain ()) {System.out.println () - startGame () -} altceva {printGameStats () -}
  • 13
    Scrieți metoda printGameStats (). Această metodă va afișa statistici de joc: numărul de victorii, numărul de pierderi, numărul de remize, numărul de jocuri, câștigătoare utilizator procente yy. Procentajul de jocuri câștigate este calculat de (# voctories + (# ties / 2)) / (# jocuri). Această metodă utilizează System.out.printf pentru a imprima textul formatat.

    private void printGameStats ()% 6d 
  • 14
    Începeți jocul în clasa principală. În clasa principală, inițializați o instanță a clasei PiedraPapelTijeras și apelați metoda startGame ().

    public static void principal (String [] args) {PaperstoneScissors joc = newPaperstoneScissors () - game.startGame () -}
  • Screen-Shot-06 / 23/2013-la-2.27.50-AM.jpg" class ="imagine lightbox">
    Imaginea intitulată Screen Shot 2013 06 23 la 2.27.50 AM.jpg
    15
    Testați-vă jocul. Acum că am depus toate eforturile pentru a scrie jocul Stone, Paper, Scissors, este timpul să compilați și să testați totul!
  • Program de probă

    import java.util.Random-import PiedraPapelTijeras clasa-java.util.Scanner Public {privat User-utilizator de computer privat-computer privat usuarioPuntos-privat int int computadoraPuntos-privat ENUM int cantidadDeJuegos-privat {Mutare ROCA, hârtie, foarfece - / * ** Comparați acest joc cu unul de altul pentru a determina dacă acesta este un egal, o victorie sau o înfrângere *. ** * @param otherMove muta pentru a compara * @return 1 în cazul în care această mișcare bate cealaltă, -1 împotriva acestei mișcare pierde * o parte, 0 în cazul în care piesele cravată * / compareMoves public int (Mutare otherMove) {// Empateif (acest == otherMove) return 0-comutator (acest) {caz ROCK: întoarcere (otherMove == foarfece 1: - ? 1) -case HÂRTIE: întoarcere (otherMove ROCK == 1: 1) SCISSORS -case: întoarcere (otherMove == hârtie 1: -1) -} // nu ar trebui să ajungă la aquíreturn 0 -}} clasa de utilizare privată {User-public-privat inputScanner Scanner () {inputScanner = new Scanner (System.in) -} getMove publice Move () {// Solicitarea usuarioSystem.out.print ("Rock, hârtie sau foarfece? ") - // Ia intrare usuarioString usuarioInput = inputScanner.nextLine () - usuarioInput = usuarioInput.toUpperCase () - char firstLetter = usuarioInput.charAt (0) -dacă (firstLetter == `R` || P firstLetter ==“ `|| firstLetter ==` t `) {// Utilizatorul a introdus o conexiune de date válidoswitch (firstLetter) {caz` R `: întoarce Move.ROCA caz` P `: întoarce Move.PAPEL caz` T „: întoarcere Mută .TIJERAS -}} // Utilizatorul nu a introdus date valide. Solicitați din nou. Return getMove () -} public boolean playAgain () {System.out.print ("Doriți să jucați din nou? ") -string usuarioInput = inputScanner.nextLine () - usuarioInput = usuarioInput.toUpperCase () - return usuarioInput.charAt (0) == `S` -}} Computer class privat {getMove Move publice () {Mutare [] Mută ​​= Mută .values ​​() - aleatoare aleatoare = new aleatoare () - int index = random.nextInt (moves.length) Muta -RETURN [index] -}} PiedraPapelTijeras public () {user = new user () - = computer nou calculator ( ) -usuarioPuntos = 0 = 0-computadoraPuntos-cantidadDeJuegos =} void startGame 0- publică () {System.out.println ("ROCK, HÂRTIE, LUCRĂRI!") - // Obțineți movesMove userMove = user.getMove () - Deplasați computerMove = computer.getMove () - System.out.println (" nAți jucat " + userMove + ".") -System.out.println ("Calculatorul a fost jucat " + computerMove + ". n") - // Comparați joacă și determina winnerint compareMoves = userMove.compareMoves (computerMove) -switch (compareMoves) {caz 0: // EmpateSystem.out.println ("Desenați!") -cutia-caz 1: // Win User System.out.println (userMove + " ai bătut " + computerMove + ". Ai câștigat!") -userPoints ++ - break-case -1: / / Win Computer System.out.println (computerMove + " ai bătut " + userMove + ". Ai pierdut") -computadoraPuntos ++ - ++ cantidadDeJuegos BREAK-} - // Prompt redare utilizator nuevamenteif (usuario.playAgain ()) {System.out.println () - startGame () -} else {printGameStats () -}} / *** Imprimați statisticile jocului. Calculând o cravată ca ½ * win-win procent. * / Private void printGameStats ()% 6s printDashes void private (int numberOfDashes) {for (int i = i 0- < numberOfDashes- i ++) {System.out.print ("-") -}} public static void principal (String [] args) {PaperstoneScissors game = newPaperstoneScissors () - game.startGame () -}}
    Distribuiți pe rețelele sociale:

    înrudit
    Cum se obține o piatră de apă în Pokemon EmeraldCum se obține o piatră de apă în Pokemon Emerald
    Cum se creează torțe roșii în MinecraftCum se creează torțe roșii în Minecraft
    Cómo encontrar la suma de dos números en JavaCómo encontrar la suma de dos números en Java
    Cum se scrie un program Java cu două clase folosind EclipseCum se scrie un program Java cu două clase folosind Eclipse
    Cum se scrie un program în Java pentru a calcula mediaCum se scrie un program în Java pentru a calcula media
    Cum să evoluați în MurkrowCum să evoluați în Murkrow
    Cum se face o interfață grafică a rețelei în JavaCum se face o interfață grafică a rețelei în Java
    Cum se apelează o metodă în JavaCum se apelează o metodă în Java
    Cum să câștigi în piatră, hârtie sau foarfeceCum să câștigi în piatră, hârtie sau foarfece
    Cum sa faci un melc origamiCum sa faci un melc origami
    » » Cum se face un joc de piatră, hârtie și foarfece în Java

    © 2011—2020 ertare.com