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, Papiri Š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 ​​() -}
  • Image Nazvan ekran Shot 2013 06 23 na 2.27.50.jpg
    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()-}}
    Slične publikacije