Hogyan készítsünk kő, papír, olló játékot Java -ban (képekkel)

Tartalomjegyzék:

Hogyan készítsünk kő, papír, olló játékot Java -ban (képekkel)
Hogyan készítsünk kő, papír, olló játékot Java -ban (képekkel)

Videó: Hogyan készítsünk kő, papír, olló játékot Java -ban (képekkel)

Videó: Hogyan készítsünk kő, papír, olló játékot Java -ban (képekkel)
Videó: TWINMOTION TUTORIAL // All you need to know! Basics for beginners 2024, Április
Anonim

A Rock, Paper, Scissors egy kézi játék, amelyet két ember játszik. Mindkét ember azt mondaná, hogy "szikla, papír, olló", majd egyidejűleg kinyújtott kézzel három tárgy (kő, papír vagy olló) egyikét alkotja. A győztest a kézi formációk határozzák meg. Az olló veri a papírt, a papír a kőzetet, a kő pedig az ollót. Ha mindkét játékos ugyanazt a leosztást játssza, döntetlennek számít. Egy egyszerű játékot fogunk írni Java nyelven, hogy szimulálja a kőzetet, papírt, ollót, ahol az egyik játékos a felhasználó, a másik pedig a számítógép.

Lépések

1585279 1 1
1585279 1 1

1. lépés. Hozza létre a főosztályt, és hívja fel

Kő papír olló

.

Ez lesz az osztály, ahol megírjuk a játékot. Választhat más nevet is, mint pl

Játszma, meccs

vagy

. Írja be a konstruktor és a fő módszer módszer deklarációit.

public class RockPaperScissors {public RockPaperScissors () {} public static void main (String args) {}}

1585279 2 1
1585279 2 1

Lépés 2. Hozzon létre egy felsorolást a kézmozdulatokhoz (kő, papír vagy olló)

A húrokat használhatnánk kőzet, papír vagy olló ábrázolására, de a felsorolás lehetővé teszi számunkra, hogy előre meghatározzuk az állandókat, ami azt jelenti, hogy a felsorolás használata jobb megoldás. Enum típusunkat fogjuk hívni

Mozog

az értékekkel

SZIKLA

PAPÍR

és

OLLÓ

private enum Move {ROCK, PAPER, SCISSORS}

1585279 3 1
1585279 3 1

3. Hozzon létre két magánórát

Felhasználó

és

Számítógép

.

Ezek az osztályok képviselik játékosainkat a játékban. Dönthet úgy, hogy nyilvánosságra hozza ezeket az osztályokat. Az

Felhasználó

osztály lesz az az osztály, amely kőzetet, papírt vagy ollót kér a felhasználótól, ezért írnunk kell egy

getMove ()

módszer. Az

Számítógép

osztálynak is szüksége lesz a

getMove ()

módszerrel, hogy a számítógép is mozoghasson. Helyőrzőket helyezünk ezekbe a módszerekbe, és később megvalósítjuk őket. Az

Felhasználó

osztályhoz olyan konstruktorra lesz szükség, amely beállítja a

Scanner

objektumot a felhasználói bevitelhez. Feltesszük a

Scanner

privát mezőként a felhasználó számára, majd kezdeményezze azt a konstruktorban. Mivel a

Scanner

osztály, akkor import kódot kell írnunk hozzá a kódunk tetejére. Az

Számítógép

osztályhoz nem szükséges konstruktor, tehát nem kell írnunk egyet; amikor kezdeményezzük a

Számítógép

objektumot, csak az alapértelmezett konstruktőrt fogjuk hívni. Íme, miénk

Kő papír olló

az osztály most így néz ki:

