Jak napsat hru `kámen, nůžky, papír` na jávě
"Kámen, nůžky, papír" - to je hra "na prstech" pro dva. Hráči říkají "kámen, nůžky, papír" a hozený dopředu, tvořící jeden ze tří obrázků (kámen, nůžky nebo papír). Vítěz je určen následovně: nůžky beat papír, papír bije kámen, kámen bije nůžky. Pokud oba hráči ukazují stejnou postavu, je považován za remízu. Budeme psát jednoduchou hru na Javě, která bude hrát "kámen, nůžky, papír" s počítačem.
Kroky
jeden. Vytvořte základní třídu a pojmenujte jej
Kámen, nůžky, papír
. V této třídě popíšeme hru. Můžete ji zavolat jinak Hra
nebo Hlavní
. Napište návrhářské reklamy a hlavní metodu.Veřejná třída Rockpaperscissors {Public Rockpaperscissors () {} Veřejná uvedení void Main (String [] Args) {}}
2. Vytvořit seznam (enum) k popisu možných pohybů (kámen, nůžky, papír). Můžeme nastavit běžecké struny, ale zápis nám umožňuje předurčit konstantu, takže použití ENUM je lepší. Zavolejme náš seznam
Hýbat se
A nastavit významySkála
, Papír
a Nůžky
.Soukromý enum pohyb {rock, papír, nůžky}
3. Vytvořit dvě uzavřené třídy (klíčové slovo soukromé)
Uživatel
a Počítač
. Tyto třídy budou zastupovat hráče. Můžete také tyto třídy otevřené (veřejné klíčové slovo). TřídaUživatel
bude požádat od uživatele, který přesune to - kámen, nůžky nebo papír - takže musíme napsat metodu getmove ()
. TřídaPočítač
Mělo by mít také metodugetmove ()
, Takže můžeme získat počítač. Dosud budeme jednoduše deklarovat tyto metody a napsat implementaci později. Třída Uživatel
Musí mít konstruktor, ve kterém je objekt inicializován Skener
, který bude číst vstup uživatele. ProhlásitSkener
Uzavřený člen třídy Uživatel
a inicializovat to v designér. Protože budeme používat třídu Skener
, Musíme ji připojit pomocí klíčového slova Import
. Třída Počítač
Návrhář není potřeba, takže to nebudeme napsat - při inicializaci objektu Počítač
Jednoduše zavoláme výchozí návrháře. Zde je třída Kámen, nůžky, papír
Vypadá to teď:Dovozu Java.Util.Scanner-public Class Rockpaperscissors {Private Enum Move {Rock, Paper, Scissors} Private Class Uživatel {Private Scanner InputScanner-Public User () {InputScanner = New Scanner (System).In) -} Veřejný pohyb GetMove () {// TODO: Implementace Meturn NULL -}} Private Class Computer {Public Move Getmove () {Public Move Getmove () {// Todo: Implementace Meturn Null -}} Veřejné rockpaperscissors () {} Veřejná statická void Main (String [] Args) {}}
4. Napište implementaci metody
getmove ()
Pro třídu Počítač
. Tato metoda vrátí náhodnou hodnotu Hýbat se
.Můžeme získat řadu hodnot Hýbat se
Volání metody Hodnoty ()
takhle: Hýbat se.Hodnoty ()
. Zvolit náhodný význam Hýbat se
Z tohoto pole potřebujeme generovat náhodný index mezi 0 a počtem prvku pole. Chcete-li to provést, zavolejte metoduNEXTIST ()
třídaNáhodný
, Které se připojujeme:Dovozu Java.Util.Náhodný
. Po obdržení náhodného indexu, vrátíme hodnotu Hýbat se
S tímto indexem v našem poli.Veřejný pohyb Getmove () {Move [] Moves = TOP.Hodnoty () - náhodné náhodné = nové náhodné () - INT index = náhodný.NEXTIST (pohyby.Délka) -Return se pohybuje [index] -}
Pět. Napište implementaci metody
getmove ()
Pro třídu Uživatel
. Tato metoda vrátí hodnotu Hýbat se
Vhodný uživatelský vstup. Uživatel může zadat "kámen", "nůžky" nebo "papír". Za prvé, stáhnout zprávu: Systém.Ven.Tisk ("kámen, nůžky nebo papír?")
. Poté pomocí metody Nextline ()
Objekt Skener
, Získáváme uživatelský vstup do formuláře řetězce. Nyní musíte zkontrolovat správnost uživatele zadávání. Nicméně, nebudeme věnovat pozornost překlepům a jednoduše zkontrolovat první písmeno "k", "n" nebo "b". Také nebudeme věnovat pozornost registru dopisů, protože předem zavoláme metodu Touppercase ()
třída Tětiva
, Při zadávání uživatele do nejvyššího registru. Pokud uživatel nezadal ani přibližně správnou volbu, požádám o jeho přesun znovu. V závislosti na uživatelském vstupu se naší metoda vrátí odpovídající hodnotu Hýbat se
.Veřejný pohyb Getmove () {// stáhnout požadavek na vstup.Ven.Tisk ("kámen, nůžky nebo papír? ") - // Přečtěte si vstup uživatele UserinPut = InputScanner.NextLine () - userinput = userinPut.Touppercase () - char firstletter = userinPut.Charat (0) -IF (firstletter == `k` || firstletter == `n` || firstletter == `b`) {// Zadání správného spínače (firstletter) {case `k`: Vrátit se pohyb.Rock-case `h`: Vrátit se pohyb.Papír-pouzdro `b`: návratný pohyb.Nůžky -}} // Nesprávné. Přineste požadavek znovu zadat.Návrat getmove () -}
6. Napište implementaci metody
Hrát znovu ()
třída Uživatel
. Uživatel musí být schopen hrát znovu a znovu. Chcete-li zjistit, zda chce uživatel znovu hrát, zapsat metodu Hrát znovu ()
, který vrátí hodnotu typu Bool, a tedy sdělte hru, zda uživatel chce hrát znovu. V této metodě používáme objekt Skener
, které jsme inicializovali v designéra, abychom získali "ano" nebo "ne" od uživatele. Právě zkontrolujeme první písmeno, pokud byste to znamená, uživatel chce znovu hrát, jakýkoli jiný dopis bude znamenat "ne".Public Boolean Playagain () {System.Ven.Tisk ("chcete přehrát znovu? ") -Scanner -Scanner.NextLine () - userinput = userinPut.Touppercase () - Vrátit uživatele.Charat (0) == `d`-}
7. Kód třídy TIE
Uživatel
a třída Počítač
ve třídě Kámen, nůžky, papír
. Psací kód pro třídy Uživatel
a Počítač
, Můžeme udělat samotnou hru. Oznámení třídy Uživatel
a Počítač
Data uzavřená třída Kámen, nůžky, papír
. Budeme se odkazovat na ně, což způsobuje způsob getmove ()
, získat hráče. Inicializovat je ve třídě designér Kámen, nůžky, papír
. Musíme také uložit účet. Upravit UserScore
a Počítače
, Linitia je nula. A konečně vytvořte datové pole pro uložení počtu her, také inicializaci s nulou.Private User User-Private Computer-Private Int UživatelScore-Private-Private Int ComputerScore-Private Int NumberOfgames-veřejné rockpaperscissors () {User = Nový uživatel () - Computer = Nový počítač () - UserScore = 0-computerscore = 0-pupenscore = 0 -}
osm. Kompletní seznam
Hýbat se
Metoda, která bude srovnávat, pohybuje se a určit vítěze. Ruční kód pro metodu Porovnání ()
který se vrátí 0, pokud jsou pohyby stejné, 1 - pokud aktuální běh bije druhý a -1 - pokud jiný krok bije proud. Současný běh je zobrazen tímto ukazatelem a druhý je přenášen v parametru OtherMove. Je užitečné určit vítěze. Nejprve napíšeme kód definující kreslit a vracet 0 a poté napište pokyn k určení vítěze.Soukromý enum pohybuje {rock, papír, nůžky - / *** porovnává proudový pohyb s přenášenými v parametru Othermove a určuje * vítězství, porážku nebo kreslit.** @param OtherMove * Kurz, se kterým je aktuální * @return 1 porovnán, pokud aktuální krok porazí druhý, -1, pokud jiný krok porazí proud, * 0 v případě remízu * / public Int ComperMove (přesune) OtherMove) {// Draw == OtherMove) Návrat 0-spínač (toto) {Case Rock: Return (OtherMove == nůžky ? 1: -1) -case paper: návrat (ostatními) ? 1: -1) -case nůžky: návrat (dalšímove == papír ? 1: -1) -} // Tento kód nikdy nesmí být proveden 0-}}
devět. Oznamuje metodu
Začít hru ()
ve třídě Kámen, nůžky, papír
. V této metodě bude hra. Začněte voláním metody Systém.Ven.Tiskln
.Veřejný neplatný startGame () {System.Ven.PrintLn ("Kámen, nůžky, papír!") -}
10. Získejte počítačové tahy a uživatele. V metodě
Začít hru ()
Volání getmove ()
třídy Uživatel
a Počítač
, dostat jejich pohyby.Přesunout usermovat = uživatel.GetMove () - Přesunout Computermovate = Počítač.Getmove () - systém.Ven.PrintLn ("nvash" + userme + ".") -Systém.Ven.PrintLN ("počítačová struktura" + compuverme + ".n ")-
jedenáct. Porovnejte průběh počítače a přesunutí hráče určit, kdo vyhrál. Zavolej metodu
Porovnání ()
výpis Hýbat se
, Chcete-li zjistit, zda uživatel vyhrál. Pokud ano, zvýšit jeho účet na 1. Pokud ne, zvýšíte účet počítače. V případě remízy zůstává účet stejný. Poté zvyšte počet her hrálů 1.Int Componemoves = userme.Porovnání (srovnávání) {Případ 0: // DrawSystem.Ven.PrintLn ("Draw!") -Break-case 1: // poražené hráče.Ven.Tiskln (userme + "bije" + computermovate + ". Vyhrál jsi!") -Userscore ++ - přerušení-li -1 -1: // vyhrál počítačový systém.Ven.PrintLn (Compuvermove + "Beats" + userme + ". Prohrál jsi.") -Computerscore ++ - break-} numberOfgames++-
12. Zeptejte se uživatele, zda chce hrát znovu. Pokud ano, zavolejte metodu
Začít hru ()
znovu. Pokud ne, zavolejte metodu PrintGameStats ()
, který přinese statistiky hry. Implementaci napíšeme v dalším kroku.pokud (uživatel.Playagain ()) {System.Ven.PrintLn () - startGame () -} else {PrintGameStats () -}
13. Napište implementaci metody
PrintGameStats ()
. Tato metoda bude stáhnout statistiku hry: počet vítězství, lézí, kreslí, počet hraných her a procento hráčů vítězství hráče. Procento získaných her je považováno za následující: (počet vítězství + (počet kreslí / 2)) / (počet herních her). Tato metoda používá Systém.Ven.Tisk
Pro formátovaný textový výstup.Soukromé void PrintGameStats () ") -printDashes (10) -System.Ven.Tisk ("+") - PrintDashes (10) -System.Ven.Tisk ("+") - PrintDashes (10) -System.Ven.Tisk ("+") - PrintDashes (16) -System.Ven.Tisk ("+") - PrintDashes (18) -System.Ven.PrintLn ("
čtrnáct. Začít hru. Především třída inicializujte objekt
Kámen, nůžky, papír
a volání metody Začít hru ()
.Public Static Woid Main (String [] args) {rockpaperscissors hry = nové rockpaperscissors () - hra.Začít hru () -}

patnáct. Otestujte hru. Teď, když je v pořádku, je čas kompilovat a otestovat naši hru!
Příklad programu
Dovozu Java.Util.Náhodné import Java.Util.Scanner-public Class Rockpaperscissors {Private User User-Private Computer-Private Int UživatelScore-Private Int ComputersCore-Private Int PurpureOfgames-Private Enum Move {Rock, Papír, Scissors - / *** Porovnává proudový pohyb s přenášením v parametru OtherMove a určuje * vítězství, porážku nebo kreslit.** @param OtherMove * Kurz, se kterým je aktuální * @return 1 porovnán, pokud aktuální krok porazí druhý, -1, pokud jiný krok porazí proud, * 0 v případě remízu * / public Int ComperMove (přesune) OtherMove) {// Draw == OtherMove) Návrat 0-spínač (toto) {Case Rock: Return (OtherMove == nůžky ? 1: -1) -case paper: návrat (ostatními) ? 1: -1) -case nůžky: návrat (dalšímove == papír ? 1: -1) -} // Tento kód nemusí být proveden nikdy /}} User Private Class {Private Scanner InputScanner-Public User () {InputScanner = New Scanner (System.V) -} Veřejný pohyb GetMove () {// Zobrazí požadavek na zadání.Ven.Tisk ("kámen, nůžky nebo papír? ") - // Přečtěte si vstup uživatele UserinPut = InputScanner.NextLine () - userinput = userinPut.Touppercase () - char firstletter = userinPut.Charat (0) -IF (firstletter == `k` || firstletter == `n` || firstletter == `b`) {// Zadání správného spínače (firstletter) {case `k`: Vrátit se pohyb.Rock-case `h`: Vrátit se pohyb.Papír-pouzdro `b`: návratný pohyb.Nůžky -}} // Nesprávné. Přineste požadavek znovu zadat.Return Getmove () -} Veřejný Boolean Playagain () {System.Ven.Tisk ("chcete přehrát znovu? ") -Scanner -Scanner.NextLine () - userinput = userinPut.Touppercase () - Vrátit uživatele.Charat (0) == `Y` -}} Private Class Computer {Public Move Getmove () {Move [] Move = TOP.Hodnoty () - náhodné náhodné = nové náhodné () - INT index = náhodný.NEXTIST (pohyby.Délka) -Return Přesun [index] -}} Veřejné rockpaperscissors () {User = Nový uživatel () - Computer = Nový počítač () - UserScore = 0-computerscore = 0-publicScore = 0-} Veřejný void startGame ()} Systém.Ven.PrintLn ("Kámen, nůžky, papír!") - // získání pohybu userme = uživatele.GetMove () - Přesunout Computermovate = Počítač.Getmove () - systém.Ven.PrintLn ("nvash" + userme + ".") -Systém.Ven.PrintLN ("počítačová struktura" + compuverme + ".n ") - // porovnání tahů a definice vítězové srovnání = userme.Porovnání (srovnávání) {Případ 0: // DrawSystem.Ven.PrintLn ("kravata!") -Break-case 1: // poražené hráče.Ven.Tiskln (userme + "bije" + computermovate + ". Vyhrál jsi!") -Userscore ++ - přerušení-li -1 -1: // vyhrál počítačový systém.Ven.PrintLn (Compuvermove + "Beats" + userme + ". Prohrál jsi.") -Computerscore ++ - Break-} numberOfgames ++ - // Nabízíme uživateli znovu hrát (uživatel.Playagain ()) {System.Ven.PrintLn () - startGame () -} else {PrintGamestats () -}} / *** Závěr statistik. Kreslí jsou vzaty v úvahu jako poloviční hloubky * při počítání procenta vítězství.* / Private neplatnost printgamestats ()% 13.2F %% Private Void PrintDashes (int numberOfdashes) {pro (int i = 0- I < numberOfDashes- i++) {System.out.print(";")-}}public static void main(String[] args) {RockPaperScissors game = new RockPaperScissors()-game.startGame()-}}