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 () -}
  • Imagine intitulată Shot 2013 06 23 la 2.27.50 am.jpg
    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()-}}
    Publicații similare