Hogyan írjunk egy játékot `stone, olló, paper on java
"Stone, olló, papír" - ez egy játék "az ujjakon" két. A játékosok azt mondják: "Stone, olló, papír", és eldobta előre a kéz, alkotó három szám (kő, olló vagy papír). A győztes a következőképpen határozható meg: olló verte papírt, papír verte egy kő, kőverseny olló. Ha mindkét játékos ugyanazt az értéket mutatja, akkor rajzolják. Egy egyszerű játékot fogunk írni a Java-ra, amely "kő, olló, papír" számítógéppel fog játszani.
Lépések
egy. Hozzon létre egy alaposztályt és nevezze meg
Kő papír olló
. Ebben az osztályban leírjuk a játékot. Másként hívhatja, például Játszma, meccs
vagy Fő
. Írjon tervező hirdetést és fő módszert.Nyilvános osztályú rockpaperscissors {Public Rockpaperscissors () {} Nyilvános Void Main (string [] args) {}}
2. Hozzon létre egy listát (enum) a lehetséges mozdulatok (kő, olló, papír) leírásához. Megállíthatjuk a futó karakterláncokat, de a lista lehetővé teszi számunkra, hogy előre meghatározott legyen az állandó, így az enum használata jobb. Hívjuk fel a listát
Mozog
És állítsa be a jelentéseketSzikla
, Papír
és Olló
.Magán enum mozog {Rock, Paper, Scissors}
3. Hozzon létre két zárt osztályt (kulcsszó privát) osztály
Felhasználó
és Számítógép
. Ezek az osztályok képviselik a játékosokat. Ezeket az osztályokat is megnyithatja (nyilvános kulcsszó). OsztályFelhasználó
kéri a felhasználótól, milyen mozog - kő, olló vagy papír - így meg kell írnunk egy módszert getmove ()
. OsztálySzámítógép
kell egy módszert isgetmove ()
, Úgy, hogy kaphatunk egy számítógépet. Eddig egyszerűen kijelentjük ezeket a módszereket, és később megírják a végrehajtást. Osztály Felhasználó
Rendelkeznie kell egy olyan konstruktorral, amelyben az objektum inicializálása Scanner
, amely a felhasználói bemenetet olvasja. KijelentScanner
Zárt tagja az osztályadatoknak Felhasználó
és inicializálja a tervezőben. Mivel az osztályt fogjuk használni Scanner
, Kulcsszó segítségével kell csatlakoztatnunk Importálás
. Osztály Számítógép
A tervező nem szükséges, ezért nem fogjuk írni - az objektum inicializálásakor Számítógép
Egyszerűen hívjuk az alapértelmezett tervezőt. Itt van az osztály Kő papír olló
Most úgy néz ki:Import Java.Util.Scanner-Public Class RockPaperscissors {Private Felsorolt Move {Rock, Paper, Scissors} Saját Class felhasználó {Private Scanner InputScanner-Public felhasználó () {inputScanner = Új Scanner (Rendszer.In) -} Public Move GetMove () {// TODO: A Meturn Null -} Végrehajtása}} Privát osztályú számítógép {Public Move GetMove () {Public Move GetMove () {// TODO: A METurn Null -} végrehajtása Nyilvános rockpaperscissors () {} nyilvános statikus üresség fő (string [] args) {}}
4. Írja be a módszer végrehajtását
getmove ()
Órára Számítógép
. Ez a módszer véletlen értéket fog visszaadni Mozog
.Kaphatunk egy sor értéket Mozog
Módszer hívása Értékek ()
mint ez: Mozog.Értékek ()
. Véletlenszerű jelentés kiválasztása Mozog
Ebből a tömbből véletlenszerű indexet kell létrehoznunk 0 és a tömbelem számának. Ehhez hívja a módszertNextint ()
osztályVéletlen
, Amit összekapcsolunk:Import Java.Util.Véletlen
. Miután véletlenszerű indexet kapott, visszatérítjük az értéket Mozog
Ezzel az indexgel a tömbünkben.Nyilvános mozgalom getmove () {mozog [] mozog = mozog.Értékek () - véletlen véletlenszerű = új véletlen () - int index = véletlenszerű.Nextint (mozdulatok.Hossza) - A [Index] -} mozog
öt. Írja be a módszer végrehajtását
getmove ()
Órára Felhasználó
. Ez a módszer visszaadja az értéket Mozog
Megfelelő felhasználói bemenet. A felhasználó beléphet "egy szikla", "olló", vagy "papír". Először, küldjön egy üzenetet: Rendszer.Ki.Nyomtatás ("Kő, olló vagy papír?")
. Ezután a módszerrel Nextline ()
Tárgy Scanner
, A felhasználói bemenetet egy karakterlánc formájában kapjuk meg. Most ellenőriznie kell a felhasználó helyességét. Azonban nem fogunk figyelmet fordítani a hibákra, és egyszerűen ellenőrizzük az első "K", "N" vagy "B" első betűt. Nem fogunk figyelmet fordítani a levelek nyilvántartására, mivel előre, hívjuk a módszert Touppercase ()
osztály Húr
, Amikor belép a felhasználónak a felső regiszterre. Ha a felhasználó még nem lépett be körülbelül a helyes választás, kérem újra lépéseket. Ezután a felhasználói bemenet függvényében a módszerünk visszaadja a megfelelő értéket Mozog
.Public Move GetMove () {// visszavonja a beírási kérelmet.Ki.Nyomtatás ("Kő, olló vagy papír? ") - // Olvassa el a Usersstring UserInput = InputScanner bemenetét.Nextline () - UserInput = UserInput.Touppercase () - char fastleter = userinput.Charat (0) -ab (tőke == `k` || tőke == `n` || tőke == `b`) {// A korrekcióba (elsőfokú) {Case `K`: Visszatérés.Rock-tok "H": visszatérés.Papír-tok "B": visszatérés.Olló -}} // Helytelen. Hozzon létre egy kérést.Visszatérés GetMove () -}
6. Írja be a módszer végrehajtását
Játszd újra ()
osztály Felhasználó
. A felhasználónak újra és újra le kell játszania. Annak megállapításához, hogy a felhasználó újra szeretne játszani, írjon módját Játszd újra ()
, amely visszaadja a bool típusának értékét, és így elmondja a játéknak, hogy a felhasználó újra szeretne játszani. Ebben a módszerben az objektumot használjuk Scanner
, amelyet a tervezőben inicializáltunk"Igen" vagy"Nem" A felhasználóból. Csak ellenőrizzük az első betűt, ha azt szeretné, hogy a felhasználó újra le akarja játszani, bármely más levél azt jelenti "Nem".Nyilvános Boolean PlayAgain () {rendszer.Ki.Nyomtatás ("Szeretne újra játszani? ") Userinput = inputscanner.Nextline () - UserInput = UserInput.Touppercase () - Visszatérő felhasználás.Charat (0) == `d`-}
7. Kötési osztálykód
Felhasználó
és osztály Számítógép
osztályban Kő papír olló
. Osztályok írása Felhasználó
és Számítógép
, Maga a játékot is megtehetjük. Adja meg az osztályokat Felhasználó
és Számítógép
Zárt osztályadatok Kő papír olló
. Rájuk utalunk, ami egy módszert okoz getmove ()
, A játékosok megszerzése. Inicializálja őket egy osztálytervezőben Kő papír olló
. Szükségünk van egy fiókot is. Beállítani FelhasználókKerület
és Computerscore
, Linitiase őket nulla. Végül hozzon létre egy adatmezőt a játékok számának tárolásához, szintén nulla használatával.Privát felhasználói felhasználó-privát számítógépes számítógép-magán intruscore-private int computerscore-magán int számmames-nyilvános rockpaperscissors () {felhasználó = új felhasználó () - számítógép = új számítógép () - felhasználói core = 0-computerscore = 0-numberofgames = 0 -}
nyolc. Teljes lista
Mozog
módszer, amely összehasonlítja a lépéseket és meghatározza a győztest. Kódot kódolunk a módszerhez Összehasonlítás ()
amely vissza fog térni 0, ha a mozdulatok azonosak, 1 - ha az aktuális futás a másik és -1 - ha egy másik lépés üti az áramot. Az aktuális futtatást ez a mutató mutatja, a másik pedig a másikban a másik. Hasznos a győztes meghatározása. Először írjuk a kódot, amely meghatározza a rajzot és a visszatérést 0, majd írja be a kapcsoló utasítását a győztes meghatározásához.Magán enum Mozgás {Rock, Paper, Olló - / *** Összehasonlítja az aktuális lépést a Más Mondtexove paraméterben, és meghatározza a * győzelmet, vereséget vagy rajzot.** @param otherMove * Az aktuális * @return 1 pálya összehasonlítása, ha az aktuális lépés a másik, -1, -1 ha egy másik mozdulattal megveri az áramot, * 0-at a Draw * / Public In Összehasonlítás esetén (lépés) OtherMove) {// Draw == otherMove) Visszatérés 0-kapcsoló (ez) {Case Rock: Return (otherMove == olló ? 1: -1) -case papír: Visszatérés (otherMove == rock ? 1: -1) -case olló: Visszatérés (otherMove == Paper ? 1: -1) -} // Ez a kód soha nem kerül végrehajtásra 0-}}
kilenc. Bejelentse a módszert
Játék kezdése ()
osztályban Kő papír olló
. Ebben a módszerben lesz egy játék. Kezdődik a módszer hívásával Rendszer.Ki.Println
.Nyilvános Void StartGame () {rendszer.Ki.Println ("KŐ PAPÍR OLLÓ!") -}
10. Get Computer Strokes és Felhasználó. A módszerben
Játék kezdése ()
Hívás getmove ()
osztályok Felhasználó
és Számítógép
, hogy mozogjanak.Mozgassa a USERMOVE = Felhasználó.Getmove () - Mozgassa a Computermove = számítógépet.GetMove () - rendszer.Ki.Println ("Nuta stroke" + USERMOVE + ".") -Rendszer.Ki.Println ("Számítógép futás" + Computermove + ".N")-
tizenegy. Hasonlítsa össze a számítógép menetét, és a játékos mozog, hogy meghatározza, ki nyert. Hívja a módszert
Összehasonlítás ()
felsorolás Mozog
, Annak megállapításához, hogy a felhasználó nyerte-e. Ha igen, növelje számláját 1. Ha nem, növelje a számítógép fiókját. Rajzolás esetén a törvényjavaslat ugyanaz marad. Ezt követően növelje az 1-es játékok számát.Int összehasonlítás = usermove.Összehasonlítás (összehasonlítás) {Case 0: // DrawSystem.Ki.Println ("Húz!") -Break-tok 1: // legyőzte a lejátszási rendszert.Ki.Println (USERMOVE + " Veri " + Computermove + ". Ön nyert!") -UsersCore ++ - Break-Case -1: // legyőzte a számítógépes rendszert.Ki.Println (Computermove + " Veri " + USERMOVE + ". Vesztettél.") -Computerscore ++ - Break-} Numberofgames++-
12. Kérd meg a felhasználót, hogy újra akar játszani. Ha igen, hívja a módszert
Játék kezdése ()
újra. Ha nem, hívja a módszert PrintGamestats ()
, amely a játék statisztikáit hozza. A következő lépésben írjuk be a megvalósítást.Ha (felhasználó.PlayAgain ()) {rendszer.Ki.Println () - StartGame () -} Else {PrintGamestats () -}
13. Írja be a módszer végrehajtását
PrintGamestats ()
. Ez a módszer visszavonja a játék statisztikáit: a győzelmek, elváltozások, felhívások száma, a játszott játékok száma és a játékos győzelmének százalékos aránya. A nyertes játékok százalékos aránya az alábbiak szerint történik: (a győzelmek száma + (rajzszámok száma / 2)) / (játszott játékok száma). Ez a módszer használ Rendszer.Ki.Printf
A formázott szöveg kimenethez.Private Void PrintGamestats () ") -Printdashes (10) -System.Ki.Nyomtatás ("+") -Printdashes (10) -System.Ki.Nyomtatás ("+") -Printdashes (10) -System.Ki.Nyomtatás ("+") -Printdashes (16) -System.Ki.Nyomtatás ("+") -Printdashes (18) -System.Ki.Println ("
tizennégy. Játék kezdése. Főleg osztály Inicializálja az objektumot
Kő papír olló
és hívja az IT módszert Játék kezdése ()
.Nyilvános statikus üresség fő (string [] args) {rockpaperscissors játék = új rockpaperscissors () - játék.Játék kezdése () -}

tizenöt. Tesztelje a játékot. Most, hogy minden munka mögött van, itt az ideje összeállítani és tesztelni a játékunkat!
Példa Program
Import Java.Util.Véletlen-import Java.Util.Scanner-Public Class RockPaperscissors {privát felhasználói Felhasználó Private Számítógép Számítógép-Private INT Userscore-Private Int Computerscore-Private Int Numberofgames-Private Felsorolt Move {Rock, Paper, Scissors - / *** összehasonlítja az aktuális menet közben továbbítani Othermove paraméter és meghatározza a * győzelmet, vereséget vagy rajzot.** @param otherMove * Az aktuális * @return 1 pálya összehasonlítása, ha az aktuális lépés a másik, -1, -1 ha egy másik mozdulattal megveri az áramot, * 0-at a Draw * / Public In Összehasonlítás esetén (lépés) OtherMove) {// Draw == otherMove) Visszatérés 0-kapcsoló (ez) {Case Rock: Return (otherMove == olló ? 1: -1) -case papír: Visszatérés (otherMove == rock ? 1: -1) -case olló: Visszatérés (otherMove == Paper ? 1: -1) -} // Ezt a kódot soha nem kell végrehajtani soha nem /}} Privát osztályú felhasználó {privát szkenner inputscanner-nyilvános felhasználó () {inputscanner = új szkenner (rendszer.In) -} Public Move GetMove () {// Megjeleníti a beírási kérést.Ki.Nyomtatás ("Kő, olló vagy papír? ") - // Olvassa el a Usersstring UserInput = InputScanner bemenetét.Nextline () - UserInput = UserInput.Touppercase () - char fastleter = userinput.Charat (0) -ab (tőke == `k` || tőke == `n` || tőke == `b`) {// A korrekcióba (elsőfokú) {Case `K`: Visszatérés.Rock-tok "H": visszatérés.Papír-tok "B": visszatérés.Olló -}} // Helytelen. Hozzon létre egy kérést.Visszatérés GetMove () -} Nyilvános Boolean PlayAgain () {rendszer.Ki.Nyomtatás ("Szeretne újra játszani? ") Userinput = inputscanner.Nextline () - UserInput = UserInput.Touppercase () - Visszatérő felhasználás.Charat (0) == `y` -}} Privát osztályú számítógép {Public Move GetMove () {mozog [] mozog = mozog.Értékek () - véletlen véletlenszerű = új véletlen () - int index = véletlenszerű.Nextint (mozdulatok.Hossza) - A [Index] -}} nyilvános rockpaperscissors () {felhasználó = új felhasználó () - számítógép = új számítógép () - felhasználói core = 0-computerscore = 0-numberofgames = 0-} nyilvános üresség STARTGAME ().Ki.Println ("KŐ PAPÍR OLLÓ!") - // Mozgás usermove = felhasználó.Getmove () - Mozgassa a Computermove = számítógépet.GetMove () - rendszer.Ki.Println ("Nuta stroke " + USERMOVE + ".") -Rendszer.Ki.Println ("Számítógép futás " + Computermove + ".N") - // A mozdulatok összehasonlítása és a Winnerint Comparemoves = usermove definíciója.Összehasonlítás (összehasonlítás) {Case 0: // DrawSystem.Ki.Println ("Nyakkendő!") -Break-tok 1: // legyőzte a lejátszási rendszert.Ki.Println (USERMOVE + " Veri " + Computermove + ". Ön nyert!") -UsersCore ++ - Break-Case -1: // legyőzte a számítógépes rendszert.Ki.Println (Computermove + " Veri " + USERMOVE + ". Vesztettél.") -Computerscore ++ - Break-} Numberofgames ++ - // A felhasználót újra lejátszjuk (felhasználó).PlayAgain ()) {rendszer.Ki.Println () - StartGame () -} Else {PrintGamestats () -}} / *** A statisztikák következtetése. A rajzokat félmélyekként veszik figyelembe * A győzelem százalékos aránya.* / Magán Void PrintGamestats ()% 13.2F %% Private Void PrintDashes (int NumberofDashes) {for (int i = 0- i < numberOfDashes- i++) {System.out.print("-")-}}public static void main(String[] args) {RockPaperScissors game = new RockPaperScissors()-game.startGame()-}}