itholoinfo.com.com

Cum sa faci un joc de piatra, hartie si foarfece in Java

Piatra, hârtia și foarfeca este un joc de mână jucat de doi oameni. Cei doi ar trebui să spună "piatră, hârtie și foarfece" în același timp și apoi să formeze unul din aceste trei obiecte cu o mână întinsă. Câștigătorul este determinat în funcție de ceea ce a ales fiecare. Foarfeca a câștigat din hârtie, care câștigă din piatră, care câștigă din foarfece. Dacă ambii jucători aleg același lucru, rezultatul va fi o egalitate. Aici vom scrie un program simplu în Java care simulează acest joc, astfel că utilizatorul este un jucător, iar celălalt computer.

pași

  1. 1
    Creați clasa principală și apelați-o PedraPapelTesoura. Aceasta va fi clasa în care veți codifica jocul. Îi poți da un alt nume, cum ar fi joc sau principal. Declarați metoda principală și constructorii.

    public class PedraPapelTesoura {public PedraPapelTesoura () {} public static void principal (String [] args) {}}
  2. 2
    Creați o enumerare pentru gesturi de mână (piatră, hârtie sau foarfece). Am putea folosi șiruri pentru acest lucru, dar enumerarea ne permite să ne predefinăm constantele, ceea ce înseamnă că aceasta este o abordare mai bună. Ne vom numi mutare, cu valorile STONE, HÂRTIE, și SHEAR.

    private enum Mutare {STONE, HAPPY, SCISSORS}
  3. 3
    Creați două clase private utilizator și calculator. Aceste clase vor reprezenta jucătorii noștri în joc. De asemenea, puteți alege să părăsiți aceste clase publice. Clasa utilizator va fi cel care va cere utilizatorului să aleagă între piatră, hârtie și foarfece, atunci va fi necesar să se facă o metodă getMove (). Clasa calculator veți avea nevoie, de asemenea, de o metodă getMove () astfel încât el să poată alege și el. Vom lăsa aceste metode verificate și le vom implementa mai târziu. Clasa utilizator veți avea nevoie de un constructor care să stabilească obiectul scaner pentru a primi intrarea utilizatorului. Vom pleca scaner ca un câmp privat pentru utilizator și apoi porniți-l în constructor. Cum folosim clasa scaner, va trebui să-l importați la începutul codului. Clasa calculator nu necesită un constructor, așa că nu va trebui să scriem unul. Putem inițializa un obiect calculator prin constructorul implicit de apel. În prezent, clasa noastră PedraPapelTesoura arată astfel:

    import java.util.Scanner class PedraPapelTesoura public-privat {enum {Move rock, hârtie, foarfece, class privat} {User public-privat inputScanner Scanner Utilizator () {inputScanner = new Scanner (System.in) -} getMove publice Move () {// TODO: Punerea în aplicare a acestui methodreturn nul -}} clasa de computer privat {getMove Move publice () {// TODO: Punerea în aplicare a acestui methodreturn nul -}} PedraPapelTesoura publică () {} void main ([] String args) {public static }}
  4. 4
    Scrieți metoda getMove () pentru clasă calculator. Această metodă va returna o alegere aleatorie. Putem avea un vector enumerând mutare folosind metoda valori (): Move.values ​​(). Pentru a alege o alegere aleatorie, trebuie să generăm un număr aleator între 0 și dimensiunea vectorului nostru de valori. Pentru a face acest lucru, utilizați nextInt () de clasă întâmplător, care va trebui de asemenea să fie importat de la java.util. După generarea intregului aleatoriu, putem reveni la mutare care este în poziția corespunzătoare numărului respectiv.

    getMove publice Move () {Mutare [] = Move.values ​​alegeri () - aleatoare aleatoare aleatoare = new () - Random.nextInt int index = (moves.length) alegeri -return [index] -}
  5. 5
    Scrieți metoda getMove () pentru clasă utilizator. Această metodă va returna o alegere pe care utilizatorul a ales-o. Vom aștepta ca utilizatorul să aleagă "piatră", "hârtie" sau "foarfece". Mai întâi trebuie să cerem o intrare pentru utilizator: System.out.print ("Piatră, hârtie sau foarfece?"). Apoi utilizați nextLine () a obiectului scaner pentru a obține intrarea utilizatorului ca șir. Acum trebuie să verificăm dacă utilizatorul a făcut o alegere valabilă, dar putem fi flexibili dacă a scris un cuvânt greșit. Așadar, putem verifica numai primele două litere ale intrării de utilizator, "PE" pentru piatră, "PA" pentru hârtie sau "TE" pentru foarfece. Nu contează dacă cuvântul este mai mare sau mai mic, deoarece vom folosi mai întâi metoda toUpperCase () de clasă șir pentru a converti toate literele din intrare la majuscule. Dacă utilizatorul nu a introdus opțiunea corectă, acesta va fi retrimis din nou. Apoi, în funcție de intrare, vom reveni la mișcarea de mână aleasă.

    getMove publice Move () {// Cere usuárioSystem.out.print ( "Rock, hârtie, foarfece?") - // Obținerea entradaString userInput inputScanner.nextLine = () - userInput userInput.toUpperCase = () - char = primeiraLetter userInput.charAt (0) -char al doileaLetter = userInput.charAt (1) -if (firstLetter == `P` (al doilea fișier == `E` || secondFile == `A`) || firstLetter == `t`) {// Utilizatorul a introdus un válidaswitch intrare (PrimeiraLetra) {caz `P`: if (segundaLetra == `E`) {return Move.PEDRA-} else {} caz de retur Move.PAPEL- `T`: întoarcere Move.TOSOURSE -}} // Utilizatorul nu a introdus o intrare validă, încercați din nou.return getMove () -}
  6. 6
    Scrieți o metodă pentru a jucaNew () pentru clasă utilizator. Utilizatorul ar trebui să poată alege să joace jocul ori de câte ori dorește. Pentru a determina dacă utilizatorul dorește să redea, va trebui să scrieți o metodă playAgain () care returnează o variabilă booleană care va spune dacă utilizatorul dorește să redea sau nu. În această metodă, vom folosi scaner care a fost deja inițializat în constructor pentru a obține un utilizator "da" sau un "nu". Vom verifica doar dacă prima literă este "S" pentru a decide dacă utilizatorul dorește să redea, Orice altă intrare va însemna că utilizatorul nu mai dorește să se joace.

    playAgain publice boolean () {System.out.print ( "Vrei să joci din nou?") -String userInput inputScanner.nextLine = () - userInput userInput.toUpperCase = () - returnează userInput.charAt (0) == `S` -}
  7. 7
    Alăturați-vă cursurilor utilizator și calculator în clasă PedraPapelTesoura. Acum că am terminat de scris aceste două clase, ne putem concentra pe jocul în sine. Creați câmpuri private pentru clasă utilizator și pentru calculator în clasă PedraPapelTesoura. Va trebui să accesăm aceste câmpuri pentru a accesa metodele getMove () când jucăm. În costrul PedraPapelTesoura, inițializați aceste câmpuri. De asemenea, va trebui să salvați scorul în câmpuri userScore și computerScore, care trebuie inițializate la 0 în constructor. De asemenea, va trebui să salvăm numărul de jocuri jucate, care va începe, de asemenea, la 0.

    privat de utilizator-privat de utilizare calculator calculator-privat int userScore-privat int computerScore-privat int numberOfGames-publice PedraPapelTesoura () {utilizator = utilizator nou () - calculator = nou computer () - userScore = 0-computerScore = 0-numberOfGames = 0 -}
  8. 8
    Extindeți enum-ul mutare pentru a include o metodă care ne spune ce mișcare câștigătoare în fiecare caz. Va trebui să scriem o metodă compareMoves () care va reveni 0 dacă alegerile sunt aceleași, 1 dacă alegerea curentă este câștigătoarea și -1 dacă este ratat. Acest lucru va fi foarte util în determinarea câștigătorului jocului. Pentru a implementa această metodă, va trebui mai întâi să întoarcem 0 dacă alegerile sunt aceleași, rezultând o egalitate. Deci ar trebui să facem o trecere pentru a reveni la 1 sau la -1.



    enum privat {Mutare piatră, hârtie, SCISSORS -. / *** Comparați această alegere cu cealaltă pentru a determina care a câștigat sau o remiză *** * @param alegere otherMove pentru a fi comparate * © retur 1 în cazul în care alegerea curentă a unui alt câștig , și -1 dacă pierde. De 0 va fi returnat în caz de egalitate ** / compareMoves publice int (Mutare otherMove) {// Tieif (acest == otherMove) return 0-comutator (aceasta) {caz STONE: return (otherMove == SCISSORS 1:.? - 1) -Case PAPER: return (STONE otherMove == 1: -1) -Case FORFECARE: return (== otherMove 1 PAPER -1 :?) -}}} întoarcere 0-
  9. 9
    Creați o metodă startGame () în clasă PedraPapelTesoura. Va începe și va rula jocul. Începeți prin a adăuga o simplă System.out.println.

    public void startGame () {System.out.println ("STONE, PAPER, SCISSOR!") -}
  10. 10
    Obțineți mișcările utilizatorului și ale computerului. În metodă startGame (), utilizați metodele getMove () de clasă utilizator și clasă calculator pentru a obține mișcările utilizatorului și ale computerului.

    Moves = userMove user.getMove () - Move computerMove = computer.getMove () - System.out.println ( " nNu selectat" userMove + + "") - System.out.println ( "Computerul a ales" + computerMove + ". n") -
  11. 11
    Comparați cele două mișcări pentru a determina cine a câștigat. Utilizați compareMoves () de la enum mutare pentru a determina dacă utilizatorul a câștigat sau nu. Dacă a expirat, crește scorul său cu 1, altfel crește scorul calculatorului. În cazul unei cravate, nu măriți niciun punctaj. După aceea, crește numărul de jocuri cu 1.

    int = compareMoves userMove.compareMoves (computerMove) -switch (compareMoves) {caz 0: // TieSystem.out.println ( "Egal") - break caz 1: // winsSystem.out.println Utilizator (userMove + „câștigă .! de "+ + computerMove" Ai câștigat ") - userScore ++ - break caz -1: // winsSystem.out.println Computer (computerMove +" bate "+ + userMove" Ai pierdut „) - computerScore ++ - break .. -} numarul jocurilor ++ -
  12. 12
    Întreabă-l pe jucator dacă vrea să se mai joace din nou. Dacă da, apelați metoda startGame () din nou. În caz contrar, apelați metoda printGameStats () astfel încât el poate afișa statisticile jocului. Vom arăta această metodă în pasul următor.

    dacă (user.playAgain ()) {System.out.println () - startGame () -} altceva {printGameStats () -}
  13. 13
    Scrieți metoda printGameStats (). Această metodă va arăta statisticile jocului: numărul de victorii, pierderi, remize, numărul de jocuri efectuate și procentul de victorie al utilizatorului. Acest procent se calculează astfel: (numărul de victorii + (numărul de legături / 2)) / (numărul de jocuri jucate). Această metodă utilizează System.out.printf pentru a imprima textul pe ecran.

    private void printGameStats ()% 12s 
  14. 14
    Începeți jocul în clasa principală. În ea, inițializați o instanță a clasei PedraPapelTesoura și apelați metoda startGame ().

    public static void principal (String [] args) {PedraPapelTesoura joc = nou PedraPapelTesoura () - game.startGame () -}
  15. Imaginea intitulată Screen Shot 2013 06 23 la 2.27.50 AM.jpg
    15
    Testați-vă jocul. Acum că ați depus toate eforturile pentru a face un joc de piatră, hârtie și foarfece, este timpul să compilați și să testați totul!

Program de probă

java.util.Random import-import-java.util.Scanner publice clasa utilizator {PedraPapelTesoura privat privat-utilizator de computer-computer privat numberOfGames-privat int userScore-privat int computerScore-privat int enum {Mutare PIATRĂ, hârtie, foarfeci - / * ** Comparați această alegere cu cealaltă pentru a determina care a câștigat sau egalitate. *** * @param alegere otherMove pentru a fi comparate * © retur 1 în cazul în care opțiunea curentă pentru a câștiga un alt, și -1 dacă ea pierde. De 0 va fi returnat în caz de egalitate ** / compareMoves publice int (Mutare otherMove) {// Empateif (acest == otherMove) return 0-comutator (aceasta) {caz STONE: return (otherMove == SCISSORS 1:.? - 1) -Case PAPER: return (STONE otherMove == 1: -1) -Case FORFECARE: return (== otherMove 1 PAPER -1 :?) -} return 0 -}} class privat utilizator {inputScanner Scanner public-privat utilizator () {inputScanner = new Scanner (System.in) -} Mutare getMove publice () {// Cere usuárioSystem.out.print ( "Rock, hârtie, foarfece?") - // Ia intrarea usuárioString userInput = inputScanner.nextLine () - = userInput userInput.toUpperCase () - = userInput.charAt firstLetter char (0) -dacă ( `P` primeiraLetter == (al doilea fișier == `E` || secondFile == `A`) || firstLetter == `t`) {// Utilizatorul a introdus un válidaswitch intrare (PrimeiraLetra) {caz `P`: if (segundaLetra == `E`) {return Move.PEDRA-} else {} caz de retur Move.PAPEL- `T`: întoarce Move.TESOURA -}} // utilizatorul nu a intrat o intrare validă, încercați novamentereturn getMove () -} playAgain public boolean () {System.out.print ( "vrei să joci din nou?") -String userInput = inputScanner.nextLine () - = userInput userInput.toUpperCase () - retur userInput.charAt (0) == `S` -}} class privat Computer {getMove Move publice () {Move [] = mută Move.values ​​( ) -Random aleatoare = new aleatoare () - int index = Random.nextInt (moves.length) se mută -return [Index] -}} PedraPapelTesoura publică () {utilizator = utilizator nou () - calculator = nou computer () - userScore = 0 = 0-computerScore-numberOfGames = startGame} void 0- publică () {System.out.println ( "rock, hârtie, foarfece") - // Ia movimentosMove userMove = user.getMove () - Deplasare = computerMove computer.getMove () - System.out.println ( " nNu jucat" userMove + + "") - System.out.pri ntln ( " n" "Computer jucat" + computerMove +) - // compară și determină mișcările vencedorint compareMoves = userMove.compareMoves (computerMove) -switch (compareMoves) {caz 0: // EmpateSystem.out.println ( "Egal!") - break caz 1: // utilizator winsSystem.out.println (userMove + "bate" + computerMove +“. ! Ai câștigat ") - userScore ++ - break caz -1: // winsSystem.out.println Computer (computerMove +" bate "+ userMove +" ai pierdut „) - computerScore ++ - ++ numberOfGames BREAK-} - // Intrebare .. utilizatorul în cazul în care doresc să joace novamenteif (user.playAgain ()) {System.out.println () - startGame () -} else {printGameStats () -}.} / *** arată statisticile jocului consideră parvin a câștiga 1/2 * pentru a stabili procentul de victorii. * / printGameStats void private ()% 14s printDashes void privat (int numberOfDashes) {for (int i = i 0- < numberOfDashes- i++) {System.out.print(";")-}}public static void main(String[] args) {PedraPapelTesoura game = new PedraPapelTesoura()-game.startGame()-}}
Distribuiți pe rețelele sociale:

înrudit
Cum se apelează o metodă în JavaCum se apelează o metodă în Java
Cum de a codifica un string la Base64 cu JavaCum de a codifica un string la Base64 cu Java
Cum de a crea primul program Java pe Ubuntu LinuxCum de a crea primul program Java pe Ubuntu Linux
Cum se creează o interfață GUI cu Swing în JavaCum se creează o interfață GUI cu Swing în Java
Cum să scrieți primul program JavaCum să scrieți primul program Java
Cum se scrie un program de două clase în Java folosind EclipseCum se scrie un program de două clase în Java folosind Eclipse
Cum se scrie un program Java pentru a calcula mediaCum se scrie un program Java pentru a calcula media
Cum de a inversa un șir în JavaCum de a inversa un șir în Java
Cum se obține lungimea unui șir în JavaCum se obține lungimea unui șir în Java
Cum de a desena o piatrăCum de a desena o piatră
» » Cum sa faci un joc de piatra, hartie si foarfece in Java
© 2021 itholoinfo.com.com