Ako vyrobiť hru na kameň, papier, nožnice v Jave (s obrázkami)

Obsah:

Ako vyrobiť hru na kameň, papier, nožnice v Jave (s obrázkami)
Ako vyrobiť hru na kameň, papier, nožnice v Jave (s obrázkami)

Video: Ako vyrobiť hru na kameň, papier, nožnice v Jave (s obrázkami)

Video: Ako vyrobiť hru na kameň, papier, nožnice v Jave (s obrázkami)
Video: Экспорт анимации в Blender - правильный путь! (Пошаговое руководство для начинающих по Blender) 2024, Apríl
Anonim

Rock, Paper, Scissors je ručná hra, ktorú hrajú dvaja ľudia. Obaja ľudia povedali „kameň, papier, nožnice“a potom súčasne natiahnutou rukou vytvorili jeden z troch predmetov (kameň, papier alebo nožnice). Víťaza určujú formácie rúk. Nožnice porazia papier, papier porazí kameň a kameň nožnice. Ak obaja hráči hrajú rovnakú formáciu rúk, považuje sa to za remízu. Napíšeme jednoduchú hru v Jave na simuláciu rocku, papiera, nožníc, kde jeden hráč je používateľ a druhý hráč je počítač.

Kroky

1585279 1 1
1585279 1 1

Krok 1. Vytvorte hlavnú triedu a zavolajte ju

Kameň Papier Nožnice

.

Toto bude trieda, kde budeme písať hru. Môžete sa rozhodnúť pomenovať to inak ako napr

Hra

alebo

Hlavná

. Zapíšte deklarácie metódy pre konštruktor a hlavnú metódu.

public class RockPaperScissors {public RockPaperScissors () {} public static void main (String args) {}}

1585279 2 1
1585279 2 1

Krok 2. Vytvorte zoznam pre gestá rúk (kameň, papier alebo nožnice)

Na reprezentáciu kameňa, papiera alebo nožníc by sme mohli použiť reťazce, ale enumerácia nám umožňuje preddefinovať naše konštanty, čo znamená, že použitie enumerácie je lepším návrhom. Nazveme náš typ enum

Pohyb

s hodnotami

SKALA

PAPIER

a

Nožnice

private enum Move {ROCK, PAPER, SCISSORS}

1585279 3 1
1585279 3 1

Krok 3. Vytvorte dve súkromné triedy

Používateľ

a

Počítač

.

Tieto triedy budú v hre zastupovať našich hráčov. Môžete sa rozhodnúť tieto triedy zverejniť. The

Používateľ

trieda bude trieda, ktorá vyzve používateľa na kameň, papier alebo nožnice, takže budeme musieť napísať

getMove ()

metóda. The

Počítač

trieda bude tiež musieť mať a

getMove ()

metóda, aby počítač mohol vykonať aj ťah. Do týchto metód vložíme zástupné symboly a implementujeme ich neskôr. The

Používateľ

trieda bude vyžadovať konštruktor, ktorý nastaví

Skener

objekt na vloženie vstupu užívateľa. Položíme

Skener

ako súkromné pole pre používateľa a potom ho inicializujte v konštruktore. Keďže používame súbor

Skener

triedu, musíme naň napísať príkaz na import v hornej časti kódu. The

Počítač

trieda nevyžaduje konštruktor, takže ho nepotrebujeme písať; keď spustíme

Počítač

objekt, budeme iba volať predvolený konštruktor. Tu je to, čo náš

Kameň Papier Nožnice

trieda vyzerá takto:

