Jak vyrobit hru na kámen, papír, nůžky v Javě (s obrázky)

Obsah:

Jak vyrobit hru na kámen, papír, nůžky v Javě (s obrázky)
Jak vyrobit hru na kámen, papír, nůžky v Javě (s obrázky)

Video: Jak vyrobit hru na kámen, papír, nůžky v Javě (s obrázky)

Video: Jak vyrobit hru na kámen, papír, nůžky v Javě (s obrázky)
Video: Importing Images as Textures in Your SketchUp Model - SketchUp Quick Tips 2024, Smět
Anonim

Rock, Paper, Scissors je ruční hra, kterou hrají dva lidé. Oba lidé by řekli „kámen, papír, nůžky“a poté současně natáhli ruku a vytvořili jeden ze tří objektů (kámen, papír nebo nůžky). Vítěz je určen formacemi rukou. Nůžky poráží papír, papír poráží kámen a kámen poráží nůžky. Pokud oba hráči hrají stejnou formaci ruky, je to považováno za remízu. Napíšeme jednoduchou hru v Javě pro simulaci Rock, Paper, Scissors, kde jeden hráč je uživatel a druhý hráč je počítač.

Kroky

1585279 1 1
1585279 1 1

Krok 1. Vytvořte hlavní třídu a zavolejte ji

Kámen, nůžky, papír

.

Toto bude třída, kde budeme psát hru. Můžete se rozhodnout pojmenovat to jinak, například

Hra

nebo

Hlavní

. Zapište deklarace metody pro konstruktor a hlavní metodu.

veřejná třída RockPaperScissors {public RockPaperScissors () {} public static void main (String args) {}}

1585279 2 1
1585279 2 1

Krok 2. Vytvořte výčet pro gesta rukou (kámen, papír nebo nůžky)

Mohli bychom použít řetězce k reprezentaci kamene, papíru nebo nůžek, ale výčet nám umožňuje předdefinovat naše konstanty, což znamená, že použití výčtu je lepší design. Zavoláme náš typ výčtu

Přestěhovat se

s hodnotami

SKÁLA

PAPÍR

a

NŮŽKY

private enum Move {ROCK, PAPER, SCISSORS}

1585279 3 1
1585279 3 1

Krok 3. Vytvořte dvě soukromé třídy

Uživatel

a

Počítač

.

Tyto třídy budou ve hře zastupovat naše hráče. Můžete se rozhodnout tyto třídy zveřejnit. The

Uživatel

třída bude třída, která uživatele vyzve k použití kamene, papíru nebo nůžek, takže budeme muset napsat

getMove ()

metoda. The

Počítač

třída bude také muset mít a

getMove ()

aby počítač mohl také provést tah. Do těchto metod vložíme zástupné symboly a implementujeme je později. The

Uživatel

třída bude vyžadovat konstruktor, který nastaví

Skener

objekt, který má převzít vstup uživatele. Vložíme

Skener

jako soukromé pole pro uživatele a poté jej inicializujte v konstruktoru. Jelikož používáme

Skener

třídu, musíme pro něj napsat příkaz importu v horní části našeho kódu. The

Počítač

třída nevyžaduje konstruktor, takže jej nepotřebujeme psát; když zahájíme

Počítač

objekt, budeme pouze volat výchozí konstruktor. Zde je to, co naše

Kámen, nůžky, papír

třída vypadá nyní:

import java.util. Scanner; veřejná třída RockPaperScissors {private enum Move {ROCK, PAPER, SCISSORS} soukromá třída Uživatel {private Scanner inputScanner; public User () {inputScanner = new Scanner (System.in); } public Move getMove () {// TODO: Implementujte tuto metodu return null; }} soukromá třída Počítač {public Move getMove () {// TODO: Implementujte tuto metodu return null; }} public RockPaperScissors () {} public static void main (String args) {}}

1585279 4 1
1585279 4 1

Krok 4. Napište

getMove ()

metoda pro

Počítač

třída.

Tato metoda vrátí náhodný

Přestěhovat se

. Můžeme získat řadu

Přestěhovat se

výčty voláním

hodnoty ()

metoda:

Move.values ()

. Chcete -li vybrat náhodného

Přestěhovat se

výčtu v tomto poli hodnot, musíme vygenerovat náhodný index, který je celé číslo mezi 0 a délkou našeho pole hodnot. K tomu můžeme použít

nextInt ()

metoda

Náhodný

třídu, ze které musíme importovat

java.util

. Poté, co jsme získali náhodný index, můžeme vrátit

Přestěhovat se

tohoto indexu z našeho pole hodnot.

public Move getMove () {Move move = Move.values (); Random random = new Random (); int index = random.nextInt (move.length); návrat tahů [index]; }

1585279 5 1
1585279 5 1

Krok 5. Napište

getMove ()

metoda pro

Uživatel

třída.

Tato metoda vrátí a

Přestěhovat se

odpovídající tomu, co má uživatel zadáno. Očekáváme, že uživatel napíše buď „rock“, „papír“nebo „nůžky“. Nejprve musíme uživatele vyzvat k zadání:

System.out.print („Kámen, papír nebo nůžky?“)

. Poté použijte

nextLine ()

metoda

Skener

objekt, aby uživatel získal vstup jako řetězec. Nyní musíme zkontrolovat, zda uživatel odeslal platný tah, ale můžeme být shovívaví, pokud uživatel chybně zadal slovo. Zkontrolujeme tedy pouze to, zda je první písmeno uživatelského vstupu buď „R“(pro kámen), „P“(pro papír) nebo „S“(pro nůžky), a o případ se nebudeme starat, protože nejprve použijeme

toUpperCase ()

metoda

Tětiva

class, aby byl vstupní řetězec uživatele celý velkými písmeny. Pokud uživatel nezadal vzdáleně správný vstup, vyzveme uživatele znovu. Poté podle toho, co uživatel vložil, vrátíme odpovídající tah.

public Move getMove () {// Vyzvat uživatele System.out.print („Kámen, papír nebo nůžky?“); // Získání vstupu uživatele Řetězec userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Uživatel zadal platný vstupní přepínač (firstLetter) {case 'R': return Move. ROCK; případ 'P': návrat Move. PAPER; případ 'S': návrat Move. SCISSORS; }} // Uživatel nezadal platný vstup. Znovu výzva. vrátit getMove (); }

1585279 6
1585279 6

Krok 6. Napište a

hrát znovu()

metoda pro

Uživatel

třída.

Uživatel by měl mít možnost hrát hru znovu a znovu. Abychom zjistili, zda chce uživatel znovu hrát, musíme napsat a

hrát znovu()

metoda, která vrací logickou hodnotu sdělující hře, zda se uživatel rozhodl hrát znovu nebo ne. V této metodě používáme

Skener

které jsme předtím iniciovali v konstruktoru, abychom od uživatele dostali „Ano“nebo „Ne“. Zkontrolujeme pouze, zda je první písmeno „Y“, abychom zjistili, zda chce uživatel znovu hrát. Jakýkoli jiný vstup bude znamenat, že uživatel nebude chtít znovu hrát.

public boolean playAgain () {System.out.print („Chcete znovu hrát?“); Řetězec userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); vrátit userInput.charAt (0) == 'Y'; }

1585279 7
1585279 7

Krok 7. Připojte

Uživatel

a

Počítač

třídy společně v

Kámen, nůžky, papír

třída.

Nyní, když jsme dokončili psaní

Uživatel

a

Počítač

třídy se můžeme soustředit na práci na naší skutečné hře. Vytvořte soukromá pole pro

Uživatel

a

Počítač

třídy v

Kámen, nůžky, papír

třída. Do těchto polí budeme potřebovat přístup

getMove ()

metody, když hrajeme hru. V konstruktoru pro

Kámen, nůžky, papír

třídy, inicializujte tato pole. Budeme také muset sledovat skóre v

userScore

a

computerScore

pole, která musíme v konstruktoru inicializovat jako 0. Musíme také sledovat počet her, což bude také pole inicializované jako 0.

soukromý uživatel; soukromý počítač; private int userScore; soukromé int computerScore; soukromé int čísloOfGames; public RockPaperScissors () {user = new User (); počítač = nový Počítač (); userScore = 0; computerScore = 0; numberOfGames = 0; }

1585279 8
1585279 8

Krok 8. Rozšiřte soubor

Přestěhovat se

enum zahrnout metodu, která nám říká, který tah v každém případě vyhrává.

Musíme napsat a

porovnat Pohyby ()

metoda, která vrací 0, pokud jsou tahy stejné, 1, pokud aktuální tah poráží druhý tah, a -1, pokud aktuální tah ztrácí na jiný tah. To bude užitečné pro určení vítěze ve hře. K implementaci této metody nejprve vrátíme 0, pokud jsou pohyby stejné, a proto máme remízu. Poté napište příkaz switch pro vrácení 1 nebo -1.

private enum Move {ROCK, PAPER, SCISSORS; /** * Porovná tento tah s jiným tahem k určení nerozhodného výsledku, výhry nebo * ztráty. * * @param otherMove * tah pro srovnání s * @return 1, pokud tento tah porazí druhý tah, -1 pokud tento tah prohraje s * druhým tahem, 0, pokud se tyto tahy shodují * / 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 se sem neměl dostat vrátit 0; }}

1585279 9
1585279 9

Krok 9. Vytvořte a

začít hru()

metoda v

Kámen, nůžky, papír

třída.

Tato metoda bude hrát hru. Začněte jednoduchým

System.out.println

v metodě.

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

1585279 10
1585279 10

Krok 10. Získejte pohyby od uživatele a počítače

V

začít hru()

použijte metodu

getMove ()

metody z

Uživatel

třída a

Počítač

třídy, aby si uživatel a pohyby počítače.

Přesunout userMove = user.getMove (); Přesunout computerMove = computer.getMove (); System.out.println ("\ nHrál jste" + userMove + "."); System.out.println ("Počítač přehráván" + computerMove + ". / N");

1585279 11
1585279 11

Krok 11. Porovnejte dva tahy a určete, zda vyhrál uživatel nebo počítač

Použijte

porovnat Pohyby ()

metoda z

Přestěhovat se

enum k určení, zda uživatel vyhrál nebo ne. Pokud uživatel vyhrál, zvyšte skóre uživatele o 1. Pokud uživatel prohrál, zvyšte skóre počítače o 1. Pokud došlo k nerozhodnému výsledku, nezvyšujte žádné ze skóre. Poté zvyšte počet odehraných her o jednu.

int porovnatMoves = userMove.compareMoves (computerMove); switch (compareMoves) {case 0: // Tie System.out.println ("Tie!"); přestávka; případ 1: // Uživatel vyhrává System.out.println (userMove + "bije" + computerMove + ". Vyhráli jste!"); userScore ++; přestávka; případ -1: // Počítač vyhrává System.out.println (computerMove + "bije" + userMove + ". Prohráli jste."); computerScore ++; přestávka; } numberOfGames ++;

1585279 12
1585279 12

Krok 12. Zeptejte se, zda chce uživatel znovu hrát

Pokud chce uživatel znovu hrát, zavolejte

začít hru()

znovu. Jinak volejte

printGameStats ()

který vytiskne statistiky hry. Tuto metodu napíšeme v dalším kroku.

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

1585279 13
1585279 13

Krok 13. Napište

printGameStats ()

metoda.

Tato metoda zobrazí statistiky hry: počet výher, počet proher, počet remíz, počet odehraných her a procento her, které uživatel vyhrál. Procento vyhraných her se vypočítá podle (# výher + (# remíza/2))/(# odehraných her). Tato metoda používá

System.out.printf

k vytištění formátovaného textu.

private void printGameStats () {int wins = userScore; int ztráty = computerScore; int ties = numberOfGames - userScore - computerScore; dvojnásobné procento výhry = (vyhrává + ((dvojité) remízy) / 2) / numberOfGames; // Řádek System.out.print ("+"); printDashes (68); System.out.println ("+"); // Tisk titulů System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "WINS", "LOSSES", "TIES", "GAMES PLAYED", "PERCENTAGE VYHRÁL"); // Řádek 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 ("|"); // Tisk hodnot System.out.printf ("| %6d | %6d | %6d | %12d | %13.2f %% | / n", výhry, prohry, remízy, numberOfGames, percentuální výhra * 100); // Řádek System.out.print ("+"); printDashes (68); System.out.println ("+"); }

1585279 14
1585279 14

Krok 14. Spusťte hru v hlavní třídě

V hlavní třídě inicializujte instanci souboru

Kámen, nůžky, papír

třídu a zavolejte

začít hru()

metoda.

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

1585279 15
1585279 15

Krok 15. Vyzkoušejte svou hru

Nyní, když jsme prošli veškerou snahou o napsání hry Rock, Paper, Scissors, je čas vše zkompilovat a vyzkoušet!

Ukázkový program

import java.util. Random; import java.util. Scanner; veřejná třída RockPaperScissors {soukromý uživatel; soukromý počítač; private int userScore; soukromé int computerScore; soukromé int čísloOfGames; private enum Move {ROCK, PAPER, SCISSORS; /** * Porovná tento tah s jiným tahem k určení nerozhodného výsledku, výhry nebo * ztráty. * * @param otherMove * tah pro srovnání s * @return 1, pokud tento tah porazí druhý tah, -1 pokud tento tah prohraje s * druhým tahem, 0, pokud se tyto tahy shodují * / 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 se sem neměl dostat vrátit 0; }} Uživatel soukromé třídy {private Scanner inputScanner; public User () {inputScanner = new Scanner (System.in); } public Move getMove () {// Vyzvat uživatele System.out.print („Kámen, papír nebo nůžky?“); // Získání vstupu uživatele Řetězec userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Uživatel zadal platný vstupní přepínač (firstLetter) {case 'R': return Move. ROCK; případ 'P': návrat Move. PAPER; případ 'S': návrat Move. SCISSORS; }} // Uživatel nezadal platný vstup. Znovu výzva. vrátit getMove (); } public boolean playAgain () {System.out.print („Chcete znovu hrát?“); Řetězec userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); vrátit userInput.charAt (0) == 'Y'; }} soukromá třída Počítač {public Move getMove () {Move move = Move.values (); Random random = new Random (); int index = random.nextInt (move.length); návrat tahů [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ískejte pohyby Move userMove = user.getMove (); Přesunout computerMove = computer.getMove (); System.out.println ("\ nHrál jste" + userMove + "."); System.out.println ("Počítač přehráván" + computerMove + ". / N"); // Porovnání tahů a určení vítěze int compareMoves = userMove.compareMoves (computerMove); switch (compareMoves) {case 0: // Tie System.out.println ("Tie!"); přestávka; případ 1: // Uživatel vyhrává System.out.println (userMove + "bije" + computerMove + ". Vyhráli jste!"); userScore ++; přestávka; případ -1: // Počítač vyhrává System.out.println (computerMove + "bije" + userMove + ". Prohráli jste."); computerScore ++; přestávka; } numberOfGames ++; // Požádejte uživatele, aby znovu hrál, pokud (user.playAgain ()) {System.out.println (); začít hru(); } else {printGameStats (); }} /*** Vytiskne statistiky hry. Vypočítává remízy jako 1/2 výhry v * procentech vyhraných. */ private void printGameStats () {int wins = userScore; int ztráty = computerScore; int ties = numberOfGames - userScore - computerScore; dvojnásobné procento výhry = (vyhrává + ((dvojité) remízy) / 2) / numberOfGames; // Řádek System.out.print ("+"); printDashes (68); System.out.println ("+"); // Tisk titulů System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "WINS", "LOSSES", "TIES", "GAMES PLAYED", "PERCENTAGE VYHRÁL"); // Řádek 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 ("|"); // Tisk hodnot System.out.printf ("| %6d | %6d | %6d | %12d | %13.2f %% | / n", výhry, prohry, remízy, numberOfGames, percentuální výhra * 100); // Řádek 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 (); }}

Doporučuje: