Cum de a scrie un joc `piatră, foarfece, hârtie" pe java
"Piatră, foarfece, hârtie" - acesta este un joc "pe degete" pentru două. Jucătorii spun "piatră, foarfece, hârtie" și aruncați mâna în față, formând una din cele trei figuri (piatră, foarfecă sau hârtie). Câștigătorul este determinat după cum urmează: Foarfece Beat Hârtie, Hârtie bate o piatră, piatră bate foarfece. Dacă ambii jucători arată aceeași cifră, este considerată o remiză. Vom scrie un joc simplu pe Java, care va juca "piatră, foarfece, hârtie" cu un computer.
Pași
unu. Creați o clasă de bază și spuneți-o
Rockparchipssors
. În această clasă vom descrie jocul. Puteți să-l numiți altfel, de exemplu Joc
sau Principal
. Scrieți anunțuri de designer și metoda principală.Clasa publică RockPersCissors {Public RockpersCsSors () {} Public Afirmat Void Principal (șir [] args) {}}
2. Creați o listă (Enum) pentru a descrie posibilele mișcări (piatră, foarfece, hârtie). Putem stabili șiruri de alergare, dar listarea ne permite să predeminăm constanta, astfel încât utilizarea Enum este mai bună. Să numim listarea noastră
Mutare
Și setați semnificațiileRock
, Hârtie
și Foarfece
.Private Enum Move {rock, hârtie, foarfece}
3. Creați două clase închise (clasa de cuvinte cheie)
Utilizator
și Calculator
. Aceste clase vor reprezenta jucătorii. De asemenea, puteți face aceste clase deschise (cuvinte cheie publice). ClasăUtilizator
va cere de la utilizator, ceea ce se mișcă - piatra, foarfece sau hârtie - așa că trebuie să scriem o metodă getmove ()
. ClasăCalculator
ar trebui să aibă, de asemenea, o metodăgetmove ()
, Astfel încât să putem obține un computer. Până acum, vom declara pur și simplu aceste metode și vom scrie mai târziu implementarea. Clasă Utilizator
Trebuie să aibă un constructor în care obiectul este inițializat Scaner
, care va citi intrarea utilizatorului. DeclaraScaner
Membru închis al datelor de clasă Utilizator
și inițializați-l în designer. Din moment ce vom folosi clasa Scaner
, Trebuie să-l conectăm folosind un cuvânt cheie Import
. Clasă Calculator
Designerul nu este necesar, așa că nu îl vom scrie - când inițializează obiectul Calculator
Vom numi pur și simplu designerul implicit. Iată clasa Rockparchipssors
Arată acum:Importați Java.Util.Scaner-Class Public RockPropersSors {Private Enum Move {Rock, Hârtie, Foarfece} Clasa privată Utilizator {Scanner privat InputScanner-Utilizator () {InputScanner = Scanner nou (sistem.In) -} Public Move Getmove () {// TODO: Implementarea calculatorului de clasa Meturn Null -}} {Public Move Getmove () {Public Move Getmove () {// TODO: Implementarea Membur Null -}} Public RockpersCissors () {} Public Static Void principal (șir [] args) {}}
4. Scrieți implementarea metodei
getmove ()
Pentru clasă Calculator
. Această metodă va returna valoarea aleatorie Mutare
.Putem obține o serie de valori Mutare
Apelarea unei metode Valori ()
asa: Mutare.Valori ()
. Pentru a alege sensul aleator Mutare
Din această matrice, trebuie să generăm un indice aleatoriu între 0 și numărul de element de matrice. Pentru a face acest lucru, sunați la metodaUrmătorul ()
clasăAleatoriu
, Pe care le conectăm așa:Importați Java.Util.Aleatoriu
. După primirea unui indice aleatoriu, vom restitui valoarea Mutare
Cu acest indice în matricea noastră.Public Move Getmove () {muy [] Mișcări = Mutare.Valori () - Random Random = New Random () - INT Index = aleatoriu.Următorul (se mișcă.Lungime) - Se mișcă [index] -}
cinci. Scrieți implementarea metodei
getmove ()
Pentru clasă Utilizator
. Această metodă va returna valoarea Mutare
Intrare adecvată a utilizatorului. Utilizatorul poate intra "o piatra", "foarfece", sau "hârtie". În primul rând, retrageți un mesaj: Sistem.Out.Imprimare ("Piatră, foarfece sau hârtie?")
. Apoi, folosind metoda Linia următoare ()
Obiect Scaner
, Obținem introducerea utilizatorului sub forma unui șir. Acum trebuie să verificați corectitudinea utilizatorului care intră. Cu toate acestea, nu vom acorda atenție lui Typos și pur și simplu verificați prima literă "k", "n" sau "b". De asemenea, nu vom acorda atenție registrului scrisorilor, deoarece, în prealabil, vom numi metoda Touppercase ()
clasă Şir
, Când introduceți utilizatorul în registrul de sus. Dacă utilizatorul nu a introdus nici o alegere mai corectă, îmi cer din nou mișcarea. Apoi, în funcție de intrarea utilizatorului, metoda noastră va returna valoarea corespunzătoare Mutare
.Publicul Move GetMove () {// retrageți o cerere de a intra.Out.Imprimare ("Piatră, foarfece sau hârtie? ") - // citiți intrarea de utilizator UserInput = InputScanner.Linia următoare () - UserInput = UserInput.TOUPPERCASS () - Char FirstTter = UserInput.Charat (0) -If (FirstLetter == `K` || FirstTter == `N` || Firstleter == `B`) {// Introducerea corectăSwitch (FirstTter) {Case `K`: Reveniți.Rock-caz "H": Reveniți.Cazul de hârtie "B": Reveniți.Foarfece -}} // incorect. Aduceți o cerere de a intra din nou.Retur getmove () -}
6. Scrieți implementarea metodei
Joaca din nou ()
clasă Utilizator
. Utilizatorul trebuie să poată reda din nou și din nou. Pentru a determina dacă utilizatorul dorește să redea din nou, scrieți metoda Joaca din nou ()
, care va returna valoarea tipului de bool și, astfel, spuneți jocului dacă utilizatorul dorește să joace din nou. În această metodă, folosim obiectul Scaner
, pe care l-am inițializat în designer pentru a obține"da" sau"Nu" De la utilizator. Tocmai verificăm prima literă, dacă ați fi, atunci utilizatorul dorește să joace din nou, orice altă scrisoare va însemna "Nu".Public Boolean Playagain () {sistem.Out.Imprimare ("Doriți să jucați din nou? ") -String UserInput = InputScanner.Linia următoare () - UserInput = UserInput.Touppercase () - Return UserInput.Charat (0) == d`-}
7. Codul de clasă TIE
Utilizator
și clasa Calculator
in clasa Rockparchipssors
. Codul de scriere pentru clase Utilizator
și Calculator
, Putem face jocul în sine. Anunță clasele Utilizator
și Calculator
Datele de clasă închise Rockparchipssors
. Ne vom referi la ele, provocând o metodă getmove ()
, pentru a obține jucători. Inițializați-le într-un designer de clasă Rockparchipssors
. De asemenea, trebuie să stocăm un cont. Regla UtilizatorCore
și Computerscore
, Linitiase-le zero. Și în cele din urmă, creați un câmp de date pentru stocarea numărului de jocuri, inițializând-o cu zero.Utilizator privat Utilizator-Private Computer-Private Int UtilizatorsCore-Private int ComputersCore-Private Int NotefGames-Public RockPersCissors () {utilizator = Utilizator nou () - Computer = Computer nou () - UserScore = 0-ComputersCore = 0-numereOfGames = 0 -}
opt. Lista completă
Mutare
metoda care va compara mișcările și determină câștigătorul. Ne manifestă codul pentru metodă ComparăMove ()
care se va întoarce 0 dacă mișcările sunt aceleași, 1 - dacă rularea curentă bate cealaltă și -1 - dacă o altă mișcare bate curentul. Rularea curentă este afișată de acest indicator, iar celălalt este transmis în parametrul CealaltăMove. Este util să determinați câștigătorul. Mai întâi scriem codul care definește o remiză și returnări 0, apoi scrieți instrucțiunile de comutare pentru a determina câștigătorul.Private Enum Move {rock, hârtie, foarfece - / *** compară mișcarea curentă cu transmitere în parametrul OtherMove și determină * victorie, înfrângere sau tragere.** @param altaMove * Cursul cu care actualul * @return 1 este comparat dacă mutarea curentă bate cealaltă, -1 dacă o altă mișcare bate curentul, * 0 în cazul unei remize * / Public Int CompareMoves (mutare OtherMove) {// Draw == OtherMove) Returnați 0-Switch (Acest) {Case Rock: Întoarcere (OtherMove == foarfece ? 1: -1) Hârtie: Return (altcalmime == rock ? 1: -1)-Foarfece: Întoarcere (altcineva == hârtie ? 1: -1) -} // acest cod nu trebuie executat niciodată 0-}}
nouă. Anunță o metodă
Incepe jocul ()
in clasa Rockparchipssors
. În această metodă va fi un joc. Începeți prin apelarea metodei Sistem.Out.Println
.Public VODGAME () {sistem.Out.Println ("Fisoare de hârtie rock!") -}
10. Obțineți curse și utilizator de calculator. În metoda
Incepe jocul ()
Apel getmove ()
clase Utilizator
și Calculator
, pentru a-și face mișcările.Mutați usermove = utilizator.Getmove () - Mutare Computermove = Computer.Getmove () - sistem.Out.Println (" Nuta accident vascular cerebral" + USERMAVE + ".") -System.Out.Println ("Computerul care rulează" + Computermove + ". N")-
unsprezece. Comparați cursul calculatorului și mișcării jucătorului pentru a determina cine a câștigat. Apelați metoda
ComparăMove ()
listare Mutare
, Pentru a determina dacă utilizatorul a câștigat. Dacă da, creșteți contul său la 1. Dacă nu, măriți contul computerului. În caz de remiză, proiectul de lege rămâne același. După aceea, creșterea numărului de jocuri jucate de 1.Int CompareMoves = USEMOVE.Comparare (CompareMoves) {caz 0: // Drawsystem.Out.Println ("A desena!") -Break-caz 1: // a învins sistemul de jucători.Out.Println (USEMOVE + " Beats " + Computermove + ". Ai castigat!") -UserSerCore ++ - Break-caz -1: // a învins computerismul.Out.Println (Computermove + " Beats " + USERMAVE + ". Ai pierdut.") -Computerscore ++ - Break-} Număr de numere++-
12. Cereți utilizatorului dacă vrea să joace din nou. Dacă da, sunați la metoda
Incepe jocul ()
din nou. Dacă nu, sunați la metoda PrintGameStats ()
, care va aduce statisticile jocului. Vom scrie implementarea sa în pasul următor.dacă (utilizator.PLAYAGAIN ()) {sistem.Out.Println () - StartGame () -} Alte {PrintGameStats () -}
13. Scrieți implementarea metodei
PrintGameStats ()
. Această metodă va retrage statisticile jocului: numărul de victorii, leziuni, atrage, numărul de jocuri jucate și procentul victoriilor jucătorului. Procentul de jocuri câștigate este considerat după cum urmează: (numărul de victorii + (numărul de remiză / 2)) / (numărul de jocuri jucate). Această metodă utilizează Sistem.Out.Printf
Pentru ieșirea textului formatat.Volumul privat PrintGameStats () ") -Printsheshes (10) -system.Out.Imprimare ("+") -Printsheshes (10) -system.Out.Imprimare ("+") -Printsheshes (10) -system.Out.Imprimare ("+") -Printsheshes (16) -system.Out.Imprimare ("+") -Printsheshes (18) -system.Out.Println ("
paisprezece. Incepe jocul. În principal, clasa inițializează obiectul
Rockparchipssors
și spuneți-i metoda Incepe jocul ()
.Public Static VOID principal (șir [] args) {RockPersCissors Game = New RockPersCaSsors () - Joc.Incepe jocul () -}

cincisprezece. Testați jocul. Acum că toată munca este în urmă, este timpul să compilați și să vă testați jocul!
Exemplu de program
Importați Java.Util.Random-Import Java.Util.Scaner-Class Public RockPropersSors {utilizator privat Utilizator-Private Computer Computer-Private UsersCore-Private Int ComputersCore-Private Int Noterofgames-Private Enum Move {Rock, Hârtie, Foarfece - / *** Comparați mișcarea curentă cu transmitere în parametrul CelălaltMove și determină * victorie, înfrângere sau remiză.** @param altaMove * Cursul cu care actualul * @return 1 este comparat dacă mutarea curentă bate cealaltă, -1 dacă o altă mișcare bate curentul, * 0 în cazul unei remize * / Public Int CompareMoves (mutare OtherMove) {// Draw == OtherMove) Returnați 0-Switch (Acest) {Case Rock: Întoarcere (OtherMove == foarfece ? 1: -1) Hârtie: Return (altcalmime == rock ? 1: -1)-Foarfece: Întoarcere (altcineva == hârtie ? 1: -1) -} // Acest cod nu trebuie să fie executat niciodată /}} Utilizator de clasă privată {Private Scanner InputScanner-Utilizator () {InputScanner = Scanner nou (sistem.In) -} Public Move Getmove () {// Afișează o cerere de intrare.Out.Imprimare ("Piatră, foarfece sau hârtie? ") - // citiți intrarea de utilizator UserInput = InputScanner.Linia următoare () - UserInput = UserInput.TOUPPERCASS () - Char FirstTter = UserInput.Charat (0) -If (FirstLetter == `K` || FirstTter == `N` || Firstleter == `B`) {// Introducerea corectăSwitch (FirstTter) {Case `K`: Reveniți.Rock-caz "H": Reveniți.Cazul de hârtie "B": Reveniți.Foarfece -}} // incorect. Aduceți o cerere de a intra din nou.Retur getmove () -} public boolean playagain () {sistem.Out.Imprimare ("Doriți să jucați din nou? ") -String UserInput = InputScanner.Linia următoare () - UserInput = UserInput.Touppercase () - Return UserInput.Charat (0) == Y `-}} Calculator de clasă privată {Public Move Getmove () {Mutare [] Mișcări = Mutare.Valori () - Random Random = New Random () - INT Index = aleatoriu.Următorul (se mișcă.Lungime) -Recture Mută [index] -}} Public RockPersCissors () {utilizator = Utilizator nou () - Computer = Computer nou () - UtilizatorCore = 0-ComputersCore = 0-numereOfGames = 0-} Public VODGAME () {sistem.Out.Println ("Fisoare de hârtie rock!") - // obținerea mișcării USERMOVE = utilizator.Getmove () - Mutare Computermove = Computer.Getmove () - sistem.Out.Println (" Nuta accident vascular cerebral " + USERMAVE + ".") -System.Out.Println ("Computerul care rulează " + Computermove + ". N") - // Compararea mișcărilor și definiția WinNentint CompareMoves = USEMOVE.Comparare (CompareMoves) {caz 0: // Drawsystem.Out.Println ("Cravată!") -Break-caz 1: // a învins sistemul de jucători.Out.Println (USEMOVE + " Beats " + Computermove + ". Ai castigat!") -UserSerCore ++ - Break-caz -1: // a învins computerismul.Out.Println (Computermove + " Beats " + USERMAVE + ". Ai pierdut.") -Computerscore ++ - Break-} Numarofgames ++ - // Oferim utilizatorului să redea din nou (utilizator.PLAYAGAIN ()) {sistem.Out.Println () - StartGame () -} Alte {PrintGameStats () -}} / *** Concluzie de statistici. Datele sunt luate în considerare ca pe jumătate de adâncime * atunci când numără procentajul de victorii.* / Volumul privat PrintGameStats ()% 13.2F %% PRIVATE VORID PRINTADSHES (INT NUMBEROFDASHES) {pentru (INT I = 0- I < numberOfDashes- i++) {System.out.print("-")-}}public static void main(String[] args) {RockPaperScissors game = new RockPaperScissors()-game.startGame()-}}