Kako napisati igru `stone, škare, papir` na java
"Kamen, škare, papir" - ovo je igra "na prstima" za dvoje. Igrači kažu "kamen, makaze, papir" i bacaju se naprijed, formirajući jednu od tri figure (kamen, škare ili papir). Pobjednik je određen na sljedeći način: škare koji su pobijedili papir, papir pobijedi kamen, makaze od kamena. Ako oba igrača pokazuju istu brojku, smatra se nerešenim. Na Java ćemo napisati jednostavnu igru koja će igrati "kamen, makaze, papir" sa računarom.
Korake
jedan. Stvorite osnovnu klasu i imenujte ga
Kamen papir makaze
. U ovoj klasi ćemo opisati igru. Možete ga nazvati drugačijem, na primjer Igra
ili Glavni
. Napišite dizajnerske oglase i glavnu metodu.Javna klasa rockpaperscisssirs {javna rockpaperscissors () {} javna uvođenja void main (string [] args) {}}
2. Kreirajte popis (enum) za opisivanje mogućih poteza (kamen, škare, papir). Možemo postaviti terenske žice, ali popis nam omogućava predodređivanje konstante, pa je upotreba enumana bolja. Nazovimo naš popis
Pomicanje
I postavite značenjaRock
, Papir
i Škare
.Privatni enum potez {rock, papir, škare}
3. Kreirajte dvije zatvorene klase (ključna reč privatna) klasu
Korisnik
i Računar
. Ove klase će predstavljati igrače. Možete napraviti i ove klase otvorene (javna ključna riječ). KlasaKorisnik
će zatražiti od korisnika, šta se pomakne - kamen, škare ili papir - pa moramo napisati metodu Getmove ()
. KlasaRačunar
takođe treba imati metoduGetmove ()
, Tako da možemo dobiti računar. Do sada ćemo jednostavno proglasiti ove metode i napisati će implementaciju kasnije. Klasa Korisnik
Mora imati konstruktor u kojem se objekt inicijalizira Skener
, koji će čitati korisnički unos. IzjavitiSkener
Zatvoreni član podataka klase Korisnik
i inicijalizirajte ga u dizajnerku. Budući da ćemo koristiti klasu Skener
, Moramo ga povezati pomoću ključne riječi Uvoz
. Klasa Računar
Dizajner nije potreban, pa ga nećemo napisati - prilikom inicijalizacije objekta Računar
Jednostavno ćemo nazvati zadani dizajner. Evo klase Kamen papir makaze
Izgleda sada:Uvezi Java.Util.Skener-javna klasa RockpapersCissors {privatni enum potez {rock, papir, škare} Korisnik privatne klase {privatni skener ulaznica-javni korisnik () {ulazscanner = novi skener (sistem.In) -} Javni potez GetMove () {// todo: Implementacija Meturn NULL -}} Computer Private Class Computer {Javni potez Getmove () {Javni potez Getmove () {/ todo: Implementacija Meturn Null -}} Javni rockpaperscissors () {} javna statička void glavna (string [] args) {}}
4. Napišite implementaciju metode
Getmove ()
Za klasu Računar
. Ova metoda će vratiti slučajnu vrijednost Pomicanje
.Možemo dobiti niz vrijednosti Pomicanje
Pozivanje metode Vrijednosti ()
Volim ovo: Pomicanje.Vrijednosti ()
. Da odabere slučajno značenje Pomicanje
Iz ovog niza moramo generirati slučajni indeks između 0 i broja elementa polja. Da biste to učinili, nazovite metoduNext ()
klasaNasumičan
, Koje se tako povezujemo:Uvezi Java.Util.Nasumičan
. Nakon što smo primili slučajni indeks, vratit ćemo vrijednost Pomicanje
Ovim indeksom u našem nizu.Javni potez Getmove () {premještanje [] potezi = pomaknuti se.Vrijednosti () - Slučajno slučajno = Novo slučajno () - INT indeks = nasumično.Next (potezi.Dužina) -return potezi [Index] -}
pet. Napišite implementaciju metode
Getmove ()
Za klasu Korisnik
. Ova metoda će vratiti vrijednost Pomicanje
Odgovarajući korisnički unos. Korisnik može ući "rock", "škare", ili "papir". Prvo povucite poruku: Sistem.Napolje.Print ("Kamen, škare ili papir?")
. Zatim pomoću metode Sljedeći lint ()
Objekt Skener
, Dobijamo korisnički unos u obliku niza. Sada morate provjeriti ispravnost unosa korisnika. Međutim, nećemo obratiti pažnju na pogreške i jednostavno provjerite prvo slovo "K", "N" ili "B". Takođe nećemo obratiti pažnju na registar pisama, jer ćemo unaprijed nazvati metodu Touppercase ()
klasa Niz
, Prilikom ulaska korisnika u gornji registar. Ako korisnik nije ušao ni približno ispravan izbor, tražim njegov potez. Zatim, ovisno o korisničkom unosu, naša će metoda vratiti odgovarajuću vrijednost Pomicanje
.Javni potez Getmove () {// Povucite zahtjev za ulazak.Napolje.Print ("Kamen, škare ili papir? ") - // Pročitajte ulaz korisničkog korisnika userInput = ulazscanner.Sljedeći lint () - userInput = userInput.Touppercase () - Char Firstletter = userInput.Charact (0) -Ako (Firstletter == `K` || Frewletter == `N` || Frewletter == `b`) {// ulazak u ispravnost SWITCH (Forchletter) {CASE `K`: povratni potez.Rock-Case `H`: povratni potez.Slučaj papira `B`: povratni potez.Škare -}} // Netačno. Donesite zahtjev za ulazak ponovo.Povratak Getmove () -}
6. Napišite implementaciju metode
Igraj ponovo ()
klasa Korisnik
. Korisnik se mora moći igrati ponovo i iznova. Da biste utvrdili da li korisnik želi ponovo igrati, pišite metodu Igraj ponovo ()
, koji će vratiti vrijednost tipa Boola i na taj način recite igri da li korisnik želi ponovo igrati. U ovoj metodi koristimo objekt Skener
, koju smo inicijalizirali u dizajnera da bismo dobili"Da" ili"Ne" Od korisnika. Samo provjeravamo prvo slovo, ako bi, onda korisnik želi ponovo igrati, bilo koje drugo slovo značit će "Ne".Javni boolejski igraiagain () {sistem {sistem.Napolje.Print ("Želite ponovo igrati? ") -String userInput = ulazZanner.Sljedeći lint () - userInput = userInput.Touppercase () - Povratni userUtrovod.Charat (0) == `d`-}
7. Klasa kravata
Korisnik
i klasa Računar
u razredu Kamen papir makaze
. Kôd za pisanje za nastavu Korisnik
i Računar
, Možemo napraviti igru. Najaviti časove Korisnik
i Računar
Podaci o zatvorenoj klasi Kamen papir makaze
. Mi ćemo se uputiti na njih, uzrokujući metodu Getmove ()
, dobiti igrače. Inicijalizirajte ih u dizajnu klase Kamen papir makaze
. Moramo pohraniti i račun. Podesiti KorisniciKORE
i Kompjuterskore
, Linicija im nula. I na kraju, kreirajte polje podataka za pohranu broja igara, također inicijaliziranje nula.Privatni korisnici Korisnikovo-privatni računalni računar-privatni int korisnici-privatni int computerscore-privatni int numbersOfGames-javni rockpaperscissors () {korisnik = novi korisnik () - korisnici = 0-komproksiteScore = 0-brojevimaOrodne slike = 0 -}
osam. Kompletan popis
Pomicanje
metoda koja će usporediti poteze i odrediti pobjednika. Mi ručni kod za metodu Poređenje ()
koji će se vratiti 0 ako su potezi isti, 1 - ako trenutni trčanje pobijedi drugog i -1 - ako drugi potez pobijedi struju. Trenutni pokrenu prikazuje ovaj pokazivač, a drugi se prenosi u parametru ostalo. Korisno je odrediti pobednika. Prvo pišemo kôd koji definira crtanje i povratak 0, a zatim napišite upute za prebacivanje da biste odredili pobjednika.Privatni enum potez {rock, papir, škare - / *** uspoređuje trenutni potez s prenesenim u parametru druge boje i određuje * pobjedu, poraz ili crtanje.** @param ostaloMave * kurs s kojim se trenutni * @return 1 uspoređuje ako trenutni potez pobijedi drugog, -1 ako drugi potez pobijedi struju, * 0 u slučaju crteža * / javne internetske operacije (pomaknite se) Ostalo) {// crta == ostalo) Povratak 0-prekidač (ovaj) {Case Rock: Return (Ostala minica == Škare ? 1: -1) -Cace Papir: Povratak (ostala == stijena ? 1: -1) Škare: Povratak (ostala = = papir ? 1: -1) -} // Ovaj se kôd nikada ne smije izvesti 0-}}
devet. Najaviti metodu
Započni igru ()
u razredu Kamen papir makaze
. U ovoj metodi će biti igra. Započnite pozivom na metodu Sistem.Napolje.Println
.Javna praznina startgame () {sistem {sistem.Napolje.Println ("KAMEN PAPIR MAKAZE!") -}
10. Nabavite računarske poteze i korisnik. U metodi
Započni igru ()
Nazvati Getmove ()
casovi Korisnik
i Računar
, da dobije svoje poteze.Pomicanje Usersove = korisnika.Getmove () - MOVE COMPUTERMOVE = računar.Getmove () - Sistem.Napolje.Println (" Nuta moždani udar" + Usermove + ".") -Sistem.Napolje.Println ("Računar koji radi" + Computermove + ". N")-
jedanaest. Uporedite tečaj računara i potez igrača da biste odredili ko je pobijedio. Nazovite metodu
Poređenje ()
popis Pomicanje
, Da biste utvrdili da li je korisnik pobijedio. Ako je tako, povećajte njegov račun na 1. Ako ne, povećajte račun računara. U slučaju izvlačenja, račun ostaje isti. Nakon toga povećajte broj igara koje igra 1.Int porereMemoveres = usermove.Koresporedba (poređenje) {futrola 0: // Crtanje.Napolje.Println ("Izvući!") -Ackla-CASE 1: // Pobijedi igračoni sistem.Napolje.Println (usermove + " Otkucaje " + Computermove + ". Ti si pobijedio!") -Userterscore ++ - break-case -1: // pobedio računarystem.Napolje.Println (Computermove + " Otkucaje " + Usermove + ". Izgubio si.") -Computerscore ++ - Break-} numberofGames++-
12. Pitajte korisnika da li želi ponovo igrati. Ako je odgovor da, nazovite metodu
Započni igru ()
opet. Ako ne, nazovite metodu PrintgaMestats ()
, što će donijeti statistiku igre. Napisat ćemo njegovu primjenu u sljedećem koraku.ako (korisnik.Playagain ()) {sistem.Napolje.Println () - Startgame () -} else {printgamestats () -}
13. Napišite implementaciju metode
PrintgaMestats ()
. Ova metoda će povući statistiku igre: broj pobjeda, lezija, crtanja, broja odigranih igara i postotka pobjede igrača. Procenat osvojenih igara smatra se sljedećim: (broj pobjeda + (broj izvlačenja / 2)) / (broj odigranih igara). Ova metoda koristi Sistem.Napolje.Printf
Za formatirani izlaz teksta.Privatni praznini printgamestats () ") -Printdashes (10) -System.Napolje.Print ("+") -Printdashes (10) -System.Napolje.Print ("+") -Printdashes (10) -System.Napolje.Print ("+") -Printdashes (16) -System.Napolje.Print ("+") -Printdashes (18) -System.Napolje.Println ("
četrnaest. Započni igru. Uglavnom klase inicijaliziraju objekt
Kamen papir makaze
i nazovite IT metodu Započni igru ()
.Javna statička void glavna (string [] args) {rockpaperscissors igra = novi rockpaperscissors () - igra.Započni igru () -}
petnaest. Testirajte igru. Sad kad je sav posao iza, vrijeme je da se sastavi i testira našu igru!
Primjer programa
Uvezi Java.Util.Random-Import Java.Util.Scanner-Javna klasa RockpaperscisSors {privatni korisnički korisnički računar računarsko-privatni int korisnici-privatni int computerscore-privatni int numerifgames-privatni enum potez - / *** uspoređuje trenutni potez s prenesenim u parametru druge boje i određuje * pobjedu, poraz ili crtanje.** @param ostaloMave * kurs s kojim se trenutni * @return 1 uspoređuje ako trenutni potez pobijedi drugog, -1 ako drugi potez pobijedi struju, * 0 u slučaju crteža * / javne internetske operacije (pomaknite se) Ostalo) {// crta == ostalo) Povratak 0-prekidač (ovaj) {Case Rock: Return (Ostala minica == Škare ? 1: -1) -Cace Papir: Povratak (ostala == stijena ? 1: -1) Škare: Povratak (ostala = = papir ? 1: -1) -} // Ovaj kôd ne mora biti izveden nikada /}} Korisnik privatne klase {privatni skener ulaz-javni korisnik () {ulazscanner = novi skener (sistem.In) -} Javni potez GetMove () {// Prikazuje zahtjev za ulazak.Napolje.Print ("Kamen, škare ili papir? ") - // Pročitajte ulaz korisničkog korisnika userInput = ulazscanner.Sljedeći lint () - userInput = userInput.Touppercase () - Char Firstletter = userInput.Charact (0) -Ako (Firstletter == `K` || Frewletter == `N` || Frewletter == `b`) {// ulazak u ispravnost SWITCH (Forchletter) {CASE `K`: povratni potez.Rock-Case `H`: povratni potez.Slučaj papira `B`: povratni potez.Škare -}} // Netačno. Donesite zahtjev za ulazak ponovo.Povratak GetMove () -} Javni boolejski igrač () {sistem {sistem.Napolje.Print ("Želite ponovo igrati? ") -String userInput = ulazZanner.Sljedeći lint () - userInput = userInput.Touppercase () - Povratni userUtrovod.Charat (0) == `y` -}} Computer Class Computer {javni potez Getmove () {premještanje [] potezi = pomaknuti se.Vrijednosti () - Slučajno slučajno = Novo slučajno () - INT indeks = nasumično.Next (potezi.Dužina) -return potezi [Index] -}} Javni rockpaperscisSors () {Korisnik = Novi korisnik () - Računar = Novi računar () - korisnici = 0-brojevimaOfGames = 0-} javna praznina startgame ().Napolje.Println ("KAMEN PAPIR MAKAZE!") - // Getch Move Usermove = korisnik.Getmove () - MOVE COMPUTERMOVE = računar.Getmove () - Sistem.Napolje.Println (" Nuta moždani udar " + Usermove + ".") -Sistem.Napolje.Println ("Računar koji radi " + Computermove + ". N") - // Poređenje poteza i definicija Winnenint uredemovi = usermove.Koresporedba (poređenje) {futrola 0: // Crtanje.Napolje.Println ("Vezati!") -Ackla-CASE 1: // Pobijedi igračoni sistem.Napolje.Println (usermove + " Otkucaje " + Computermove + ". Ti si pobijedio!") -Userterscore ++ - break-case -1: // pobedio računarystem.Napolje.Println (Computermove + " Otkucaje " + Usermove + ". Izgubio si.") -Computerscore ++ - Break-} numberofgames ++ - // Korisniku nudimo ponovo da igra (korisnik.Playagain ()) {sistem.Napolje.Println () - Startgame () -} else {printgamestats () -}} Zaključak statistike. Crtanje se uzimaju u obzir kao poludupi * kada računate postotak pobjeda.* / Privatni praznini printinja ()% 13.2f %% Privatne nevažne printere (int numberofdashes) {za (int i = 0- i < numberOfDashes- i++) {System.out.print("-")-}}public static void main(String[] args) {RockPaperScissors game = new RockPaperScissors()-game.startGame()-}}