import java.util. Scanner; verejná trieda RockPaperScissors {private enum Move {ROCK, PAPER, SCISSORS} private class User {private Scanner inputScanner; public User () {inputScanner = nový skener (System.in); } public Move getMove () {// TODO: Implementácia tejto metódy return null; }} súkromná trieda Počítač {public Move getMove () {// TODO: Implementácia tejto metódy return null; }} public RockPaperScissors () {} public static void main (String args) {}}

1585279 4 1
1585279 4 1

Krok 4. Napíšte súbor

getMove ()

metóda pre

Počítač

trieda.

Táto metóda vráti náhodný výsledok

Pohyb

. Môžeme získať celý rad

Pohyb

enumerácie volaním

hodnoty ()

metóda:

Move.values ()

. Na výber náhodne

Pohyb

enumeráciu v tomto poli hodnôt, musíme vygenerovať náhodný index, ktorý je celé číslo medzi 0 a dĺžkou nášho poľa hodnôt. Na to môžeme použiť

nextInt ()

metóda

Náhodne

triedu, z ktorej musíme importovať

java.util

. Potom, čo sme získali náhodný index, môžeme vrátiť

Pohyb

tohto indexu z nášho poľa hodnôt.

public Move getMove () {Move move = Move.values (); Random random = new Random (); int index = random.nextInt (move.length); návratové pohyby [index]; }

1585279 5 1
1585279 5 1

Krok 5. Napíšte súbor

getMove ()

metóda pre

Používateľ

trieda.

Táto metóda vráti a

Pohyb

zodpovedajúce tomu, čo má užívateľ zadané. Očakávame, že používateľ napíše buď „rock“, „papier“alebo „nožnice“. Najprv musíme používateľa vyzvať na zadanie:

System.out.print („Kameň, papier alebo nožnice?“)

. Potom použite

nextLine ()

metóda

Skener

objekt, aby používateľ získal vstup ako reťazec. Teraz musíme skontrolovať, či používateľ odoslal platný ťah, ale môžeme byť zhovievaví, ak používateľ nesprávne zadá slovo. Skontrolujeme teda iba to, či je prvé písmeno používateľského vstupu buď „R“(pre rock), „P“(pre papier) alebo „S“(pre nožnice), a nebude nás to zaujímať, pretože najskôr použijeme

toUpperCase ()

metóda

Reťazec

triedy, aby bol vstupný reťazec používateľa celý veľký. Ak používateľ nezadal vzdialene správny vstup, vyzveme ho znova. Potom podľa toho, čo používateľ vložil, vrátime zodpovedajúci ťah.

public Move getMove () {// Vyzvať používateľa System.out.print („Kameň, papier alebo nožnice?“); // Získať vstup užívateľa Reťazec userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Užívateľ zadal platný vstupný prepínač (firstLetter) {prípad 'R': return Move. ROCK; prípad 'P': návrat Move. PAPER; prípad 'S': vrátiť Move. SCISSORS; }} // Používateľ nezadal platný vstup. Opäť výzva. vrátiť getMove (); }

1585279 6
1585279 6

Krok 6. Napíšte a

hrať znova()

metóda pre

Používateľ

trieda.

Užívateľ by mal mať možnosť hrať hru znova a znova. Aby sme zistili, či chce používateľ znova hrať, musíme napísať a

hrať znova()

metóda, ktorá vracia logickú hodnotu hry a hovorí, či sa používateľ rozhodol hrať znova alebo nie. V tejto metóde používame

Skener

ktoré sme predtým iniciovali v konštruktore, aby sme od používateľa dostali „áno“alebo „nie“. Skontrolujeme iba, či je prvé písmeno „Y“, aby sme zistili, či chce používateľ znova hrať. Akýkoľvek iný vstup bude znamenať, že používateľ už nebude chcieť hrať.

public boolean playAgain () {System.out.print („Chcete si znova zahrať?“); Reťazec userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); vrátiť userInput.charAt (0) == 'Y'; }

1585279 7
1585279 7

Krok 7. Pripojte

Používateľ

a

Počítač

triedy spoločne v

Kameň Papier Nožnice

trieda.

Teraz, keď sme skončili s písaním

Používateľ

a

Počítač

triedy sa môžeme zamerať na prácu na našej skutočnej hre. Vytvorte súkromné polia pre súbor

Používateľ

a

Počítač

triedy v

Kameň Papier Nožnice

trieda. Na prístup k týmto poliam budeme potrebovať prístup

getMove ()

metódy, keď hráme hru. V konštruktéri pre

Kameň Papier Nožnice

triedy, inicializujte tieto polia. Budeme tiež musieť sledovať skóre

userScore

a

computerScore

polia, ktoré musíme v konstruktéri inicializovať ako 0. Musíme tiež sledovať počet hier, čo bude tiež pole inicializované ako 0.

súkromný užívateľ; súkromný počítačový počítač; private int userScore; súkromný int computerScore; súkromné int čísloOfGames; public RockPaperScissors () {user = new User (); počítač = nový Počítač (); userScore = 0; computerScore = 0; numberOfGames = 0; }

1585279 8
1585279 8

Krok 8. Predĺžte

Pohyb

enum zahrnúť metódu, ktorá nám hovorí, ktorý ťah v každom prípade vyhráva.

Musíme napísať a

compareMoves ()

metóda, ktorá vráti 0, ak sú ťahy rovnaké, 1, ak aktuálny ťah porazí druhý ťah, a -1, ak aktuálny ťah stratí na iný ťah. To bude užitočné pri určovaní víťaza v hre. Na implementáciu tejto metódy najskôr vrátime 0, ak sú pohyby rovnaké, a preto máme remízu. Potom napíšte príkaz switch pre vrátenie 1 alebo -1.

private enum Move {ROCK, PAPER, SCISSORS; /** * Porovnáva tento ťah s iným ťahom s určením remízy, výhry alebo * prehry. * * @param otherMove * ťah na porovnanie s * @return 1, ak tento ťah porazí druhý ťah, -1 ak tento ťah prehrá na * druhý ťah, 0, ak sa tieto ťahy zhodujú * / public int compareMoves (Move otherMove) { / / Tie if (this == otherMove) return 0; switch (this) {case ROCK: return (otherMove == SCISSORS? 1: -1); case PAPER: return (otherMove == ROCK? 1: -1); case SCISSORS: return (otherMove == PAPER? 1: -1); } // Nikdy by ste sa sem nemali dostať, vráťte 0; }}

1585279 9
1585279 9

Krok 9. Vytvorte a

začať hru()

metóda v

Kameň Papier Nožnice

trieda.

Táto metóda bude hrať hru. Začnite tým, že uvediete jednoduchú vec

System.out.println

v metóde.

public void startGame () {System.out.println ("ROCK, PAPER, SCISSORS!"); }

1585279 10
1585279 10

Krok 10. Získajte pohyby od používateľa a počítača

V

začať hru()

použite metódu

getMove ()

metódy z

Používateľ

trieda a

Počítač

triedy, aby získal pohyby používateľa a počítača.

Move userMove = user.getMove (); Move computerMove = computer.getMove (); System.out.println ("\ nHrali ste" + userMove + "."); System.out.println ("Počítač hraný" + computerMove + ". / N");

1585279 11
1585279 11

Krok 11. Porovnajte tieto dva ťahy a určte, či vyhral používateľ alebo počítač

Použi

compareMoves ()

metóda z

Pohyb

enum na určenie, či používateľ vyhral alebo nie. Ak používateľ vyhral, zvýšte skóre používateľa o 1. Ak používateľ prehral, zvýšte skóre počítača o 1. Ak došlo k nerozhodnému výsledku, nezvyšujte žiadne zo skóre. Potom zvýšte počet hier hraných o jednu.

int compareMoves = userMove.compareMoves (computerMove); switch (compareMoves) {case 0: // Tie System.out.println ("Tie!"); prestávka; prípad 1: // Používateľ vyhráva System.out.println (userMove + „bije“+ computerMove + „. Vyhrali ste!“); userScore ++; prestávka; prípad -1: // Počítač vyhráva System.out.println (computerMove + "bije" + userMove + ". Prehrali ste."); computerScore ++; prestávka; } numberOfGames ++;

1585279 12
1585279 12

Krok 12. Opýtajte sa, či chce používateľ znova hrať

Ak chce používateľ znova hrať, zavolajte

začať hru()

znova. V opačnom prípade zavolajte

printGameStats ()

ktorý vytlačí štatistiky hry. Túto metódu napíšeme v nasledujúcom kroku.

if (user.playAgain ()) {System.out.println (); začať hru(); } else {printGameStats (); }

1585279 13
1585279 13

Krok 13. Napíšte súbor

printGameStats ()

metóda.

Táto metóda zobrazí štatistiky hry: počet víťazstiev, počet prehier, počet remíz, počet odohratých hier a percento hier, ktoré používateľ vyhral. Percento vyhratých hier sa vypočíta podľa (# víťazstiev + (# remízy/2))/(# odohraných hier). Táto metóda používa

System.out.printf

vytlačiť formátovaný text.

private void printGameStats () {int wins = userScore; int straty = computerScore; int ties = numberOfGames - userScore - computerScore; dvojnásobné percento výhry = (výhry + ((dvojité) remízy) / 2) / numberOfGames; // Riadok System.out.print ("+"); printDashes (68); System.out.println ("+"); // Tlač názvov System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "WINS", "LOSSES", "TIES", "GAMES PLAYED", "PERCENTAGE VYHRAŤ “); // Riadok System.out.print ("|"); printDashes (10); System.out.print ("+"); printDashes (10); System.out.print ("+"); printDashes (10); System.out.print ("+"); printDashes (16); System.out.print ("+"); printDashes (18); System.out.println ("|"); // Tlač hodnôt System.out.printf ("| %6d | %6d | %6d | %12d | %13.2f %% | / n", výhry, prehry, remízy, numberOfGames, percentuálna výhra * 100); // Riadok System.out.print ("+"); printDashes (68); System.out.println ("+"); }

1585279 14
1585279 14

Krok 14. Začnite hru v hlavnej triede

V hlavnej triede inicializujte inštanciu súboru

Kameň Papier Nožnice

triedu a zavolajte na

začať hru()

metóda.

public static void main (String args) {RockPaperScissors game = new RockPaperScissors (); game.startGame (); }

1585279 15
1585279 15

Krok 15. Vyskúšajte si svoju hru

Teraz, keď sme prešli všetkou snahou o napísanie hry Rock, Paper, Scissors, je čas všetko skompilovať a otestovať!

Ukážkový program

import java.util. Random; import java.util. Scanner; verejná trieda RockPaperScissors {súkromný používateľ; súkromný počítačový počítač; private int userScore; súkromný int computerScore; súkromné int čísloOfGames; private enum Move {ROCK, PAPER, SCISSORS; /** * Porovnáva tento ťah s iným ťahom s určením remízy, výhry alebo * prehry. * * @param otherMove * ťah na porovnanie s * @return 1, ak tento ťah porazí druhý ťah, -1 ak tento ťah stratí na * druhý ťah, 0, ak sa tieto ťahy zhodujú * / public int compareMoves (Move otherMove) { / / Tie if (this == otherMove) return 0; switch (this) {case ROCK: return (otherMove == SCISSORS? 1: -1); case PAPER: return (otherMove == ROCK? 1: -1); case SCISSORS: return (otherMove == PAPER? 1: -1); } // Nikdy by ste sa sem nemali dostať, vráťte 0; }} užívateľ súkromnej triedy {private Scanner inputScanner; public User () {inputScanner = nový skener (System.in); } public Move getMove () {// Vyzvať používateľa System.out.print („Kameň, papier alebo nožnice?“); // Získať vstup užívateľa Reťazec userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Užívateľ zadal platný vstupný prepínač (firstLetter) {prípad 'R': return Move. ROCK; prípad 'P': návrat Move. PAPER; prípad 'S': vrátiť Move. SCISSORS; }} // Používateľ nezadal platný vstup. Opäť výzva. vrátiť getMove (); } public boolean playAgain () {System.out.print („Chcete znova hrať?“); Reťazec userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); vrátiť userInput.charAt (0) == 'Y'; }} súkromná trieda Počítač {public Move getMove () {Move move = Move.values (); Random random = new Random (); int index = random.nextInt (move.length); návratové pohyby [index]; }} public RockPaperScissors () {user = new User (); počítač = nový Počítač (); userScore = 0; computerScore = 0; numberOfGames = 0; } public void startGame () {System.out.println ("ROCK, PAPER, SCISSORS!"); // Získať ťahy Presunúť userMove = user.getMove (); Move computerMove = computer.getMove (); System.out.println ("\ nHrali ste" + userMove + "."); System.out.println ("Počítač hraný" + computerMove + ". / N"); // Porovnajte ťahy a určte víťaza int porovnaťMovie = userMove.compareMoves (computerMove); switch (compareMoves) {case 0: // Tie System.out.println ("Tie!"); prestávka; prípad 1: // Používateľ vyhráva System.out.println (userMove + „bije“+ computerMove + „. Vyhrali ste!“); userScore ++; prestávka; prípad -1: // Počítač vyhráva System.out.println (computerMove + "bije" + userMove + ". Prehrali ste."); computerScore ++; prestávka; } numberOfGames ++; // Požiadajte používateľa, aby znova hral, ak (user.playAgain ()) {System.out.println (); začať hru(); } else {printGameStats (); }} /*** Vytlačí štatistiky hry. Vypočíta remízy ako 1/2 výhry v * percentuálnom podiele výhier. */ private void printGameStats () {int wins = userScore; int straty = computerScore; int ties = numberOfGames - userScore - computerScore; dvojnásobné percento výhry = (výhry + ((dvojité) remízy) / 2) / numberOfGames; // Riadok System.out.print ("+"); printDashes (68); System.out.println ("+"); // Tlač názvov System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "WINS", "LOSSES", "TIES", "GAMES PLAYED", "PERCENTAGE VYHRAŤ “); // Riadok System.out.print ("|"); printDashes (10); System.out.print ("+"); printDashes (10); System.out.print ("+"); printDashes (10); System.out.print ("+"); printDashes (16); System.out.print ("+"); printDashes (18); System.out.println ("|"); // Vytlačenie hodnôt System.out.printf ("| %6d | %6d | %6d | %12d | %13,2f %% | / n", výhry, prehry, remízy, numberOfGames, percentuálna výhra * 100); // Riadok System.out.print ("+"); printDashes (68); System.out.println ("+"); } private void printDashes (int numberOfDashes) {for (int i = 0; i <numberOfDashes; i ++) {System.out.print ("-"); }} public static void main (String args) {hra RockPaperScissors = nová RockPaperScissors (); game.startGame (); }}

Odporúča: