Ako písať hru `kameň, nožnice, papier` na java
"Kameň, nožnice, papier" - to je hra "na prstoch" pre dvoch. Hráči hovoria "kameň, nožnice, papier" a hodený dopredu, tvoria jednu z troch obrázkov (kameň, nožnice alebo papier). Víťaz je určený nasledovne: nožnice beat papier, papier bije kameň, kameň bije nožnice. Ak obaja hráči zobrazujú rovnaký obrázok, považuje sa za remízu. Budeme napísať jednoduchú hru na Java, ktorá bude hrať "kameň, nožnice, papier" s počítačom.
Kroky
jeden. Vytvorte základnú triedu a pomenujte ho
Kameň Papier Nožnice
. V tejto triede popíšeme hru. Môžete ho zavolať inak, napríklad Hra
alebo Hlavná
. Napíšte dizajnérske reklamy a hlavnú metódu.Public Class RockPamerscissors {Verejné RockPamerscissers () {} Verejné udalosti Void Main (String [] Args) {}}
2. Vytvorte zoznam (ENUM) na opis možných ťahov (kameň, nožnice, papier). Môžeme nastaviť rušidlo, ale zoznam nám umožňuje predvodu konštantu, takže použitie enum je lepšie. Zavolajme na naše zápis
Pohybovať
A nastaviť významyRock
, Papier
a Nožnice
.Súkromný enum presunúť {rock, papier, nožnice}
3. Vytvorte dve zatvorené triedy (kľúčové slovo súkromné)
Používateľa
a Počítač
. Tieto triedy budú predstavovať hráčov. Môžete tiež vykonať tieto triedy (verejné kľúčové slovo). TriedaPoužívateľa
bude požiadať od užívateľa, čo sa pohybuje - kameň, nožnice alebo papier - takže musíme napísať metódu getmove ()
. TriedaPočítač
Mali by mať aj metódugetmove ()
, Aby sme mohli získať počítač. Doteraz si tieto metódy jednoducho vyhlásime a neskôr napíšem implementáciu. Trieda Používateľa
Musí mať konštruktor, v ktorom je objekt inicializovaný Skener
, ktorý bude čítať vstup užívateľa. VyhlásiťSkener
Uzavretý člen údajov o triede Používateľa
a inicializovať ho v dizajníri. Vzhľadom k tomu, že budeme používať triedu Skener
, Musíme ho pripojiť pomocou kľúčového slova Dovoz
. Trieda Počítač
Dizajnér nie je potrebný, takže ho nebudeme písať - pri inicializácii objektu Počítač
Jednoducho zavoláme predvolený návrhár. Tu je trieda Kameň Papier Nožnice
Vyzerá teraz:Dovoz Java.Util.Scanner-Public Class RockPamersorsorsorsorsorsorstors {Private Enum Presun {Rock, Paper, Nožnice} Privát User {súkromný skener INPUTNALSCANNER-Verejný používateľ () {Inputscanner = Nový skener (systém.V) -} Verejný pohyb Getmove () {// TOPOUTORY: Implementácia Metter NULL -}} Private Class Computer {Public Move Getmove () {Verejný ťah GETMOVE () {// TODO: Implementácia METUNT NULL -}} Verejné RockPanersCISSORSSORS () {} Public Static Void Main (String [] Args) {}}
4. Zapíšte implementáciu metódy
getmove ()
Pre triedu Počítač
. Táto metóda vráti náhodnú hodnotu Pohybovať
.Môžeme získať pole hodnôt Pohybovať
Volanie metódy Hodnoty ()
Páči sa ti to: Pohybovať.Hodnoty ()
. Vybrať náhodný význam Pohybovať
Z tohto poľa musíme generovať náhodného indexu medzi 0 a počtom prvku poľa. Ak to chcete urobiť, zavolajte na metóduNEXTINT ()
triedaNáhodný
, Ktoré pripájame tak:Dovoz Java.Util.Náhodný
. Po obdržaní náhodného indexu, vrátime hodnotu Pohybovať
S týmto indexom v našom poli.Verejný pohyb Getmove () {MOUNT [] pohyby = pohyb.Hodnoty () - Náhodné Random = New Random () - Int index = Random.NEXTINT (ťahy.Dĺžka) -Return TOPES [INDEX] -}
päť. Zapíšte implementáciu metódy
getmove ()
Pre triedu Používateľa
. Táto metóda vráti hodnotu Pohybovať
Vhodné užívateľské vstupy. Užívateľ môže zadať "kameň", "nožnice", alebo "papierový". Po prvé, stiahnite správu: Systém.Von.Tlač ("Kameň, nožnice alebo papier?")
. Potom pomocou metódy Nextline ()
Objekt Skener
, Získame vstup používateľa vo forme reťazca. Teraz musíte skontrolovať správnosť vstupu používateľa. Nebudeme však venovať pozornosť preklepom a jednoducho skontrolovať prvé písmeno "K", "H" alebo "B". Nebudeme venovať pozornosť registra listov, pretože vopred zavoláme metódu TUPPER ()
trieda Reťazec
, Pri zadávaní používateľa do najvyššieho registra. Ak používateľ nezadal ani približne správny výber, požiadam o jeho pohyb znova. Potom v závislosti od vstupu používateľa, naša metóda vráti zodpovedajúcu hodnotu Pohybovať
.Verejný presun getmove () {// zrušte žiadosť o zadanie.Von.Tlač ("Kameň, nožnice alebo papier? ") - // Prečítajte si vstup UserString userinput = InputScanner.Nextline () - userinput = userinput.TUPPER () - Char Firstletter = userinput.Charat (0) -Ak (Firstletter == `K` || Firstletter == `N` || FirstLetter == `B`) {// Zadanie správneho spánku (Firstletter) {CASE `K`: návratový pohyb.ROCK-CASE `H`: návrat.Papierový prípad `B`: návratový pohyb.Nožnice -}} // Nesprávne. Uveďte žiadosť o zadanie znova.Návrat Getmove () -}
6. Zapíšte implementáciu metódy
Hrať znova ()
trieda Používateľa
. Užívateľ musí byť schopný znova a znova hrať. Ak chcete zistiť, či chce užívateľ znova hrať, metódu zápisu Hrať znova ()
, ktorý vráti hodnotu typu boolu, a teda, povedzte hru, či už užívateľ chce znova hrať. V tejto metóde používame objekt Skener
, ktoré sme inicializovali v dizajníri, aby sme sa dostali"Áno" alebo"Nie" Od užívateľa. Práve si skontrolujeme prvé písmeno, ak si to chce užívateľ hrať znova, akékoľvek iné písmeno bude znamenať "Nie".Verejná boolean PlayAgain () {systém.Von.Tlač ("Chcete hrať znova? ") -String userinput = Inputscanner.Nextline () - userinput = userinput.TOUPPER () - RETURNIGHT USERINUTPUT.Charat (0) == `D`-}
7. Kravatu triedy
Používateľa
a trieda Počítač
v triede Kameň Papier Nožnice
. Písací kód pre triedy Používateľa
a Počítač
, Môžeme urobiť samotnú hru. Oznámte triedy Používateľa
a Počítač
Údaje o zatvorených triedach Kameň Papier Nožnice
. Odvoláme sa na ne, spôsobuje metódu getmove ()
, Ak chcete získať hráčov. Inicializovať ich v designer triedy Kameň Papier Nožnice
. Musíme tiež uložiť účet. Upraviť PoužívateliaCore
a Computerscore
, Linitiase ich nula. A nakoniec vytvorte dátové pole na uloženie počtu hier, inicializovať ho s nulou.Privát User User-Priperujte počítačový počítač-Private Int Userscore-Private Int Computerscore-Private Int NumberTofGames-Public RockPamerscissors () {User = Nový užívateľ () - Computer = Nový počítač () - Userscore = 0-Computerscore = 0-NumberofGames = 0 -}
osem. Kompletný zoznam
Pohybovať
Metóda, ktorá sa bude porovnať pohybovať a určiť víťaza. My Ručné kód pre metódu PAROVNOSTI ()
ktorý sa vráti 0, ak sú pohyby rovnaké, 1 - ak aktuálny beh bije druhú a -1 - ak iný pohyb bije prúd. Aktuálny beh je znázornený týmto ukazovateľom a druhý sa prenáša v parametri iných. Je užitočné určiť víťaza. Najprv napíšeme kód definujúci kreslenie a vrátenie 0 a potom napíšte prepínač na určenie víťaza.Private Enum Presun {Rock, Paper, Nožnice - / *** porovnáva aktuálny krok s prenášaným v parametri ostatných a určuje * víťazstvo, porážku alebo kreslenie.** @param ostatnýMove * kurz, s ktorým je aktuálny * @return 1, ak aktuálny pohyb bije druhú, -1 ak iný pohyb bije aktuálny, * 0 v prípade remízy * / verejné INT Porovnávacie InéMove) {// Nakreslite == Othermove) Return 0-Switch (toto) {case rock: návrat (inémove == nožnice ? 1: -1) -Case Paper: Návrat (Othermove == Rock ? 1: -1) -Case nožnice: návrat (inémove == papier ? 1: -1) -} // Tento kód nikdy nesmie vykonať 0-}}
deväť. Oznámiť metódu
Začať hru ()
v triede Kameň Papier Nožnice
. V tejto metóde bude hra. Začnite volaním metódy Systém.Von.PrintLN
.Public Void StartGame () {System.Von.PrintLN ("KAMEŇ PAPIER NOŽNICE!") -}
10. Získajte počítačové ťahy a používateľa. V metóde
Začať hru ()
Zavolať getmove ()
triedy Používateľa
a Počítač
, dostať svoje pohyby.Presunúť usermove = user.Getmove () - presunúť computermove = počítač.Getmove () - systém.Von.PrintLN ("Nuta ťah" + Usermove + ".") -Systém.Von.PrintLN ("Počítač beží" + Computerove + ".N")-
jedenásť. Porovnať kurz počítača a presun hráča, aby ste určili, kto vyhral. Zavolajte metódu
PAROVNOSTI ()
zoznam Pohybovať
, Určiť, či používateľ vyhral. Ak áno, zvýšte svoj účet na 1. Ak nie, zvýšte účet počítača. V prípade remízy zostáva účet rovnaký. Po tom, zvýšenie počtu hier, ktoré hrajú 1.Porovnanie Int = usermove.Porovnania (porovnanie) {CASE 0: // Nakreslenie.Von.PrintLN ("Kresliť!") -Break-Case 1: // Porazil hráč hráča.Von.PrintLN (usermove + " Beats " + Computerove + ". Vyhral si!") -Userserscore ++ - Break-Case -1: // Porazil ComputerSystem.Von.PrintLN (COMPULLERMOVECE + " Beats " + Usermove + ". Prehral si.") -Computerscore ++ - Break-} NumberOfGames++-
12. Opýtajte sa používateľa, či chce znova hrať. Ak áno, zavolajte na metódu
Začať hru ()
opäť. Ak nie, zavolajte na metódu PrintGamestats ()
, ktorý prinesie štatistiku hry. Budeme píšeme svoju implementáciu v ďalšom kroku.Ak (používateľ.PlayAgain ()) {System.Von.PrintLN () - StartGame () -} Else {PrintGamestats () -}
13. Zapíšte implementáciu metódy
PrintGamestats ()
. Táto metóda stiahne štatistiky hry: počet víťazstiev, lézií, kreslí, počet hraných hier a percentuálneho podielu víťazstva hráča. Percento vyhraných hier sa považuje za nasledovne: (počet víťazstiev + (počet čerpaní / 2)) / (počet prehrávaných hier). Táto metóda používa Systém.Von.Printf
Pre formátovaný textový výstup.Private Daily PrintGamestats () ") -Prístupy (10) -system.Von.Tlač ("+") -Prístupy (10) -system.Von.Tlač ("+") -Prístupy (10) -system.Von.Tlač ("+") -PrintDashes (16) -system.Von.Tlač ("+") -Printashes (18) -system.Von.PrintLN ("
štrnásť. Začať hru. Hlavne trieda inicializovať objekt
Kameň Papier Nožnice
a zavolajte jej metódu Začať hru ()
.Public Static Void Main (reťazec [] Args) {RockPamerscissors hra = Nové RockPamerscissors () - Hra.Začať hru () -}

pätnásť. Otestovať hru. Teraz, keď je všetka práca za sebou, je čas zostaviť a otestovať našu hru!
Príklad programu
Dovoz Java.Util.Random-Import Java.Util.Scanner-Public Class RockPamersCISSORSSORSSORS {SÚKROMNÝM POUŽÍVATEĽOVOM POUŽÍVATEĽOV-PRIPOJOVACÍM COMPUTNÝMI POTREBUJÚCICH INT COMPLECTERSCORE-SÚKROMNÝM INT NUMBERYFGAMES-SÚKROMNÉHO ENUMOVÉHO PROSTREDNÍCTVOM a určuje * víťazstvo, porážku alebo čerpať.** @param ostatnýMove * kurz, s ktorým je aktuálny * @return 1, ak aktuálny pohyb bije druhú, -1 ak iný pohyb bije aktuálny, * 0 v prípade remízy * / verejné INT Porovnávacie InéMove) {// Nakreslite == Othermove) Return 0-Switch (toto) {case rock: návrat (inémove == nožnice ? 1: -1) -Case Paper: Návrat (Othermove == Rock ? 1: -1) -Case nožnice: návrat (inémove == papier ? 1: -1) -} // Tento kód nemusí byť vykonaný NIKDY /}} Používateľ súkromnej triedy {súkromný skener Inputscanner-Verejný používateľ () {Inputscanner = Nový skener (systém.V) -} Verejný pohyb Getmove () {// Zobrazí žiadosť o zadanie.Von.Tlač ("Kameň, nožnice alebo papier? ") - // Prečítajte si vstup UserString userinput = InputScanner.Nextline () - userinput = userinput.TUPPER () - Char Firstletter = userinput.Charat (0) -Ak (Firstletter == `K` || Firstletter == `N` || FirstLetter == `B`) {// Zadanie správneho spánku (Firstletter) {CASE `K`: návratový pohyb.ROCK-CASE `H`: návrat.Papierový prípad `B`: návratový pohyb.Nožnice -}} // Nesprávne. Uveďte žiadosť o zadanie znova.Návrat Getmove () -} Verejná boolean PlayAgain () {System.Von.Tlač ("Chcete hrať znova? ") -String userinput = Inputscanner.Nextline () - userinput = userinput.TOUPPER () - RETURNIGHT USERINUTPUT.Charat (0) == `Y` -}} Private Class Computer {Public Move Getmove () {MOVE [] Pohyby = pohyb.Hodnoty () - Náhodné Random = New Random () - Int index = Random.NEXTINT (ťahy.Dĺžka) -Return TOPES [INDEX] -}}} Verejné skalka () {user = Nový užívateľ () - Computer = Nový počítač () - Userscore = 0-ComputerCore = 0-NumberofGames = 0-} Public Void StartGame () {System.Von.PrintLN ("KAMEŇ PAPIER NOŽNICE!") - // Získanie presunúť usermove = používateľ.Getmove () - presunúť computermove = počítač.Getmove () - systém.Von.PrintLN ("Nuta ťah " + Usermove + ".") -Systém.Von.PrintLN ("Počítač beží " + Computerove + ".N") - // Porovnanie pohybov a definícia porovnávania Winnerint = usermove.Porovnania (porovnanie) {CASE 0: // Nakreslenie.Von.PrintLN ("Kravatu!") -Break-Case 1: // Porazil hráč hráča.Von.PrintLN (usermove + " Beats " + Computerove + ". Vyhral si!") -Userserscore ++ - Break-Case -1: // Porazil ComputerSystem.Von.PrintLN (COMPULLERMOVECE + " Beats " + Usermove + ". Prehral si.") -Computerscore ++ - Break-} NumberofGames ++ - // Ponúkame užívateľovi znova hrať (používateľ.PlayAgain ()) {System.Von.PrintLN () - StartGame () -} Else {PrintGamestats () -}} / *** Uzavretie štatistiky. Kresby sa berú do úvahy ako pol hĺbky * pri počítaní percentuálneho podielu víťazstva.* / Súkromné prázdnotné PrintGamestats ()% 13.2f %% Private Daily PrintDashess (Int Numberofdashes) {pre (int i = 0- i < numberOfDashes- i++) {System.out.print("-")-}}public static void main(String[] args) {RockPaperScissors game = new RockPaperScissors()-game.startGame()-}}