import java.util. Scanner; public class RockPaperScissors {private enum Move {ROCK, PAPER, SCISSORS} private class User {private Scanner inputScanner; public User () {inputScanner = új szkenner (System.in); } public Move getMove () {// TODO: A módszer megvalósítása return null; }} magánosztályú számítógép {public Move getMove () {// TODO: implementálja ezt a módszert return null; }} public RockPaperScissors () {} public static void main (String args) {}}

1585279 4 1
1585279 4 1

4. lépés. Írja be a

getMove ()

módszer a

Számítógép

osztály.

Ez a módszer véletlenszerűen tér vissza

Mozog

. Kaphatunk egy tömböt

Mozog

felsorolás hívásával

értékek ()

módszer:

Move.values ()

. Véletlen kiválasztásához

Mozog

Ha felsoroljuk ezt az értéktömböt, akkor létre kell hoznunk egy véletlenszerű indexet, amely 0 és az értéktömbünk hossza közötti egész szám. Ehhez használhatjuk a

nextInt ()

módszere a

Véletlen

osztály, amelyből importálnunk kell

java.util

. Miután megkaptuk a véletlen indexet, visszatérhetünk a

Mozog

az indexből az értéktömbünkből.

public Move getMove () {Move move = Move.values (); Random random = new Random (); int index = random.nextInt (mozog.hossz); visszatérési lépések [index]; }

1585279 5 1
1585279 5 1

5. lépés Írja be a

getMove ()

módszer a

Felhasználó

osztály.

Ez a módszer visszatér a

Mozog

megfelel annak, amit a felhasználó bevitt. Elvárjuk a felhasználótól, hogy "kőzetet", "papírt" vagy "ollót" írjon. Először is meg kell kérnünk a felhasználót a bevitelre:

System.out.print ("Kő, papír vagy olló?")

. Ezután használja a

nextLine ()

módszere a

Scanner

objektumot, hogy a felhasználói bemenetet karakterláncként kapja meg. Most ellenőriznünk kell, hogy a felhasználó benyújtott -e érvényes lépést, de engedékenyek lehetünk, ha a felhasználó rosszul írt egy szót. Tehát csak azt ellenőrizzük, hogy a felhasználói bevitel első betűje vagy "R" (kőzet esetén), "P" (papír esetén) vagy "S" (olló esetén), és nem fogjuk érdekelni az esetet, mert először a

toUpperCase ()

módszere a

Húr

osztály, hogy a felhasználói beviteli karakterlánc nagybetűs legyen. Ha a felhasználó nem adott meg távolról helyes bemenetet, akkor újra megkéri a felhasználót. Ezután attól függően, hogy a felhasználó mit tett be, visszatérünk a megfelelő lépéshez.

public Move getMove () {// Kérdezze meg a System.out.print felhasználót ("Kő, papír vagy olló?"); // A felhasználói bemenet lekérése String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// A felhasználó érvényes beviteli kapcsolót adott meg (firstLetter) {case 'R': return Move. ROCK; „P” eset: return Move. PAPER; „S” eset: return Move. SCISSORS; }} // A felhasználó nem adott meg érvényes bemenetet. Kérd újra. return getMove (); }

1585279 6
1585279 6

6. lépés. Írja be a

játszd újra()

módszer a

Felhasználó

osztály.

A felhasználónak képesnek kell lennie arra, hogy újra és újra játssza a játékot. Annak megállapításához, hogy a felhasználó szeretne -e újra játszani, írnunk kell egy

játszd újra()

metódus, amely logikai értéket ad vissza, és megmondja a játéknak, hogy a felhasználó eldöntötte -e, hogy újra játszik. Ebben a módszerben a

Scanner

amit korábban a konstruktorban kezdeményeztünk, hogy "igen" vagy "nem" választ kapjunk a felhasználótól. Csak akkor ellenőrizzük, hogy az első betű "Y" -es, hogy meghatározzuk, hogy a felhasználó újra szeretne -e játszani. Bármely más bemenet azt jelenti, hogy a felhasználó nem akar újra játszani.

public boolean playAgain () {System.out.print ("Szeretnél újra játszani?"); Karakterlánc userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); return userInput.charAt (0) == 'Y'; }

1585279 7
1585279 7

7. lépés Csatlakoztassa a

Felhasználó

és

Számítógép

osztályok együtt a

Kő papír olló

osztály.

Most, hogy befejeztük az írást

Felhasználó

és

Számítógép

osztályok, akkor koncentrálhatunk a tényleges játékunk kidolgozására. Hozzon létre privát mezőket a

Felhasználó

és

Számítógép

osztályok a

Kő papír olló

osztály. Hozzá kell férnünk ezekhez a mezőkhöz, hogy hozzáférjünk a

getMove ()

módszerek a játék során. A konstruktorban a

Kő papír olló

osztály, kezdeményezze ezeket a mezőket. Továbbá nyomon kell követnünk a pontszámot

userScore

és

computerScore

mezőket, amelyeket 0 -ként kell kezdeményeznünk a konstruktorban. Követnünk kell a játékok számát is, ami szintén 0 -ként kezdeményezett mezőny lesz.

privát felhasználó; saját számítógépes számítógép; private int userScore; privát int computerScore; privát int numberOfGames; public RockPaperScissors () {user = new User (); számítógép = új Számítógép (); userScore = 0; computerScore = 0; numberOfGames = 0; }

1585279 8
1585279 8

8. lépés. Hosszabbítsa ki a

Mozog

enum, hogy tartalmazzon egy módszert, amely megmondja, melyik lépés nyer minden esetben.

Írnunk kell egy

compaMoves ()

metódus, amely 0 -t ad vissza, ha a lépések azonosak, 1 -et, ha az aktuális lépés legyőzi a másik lépést, és -1 -et, ha az aktuális lépés elveszíti a másik lépést. Ez hasznos lesz a győztes meghatározásához a játékban. Ennek a módszernek a végrehajtásához először 0 -t adunk vissza, ha a mozdulatok azonosak, és ezért döntetlenek vagyunk. Ezután írjon kapcsoló utasítást az 1 vagy -1 visszaadására.

private enum Move {ROCK, PAPER, SCISSORS; /** * Összehasonlítja ezt a lépést egy másik lépéssel döntetlen, győzelem vagy * vereség meghatározásával. * * @param otherMove * áthelyezés a * @return 1 -hez, ha ez a lépés legyőzi a másik lépést, -1, ha ez a lépés elveszíti * a másik lépést, 0, ha ezek a lépések döntetlen * / public int compaMoves (Move otherMove) { / / Döntetlen, ha (this == otherMove) return 0; switch (ez) {case ROCK: return (otherMove == OLÓK? 1: -1); eset PAPÍR: return (otherMove == ROCK? 1: -1); eset OLLÓ: return (otherMove == PAPER? 1: -1); } // Soha ne érjen ide vissza 0; }}

1585279 9
1585279 9

9. lépés. Hozzon létre a

játék kezdése()

módszer a

Kő papír olló

osztály.

Ez a módszer lesz a játék. Kezdje azzal, hogy felvesz egy egyszerűt

System.out.println

a módszerben.

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

1585279 10
1585279 10

10. lépés. Lépéseket kérhet a felhasználótól és a számítógéptől

Ban,-ben

játék kezdése()

módszer, használja a

getMove ()

módszerek a

Felhasználó

osztály és a

Számítógép

osztály, hogy a felhasználó és a számítógép lépéseit.

Mozgassa userMove = user.getMove (); Számítógép mozgatásaMove = computer.getMove (); System.out.println ("\ nJátszottál" + userMove + "."); System.out.println ("A számítógép játszott" + computerMove + ". / N");

1585279 11
1585279 11

11. lépés: Hasonlítsa össze a két lépést, és határozza meg, hogy a felhasználó nyert, vagy a számítógép nyert

Használja a

compaMoves ()

módszer a

Mozog

enum annak eldöntésére, hogy a felhasználó nyert -e vagy sem. Ha a felhasználó nyert, növelje a felhasználói pontszámot 1 -gyel. Ha a felhasználó vesztett, növelje a számítógép pontszámát 1 -gyel. Ha döntetlen volt, ne növelje a pontszámokat. Ezután növelje a játszott játékok számát eggyel.

int compaMoves = userMove.compareMoves (computerMove); switch (compaMoves) {case 0: // Tie System.out.println ("Tie!"); szünet; 1. eset: // A felhasználó nyer System.out.println (userMove + "beats" + computerMove + ". Ön nyert!"); userScore ++; szünet; eset -1: // A számítógép nyer System.out.println (computerMove + "ütem" + userMove + ". Elvesztetted."); computerScore ++; szünet; } numberOfGames ++;

1585279 12
1585279 12

12. lépés. Kérdezze meg, hogy a felhasználó szeretne -e újra játszani

Ha a felhasználó újra szeretne játszani, hívjon

játék kezdése()

újra. Ellenkező esetben hívjon

printGameStats ()

amely kinyomtatja a játék statisztikáit. Ezt a módszert a következő lépésben írjuk le.

if (user.playAgain ()) {System.out.println (); játék kezdése(); } else {printGameStats (); }

1585279 13
1585279 13

13. lépés. Írja be a

printGameStats ()

módszer.

Ez a módszer megjeleníti a játék statisztikáit: a győzelmek száma, a veszteségek száma, a döntetlenek száma, a lejátszott játékok száma és a felhasználó által megnyert játékok százalékos aránya. A megnyert játékok százalékos arányát a (# győzelem + (# döntetlen/2))/(# lejátszott játék) alapján számítják ki. Ez a módszer használja

System.out.printf

formázott szöveg kinyomtatásához.

private void printGameStats () {int nyer = userScore; int veszteségek = computerScore; int ties = numberOfGames - userScore - computerScore; double percentWon = (nyer + ((kettős)) döntetlen) / 2) / numberOfGames; // Sor System.out.print ("+"); printDashes (68); System.out.println ("+"); // Címek nyomtatása System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "WINS", "LOSSES", "TIES", "GAMEES PLAYED", "PERCENTAGE NYERTE"); // Line 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 ("|"); // Értékek nyomtatása System.out.printf ("| %6d | %6d | %6d | %12d | %13.2f %% | / n", győzelmek, veszteségek, döntetlenek, numberOfGames, percentWon * 100); // Sor System.out.print ("+"); printDashes (68); System.out.println ("+"); }

1585279 14
1585279 14

14. lépés: Indítsa el a játékot a főosztályon

A főosztályban inicializálja a

Kő papír olló

osztály és hívja a

játék kezdése()

módszer.

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

1585279 15
1585279 15

15. lépés: Tesztelje játékát

Most, hogy minden erőfeszítést megtettünk a Rock, Paper, Scissors játék megírásához, itt az ideje mindent összeállítani és kipróbálni!

Mintaprogram

import java.util. Random; import java.util. Scanner; public class RockPaperScissors {privát felhasználó; saját számítógépes számítógép; private int userScore; privát int computerScore; privát int numberOfGames; private enum Move {ROCK, PAPER, SCISSORS; /** * Összehasonlítja ezt a lépést egy másik lépéssel döntetlen, győzelem vagy * vereség meghatározásával. * * @param otherMove * áthelyezés a * @return 1 -hez, ha ez a lépés legyőzi a másik lépést, -1, ha ez a lépés elveszíti * a másik lépést, 0, ha ezek a lépések döntetlen * / public int compaMoves (Move otherMove) { / / Döntetlen, ha (this == otherMove) return 0; switch (ez) {case ROCK: return (otherMove == OLÓK? 1: -1); eset PAPÍR: return (otherMove == ROCK? 1: -1); eset OLLÓ: return (otherMove == PAPER? 1: -1); } // Soha ne érjen ide vissza 0; }} privát osztály Felhasználó {privát szkenner inputScanner; public User () {inputScanner = új szkenner (System.in); } public Move getMove () {// Kérdezze meg a System.out.print felhasználót ("Kő, papír vagy olló?"); // A felhasználói bemenet lekérése String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// A felhasználó érvényes beviteli kapcsolót adott meg (firstLetter) {case 'R': return Move. ROCK; „P” eset: return Move. PAPER; „S” eset: return Move. SCISSORS; }} // A felhasználó nem adott meg érvényes bemenetet. Kérd újra. return getMove (); } public boolean playAgain () {System.out.print ("Szeretnél újra játszani?"); Karakterlánc userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); return userInput.charAt (0) == 'Y'; }} magánosztályú számítógép {public Move getMove () {Move move = Move.values (); Random random = new Random (); int index = random.nextInt (mozog.hossz); visszatérési lépések [index]; }} public RockPaperScissors () {user = new User (); számítógép = új Számítógép (); userScore = 0; computerScore = 0; numberOfGames = 0; } public void startGame () {System.out.println ("ROCK, PAPER, SCISSORS!"); // Mozgások lekérése Move userMove = user.getMove (); Számítógép mozgatásaMove = computer.getMove (); System.out.println ("\ nJátszottál" + userMove + "."); System.out.println ("A számítógép játszott" + computerMove + ". / N"); // Hasonlítsa össze a lépéseket, és határozza meg a győztest int compaMoves = userMove.compareMoves (computerMove); switch (compaMoves) {case 0: // Tie System.out.println ("Tie!"); szünet; 1. eset: // A felhasználó nyer System.out.println (userMove + "beats" + computerMove + ". Ön nyert!"); userScore ++; szünet; eset -1: // A számítógép nyer System.out.println (computerMove + "ütem" + userMove + ". Elvesztetted."); computerScore ++; szünet; } numberOfGames ++; // Kérje meg a felhasználót, hogy játsszon újra, ha (user.playAgain ()) {System.out.println (); játék kezdése(); } else {printGameStats (); }} /*** Kinyomtatja a játék statisztikáit. A nyereményeket 1/2 győzelemként számítja ki * megnyert százalékban. */ private void printGameStats () {int nyer = userScore; int veszteségek = computerScore; int ties = numberOfGames - userScore - computerScore; double percentWon = (nyer + ((kettős)) döntetlen) / 2) / numberOfGames; // Sor System.out.print ("+"); printDashes (68); System.out.println ("+"); // Címek nyomtatása System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "WINS", "LOSSES", "TIES", "GAMEES PLAYED", "PERCENTAGE NYERTE"); // Line 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 ("|"); // Értékek nyomtatása System.out.printf ("| %6d | %6d | %6d | %12d | %13.2f %% | / n", győzelmek, veszteségek, döntetlenek, numberOfGames, percentWon * 100); // Sor 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) {RockPaperScissors game = new RockPaperScissors (); game.startGame (); }}

Ajánlott: