Kuidas teha Java -s kivi, paberit, käärimängu (piltidega)

Sisukord:

Kuidas teha Java -s kivi, paberit, käärimängu (piltidega)
Kuidas teha Java -s kivi, paberit, käärimängu (piltidega)

Video: Kuidas teha Java -s kivi, paberit, käärimängu (piltidega)

Video: Kuidas teha Java -s kivi, paberit, käärimängu (piltidega)
Video: The Latest SketchUp File Integration Is….. 2024, Mai
Anonim

Rock, Paper, Scissors on käemäng, mida mängivad kaks inimest. Mõlemad inimesed ütleksid "kivi, paber, käärid" ja moodustaksid samal ajal väljasirutatud käega ühe kolmest objektist (kivi, paber või käärid). Võitja selgitatakse välja koosseisude järgi. Käärid löövad paberit, paber lööb kivimit ja kivi lööb käärid. Kui mõlemad mängijad mängivad sama käega, loetakse see viigiks. Kirjutame Java -s lihtsa mängu, et simuleerida kivi, paberit, käärid, kus üks mängija on kasutaja ja teine mängija on arvuti.

Sammud

1585279 1 1
1585279 1 1

Samm 1. Looge põhiklass ja helistage sellele

Kivi paber käärid

.

See on klass, kus me mängu kirjutame. Võite selle nimetada millekski muuks, näiteks

Mäng

või

Peamine

. Kirjutage konstruktori ja põhimeetodi meetodideklaratsioonid.

avalik klass RockPaperScissors {public RockPaperScissors () {} public static void main (String args) {}}

1585279 2 1
1585279 2 1

Samm 2. Looge käeliigutuste (kivim, paber või käärid) loend

Me võiksime kasutada stringe kivi, paberi või kääride tähistamiseks, kuid loend võimaldab meil oma konstandid eelnevalt määratleda, mis tähendab, et loenduse kasutamine on parem disain. Me nimetame oma enum tüüpi

Liiguta

väärtustega

ROCK

PABER

ja

KÄÄRID

private enum Teisalda {ROCK, PAPER, SCISSORS}

1585279 3 1
1585279 3 1

Samm 3. Looge kaks eraklassi

Kasutaja

ja

Arvuti

.

Need klassid esindavad mängus meie mängijaid. Võite need klassid avalikustada. The

Kasutaja

klass on klass, mis palub kasutajal kas kivi, paberit või käärid, seega peame kirjutama

getMove ()

meetod. The

Arvuti

klassil peab olema ka a

getMove ()

meetodit, et arvuti saaks ka käigu teha. Lisame nendesse meetoditesse kohatäitjad ja rakendame need hiljem. The

Kasutaja

klass vajab konstruktorit, mis seadistab

Skanner

objekti kasutaja sisendisse kaasamiseks. Me paneme

Skanner

kasutaja privaatväljana ja seejärel käivitage see konstruktoris. Kuna me kasutame

Skanner

klassi, peame selle koodi ülaossa kirjutama impordiaruande. The

Arvuti

klass ei vaja konstruktorit, seega ei pea me seda kirjutama; kui algatame

Arvuti

objekti, helistame lihtsalt vaikekonstruktorile. Siin on see, mis meie

Kivi paber käärid

klass näeb praegu välja selline:

importige java.util. Scanner; public class RockPaperScissors {private enum Move {ROCK, PAPER, SCISSORS} eraklass Kasutaja {private Scanner inputScanner; avalik kasutaja () {inputScanner = uus skanner (System.in); } public Liiguta getMove () {// TODO: Selle meetodi rakendamine return null; }} eraklass Arvuti {public Move getMove () {// TODO: Selle meetodi rakendamine return null; }} public RockPaperScissors () {} public static void main (String args) {}}

1585279 4 1
1585279 4 1

Samm 4. Kirjutage

getMove ()

meetod

Arvuti

klassi.

See meetod tagastab juhusliku

Liiguta

. Me saame massiivi

Liiguta

loendid helistades

väärtused()

meetod:

Move.values ()

. Juhusliku valimiseks

Liiguta

Selle väärtuste massiivi loendamisel peame looma juhusliku indeksi, mis on täisarv vahemikus 0 kuni meie väärtuste massiivi pikkus. Selleks saame kasutada

nextInt ()

meetod

Juhuslik

klassi, millest peame importima

java.util

. Pärast juhusliku indeksi saamist saame selle tagasi saata

Liiguta

selle väärtuse massiivist.

public Liiguta getMove () {Liiguta liigub = Liiguta.väärtused (); Juhuslik juhuslik = uus Juhuslik (); int indeks = juhuslik.nextInt (liigub.pikkus); tagasikäigud [indeks]; }

1585279 5 1
1585279 5 1

Samm 5. Kirjutage

getMove ()

meetod

Kasutaja

klassi.

See meetod tagastab a

Liiguta

mis vastavad kasutaja sisestatud andmetele. Ootame, et kasutaja kirjutaks kas "kivi", "paber" või "käärid". Esiteks peame kasutajat sisestama:

System.out.print ("Kivim, paber või käärid?")

. Seejärel kasutage

nextLine ()

meetod

Skanner

objekti, et saada kasutaja sisend stringina. Peame nüüd kontrollima, kas kasutaja on esitanud kehtiva käigu, kuid võime olla leebed, kui kasutaja on sõna valesti kirjutanud. Seega kontrollime ainult seda, kas kasutaja sisendi esimene täht on kas "R" (kivimite jaoks), "P" (paberi jaoks) või "S" (kääride jaoks), ja me ei hooli juhtumist, sest kasutame kõigepealt

toVarpCase ()

meetod

String

klassi, et muuta kasutaja sisestatud string suurtähtedeks. Kui kasutaja pole sisestanud kaugelt korrektset sisendit, küsime kasutajat uuesti. Seejärel, sõltuvalt sellest, mida kasutaja on sisestanud, tagastame vastava käigu.

public Move getMove () {// Küsi kasutajalt System.out.print ("Kivi, paber või käärid?"); // Kasutaja sisendi hankimine String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Kasutaja on sisestanud kehtiva sisendlüliti (firstLetter) {case 'R': return Move. ROCK; juhtum 'P': tagasta Move. PAPER; juhtum 'S': tagasta Move. SCISSORS; }} // Kasutaja pole sisestanud kehtivat sisendit. Küsi uuesti. return getMove (); }

1585279 6
1585279 6

Samm 6. Kirjutage a

mängi uuesti()

meetod

Kasutaja

klassi.

Kasutajal peaks olema võimalus mängu uuesti ja uuesti mängida. Selleks, et teha kindlaks, kas kasutaja soovib uuesti mängida, peame kirjutama a

mängi uuesti()

meetod, mis tagastab tõeväärtuse, öeldes mängule, kas kasutaja on otsustanud uuesti mängida või mitte. Selle meetodi puhul kasutame

Skanner

mille olime eelnevalt konstruktoris algatanud, et saada kasutajalt "Jah" või "Ei". Kontrollime ainult seda, kas esimene täht on „Y”, et teha kindlaks, kas kasutaja soovib uuesti mängida. Mis tahes muu sisend tähendab, et kasutaja ei soovi uuesti mängida.

public boolean playAgain () {System.out.print ("Kas soovite uuesti mängida?"); String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); return userInput.charAt (0) == 'Y'; }

1585279 7
1585279 7

Samm 7. Ühendage

Kasutaja

ja

Arvuti

klassid koos

Kivi paber käärid

klassi.

Nüüd, kui oleme kirjutamise lõpetanud

Kasutaja

ja

Arvuti

klassides, saame keskenduda oma tegeliku mängu kallale. Looge privaatväljad

Kasutaja

ja

Arvuti

klassides

Kivi paber käärid

klassi. Meil on vaja nendele väljadele juurde pääseda

getMove ()

meetodeid, kui me mängu mängime. Konstruktoris

Kivi paber käärid

klassi, käivitage need väljad. Samuti peame jälgima tulemust

userScore

ja

computerScore

väljad, mille peame konstruktoris käivitama kui 0. Peame jälgima ka mängude arvu, mis on samuti 0 algatatud väli.

erakasutaja; eraarvuti; private int userScore; private int computerScore; privaatne int numberOfGames; public RockPaperScissors () {kasutaja = uus kasutaja (); arvuti = uus Arvuti (); kasutajatulemus = 0; arvutiSkoor = 0; numberOfGames = 0; }

1585279 8
1585279 8

Samm 8. Laiendage

Liiguta

enum lisada meetod, mis ütleb meile, milline käik võidab igal juhul.

Peame kirjutama a

võrrelda liigub ()

meetod, mis tagastab 0, kui käigud on samad, 1, kui praegune käik võidab teist käiku, ja -1, kui praegune käik kaotab teisele käigule. See on kasulik mängu võitja väljaselgitamiseks. Selle meetodi rakendamiseks tagastame esmalt 0, kui käigud on samad ja seetõttu on meil võrdne. Seejärel kirjutage lüliti avaldus 1 või -1 tagastamiseks.

private enum Move {ROCK, PAPER, SCISSORS; /** * Võrdleb seda sammu teise käiguga viigi, võidu või * kaotuse määramisega. * * @param otherMove * liiguta võrdluseks * @return 1 -ga, kui see käik võidab teise käigu, -1, kui see käik kaotab * teise käigu, 0, kui need käigud viigistavad * / public int compaMoves (Teisalda teisaldage) { / / Tie kui (see == muuMove) tagastab 0; lüliti (see) {case ROCK: return (otherMove == KÄÄRID? 1: -1); juhtum PAPER: return (otherMove == ROCK? 1: -1); juhtum KÄÄRID: return (otherMove == PAPER? 1: -1); } // Ei peaks kunagi siia jõudma return 0; }}

1585279 9
1585279 9

Samm 9. Looge a

Alusta mängu()

meetodit

Kivi paber käärid

klassi.

See meetod on mängu mängimine. Alustage lihtsa panemisega

System.out.println

meetodis.

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

1585279 10
1585279 10

Samm 10. Hankige käigud kasutajalt ja arvutilt

Aastal

Alusta mängu()

meetodit, kasutage

getMove ()

meetodid alates

Kasutaja

klass ja

Arvuti

klassi, et saada kasutaja ja arvuti käigud.

Liiguta userMove = user.getMove (); Liiguta arvutiMove = computer.getMove (); System.out.println ("\ nSa mängisid" + userMove + "."); System.out.println ("Arvuti mängis" + computerMove + ". / N");

1585279 11
1585279 11

Samm 11. Võrrelge kahte käiku ja tehke kindlaks, kas kasutaja võitis või arvuti võitis

Kasuta

võrrelda liigub ()

meetod alates

Liiguta

enum, et teha kindlaks, kas kasutaja võitis või mitte. Kui kasutaja võitis, suurendage kasutaja skoori 1 võrra. Kui kasutaja kaotas, suurendage arvuti skoori 1 võrra. Seejärel suurendage mängude arvu ühe võrra.

int compaMoves = userMove.compareMoves (computerMove); switch (võrreldaMoves) {case 0: // Tie System.out.println ("Tie!"); murda; juhtum 1: // Kasutaja võidab System.out.println (userMove + "lööb" + computerMove + ". Sa võitsid!"); userScore ++; murda; juhtum -1: // Arvuti võidab System.out.println (computerMove + "lööb" + userMove + ". Sa kaotasid."); computerScore ++; murda; } numberOfGames ++;

1585279 12
1585279 12

Samm 12. Küsige, kas kasutaja soovib uuesti mängida

Kui kasutaja soovib uuesti mängida, helistage

Alusta mängu()

uuesti. Muidu helistage

printGameStats ()

mis prindib välja mängu statistika. Kirjutame selle meetodi järgmises etapis.

if (user.playAgain ()) {System.out.println (); Alusta mängu(); } else {printGameStats (); }

1585279 13
1585279 13

Samm 13. Kirjutage

printGameStats ()

meetod.

Selle meetodiga kuvatakse mängu statistika: võitude arv, kaotuste arv, seoste arv, mängitud mängude arv ja kasutaja võidetud mängude protsent. Võidetud mängude protsent arvutatakse (# võitu + (# viiki/2))/(# mängitud mängu) järgi. See meetod kasutab

System.out.printf

vormindatud teksti printimiseks.

private void printGameStats () {int võidab = userScore; int kahjud = computerScore; int lips = numberOfGames - userScore - computerScore; topeltprotsentvõit = (võidab + ((topelt)) viigist) / 2) / numberOfGames; // Line System.out.print ("+"); printKriipsud (68); System.out.println ("+"); // Pealkirjade printimine System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "WINS", "LOSSES", "TIES", "MÄNGUD MÄNGUD", "PERCENTAGE VÕITIS "); // Line System.out.print ("|"); printKriipsud (10); System.out.print ("+"); printKriipsud (10); System.out.print ("+"); printKriipsud (10); System.out.print ("+"); printKriipsud (16); System.out.print ("+"); printKriipsud (18); System.out.println ("|"); // Väärtuste printimine System.out.printf ("| %6d | %6d | %6d | %12d | %13.2f %% | / n", võidud, kaotused, viigid, numberOfGames, protsentvõit * 100); // Line System.out.print ("+"); printKriipsud (68); System.out.println ("+"); }

1585279 14
1585279 14

Samm 14. Alustage mängu põhiklassis

Initsialiseerige põhiklassis eksemplar

Kivi paber käärid

klassi ja helistage

Alusta mängu()

meetod.

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

1585279 15
1585279 15

Samm 15. Testige oma mängu

Nüüd, kui oleme teinud kõik jõupingutused, kirjutades mängu Rock, Paper, Scissors, on aeg kõik kokku panna ja katsetada!

Näidisprogramm

import java.util. Random; importige java.util. Scanner; public class RockPaperScissors {erakasutaja; eraarvuti; private int userScore; private int computerScore; privaatne int numberOfGames; private enum Move {ROCK, PAPER, SCISSORS; /** * Võrdleb seda sammu teise käiguga viigi, võidu või * kaotuse määramisega. * * @param otherMove * liiguta võrdluseks * @return 1 -ga, kui see käik võidab teise käigu, -1, kui see käik kaotab * teise käigu, 0, kui need käigud viigistavad * / public int compaMoves (Move otherMove) { / / Tie kui (see == muuMove) tagastab 0; lüliti (see) {case ROCK: return (otherMove == KÄÄRID? 1: -1); juhtum PAPER: return (otherMove == ROCK? 1: -1); juhtum KÄÄRID: return (otherMove == PAPER? 1: -1); } // Ei peaks kunagi siia jõudma return 0; }} eraklass Kasutaja {privaatne skanner inputScanner; avalik kasutaja () {inputScanner = uus skanner (System.in); } public Liiguta getMove () {// Küsi kasutajalt System.out.print ("Kivi, paber või käärid?"); // Kasutaja sisendi hankimine String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Kasutaja on sisestanud kehtiva sisendlüliti (firstLetter) {case 'R': return Move. ROCK; juhtum 'P': tagasta Move. PAPER; juhtum 'S': tagasta Move. SCISSORS; }} // Kasutaja pole sisestanud kehtivat sisendit. Küsi uuesti. return getMove (); } public boolean playAgain () {System.out.print ("Kas soovite uuesti mängida?"); String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); return userInput.charAt (0) == 'Y'; }} eraklass Arvuti {avalik Liiguta getMove () {Liiguta liigub = Liiguta.väärtused (); Juhuslik juhuslik = uus Juhuslik (); int indeks = juhuslik.nextInt (liigub.pikkus); tagasikäigud [indeks]; }} public RockPaperScissors () {user = new User (); arvuti = uus Arvuti (); kasutajatulemus = 0; arvutiSkoor = 0; numberOfGames = 0; } public void startGame () {System.out.println ("ROCK, PAPER, SCISSORS!"); // Hangi käigud Liiguta userMove = user.getMove (); Liiguta arvutiMove = computer.getMove (); System.out.println ("\ nSa mängisid" + userMove + "."); System.out.println ("Arvuti mängis" + computerMove + ". / N"); // Võrrelge käike ja määrake võitja int compaMoves = userMove.compareMoves (computerMove); switch (võrreldaMoves) {case 0: // Tie System.out.println ("Tie!"); murda; juhtum 1: // Kasutaja võidab System.out.println (userMove + "lööb" + computerMove + ". Sa võitsid!"); userScore ++; murda; juhtum -1: // Arvuti võidab System.out.println (computerMove + "lööb" + userMove + ". Sa kaotasid."); computerScore ++; murda; } numberOfGames ++; // Paluge kasutajal uuesti mängida, kui (user.playAgain ()) {System.out.println (); Alusta mängu(); } else {printGameStats (); }} /*** Prindib välja mängu statistika. Arvutab seosed 1/2 võiduna * võidetud protsendi kohta. */ private void printGameStats () {int võidab = userScore; int kahjud = computerScore; int lips = numberOfGames - userScore - computerScore; topeltprotsentvõit = (võidab + ((topelt)) viigist) / 2) / numberOfGames; // Line System.out.print ("+"); printKriipsud (68); System.out.println ("+"); // Pealkirjade printimine System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "WINS", "LOSSES", "TIES", "MÄNGUD MÄNGUD", "PERCENTAGE VÕITIS "); // Line System.out.print ("|"); printKriipsud (10); System.out.print ("+"); printKriipsud (10); System.out.print ("+"); printKriipsud (10); System.out.print ("+"); printKriipsud (16); System.out.print ("+"); printKriipsud (18); System.out.println ("|"); // Väärtuste printimine System.out.printf ("| %6d | %6d | %6d | %12d | %13.2f %% | / n", võidud, kaotused, viigiseisud, numberOfGames, protsentvõit * 100); // Line System.out.print ("+"); printKriipsud (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 (); }}

Soovitan: