Si të bëni një lojë guri, letre, gërshërë në Java (me fotografi)

Përmbajtje:

Si të bëni një lojë guri, letre, gërshërë në Java (me fotografi)
Si të bëni një lojë guri, letre, gërshërë në Java (me fotografi)

Video: Si të bëni një lojë guri, letre, gërshërë në Java (me fotografi)

Video: Si të bëni një lojë guri, letre, gërshërë në Java (me fotografi)
Video: Среда восстановления Windows WinRE: объяснение 2024, Mund
Anonim

Rock, Letër, Gërshërë është një lojë me dorë e luajtur nga dy persona. Të dy njerëzit do të thoshin "shkëmb, letër, gërshërë" dhe më pas formonin njëkohësisht një nga tre objektet (shkëmb, letër ose gërshërë) me një dorë të shtrirë. Fituesi përcaktohet nga formacionet e dorës. Gërshërët rreh letrën, letra rreh shkëmbin dhe shkëmbi rreh gërshërët. Nëse të dy lojtarët luajnë të njëjtën formacion dore, konsiderohet si barazim. Ne do të shkruajmë një lojë të thjeshtë në Java për të simuluar Rock, Letër, Gërshërë ku një lojtar është përdoruesi dhe lojtari tjetër është kompjuteri.

Hapa

1585279 1 1
1585279 1 1

Hapi 1. Krijoni klasën kryesore dhe thirreni atë

Gurë Letër gërshërë

.

Kjo do të jetë klasa ku do të shkruajmë lojën. Ju mund të zgjidhni ta emërtoni diçka tjetër si p.sh

Lojë

ose

Kryesore

Me Shkruani në deklaratat e metodës për konstruktorin dhe metodën kryesore.

klasë publike RockPaperScissors {public RockPaperScissors () {} public static void main (String args) {}}

1585279 2 1
1585279 2 1

Hapi 2. Krijoni një numërim për gjestet e dorës (gurë, letër ose gërshërë)

Ne mund të përdorim tela për të përfaqësuar gurin, letrën ose gërshërët, por një numërim na lejon të paracaktojmë konstantet tona, që do të thotë se përdorimi i numërimit është një dizajn më i mirë. Ne do ta quajmë llojin tonë enum

Lëviz

me vlerat

ROCK

LET PR

dhe

Gërshërë

enum privat Lëviz {ROCK, PAPER, SCISSORS}

1585279 3 1
1585279 3 1

Hapi 3. Krijoni dy klasa private

Përdorues

dhe

Kompjuter

.

Këto klasa do të përfaqësojnë lojtarët tanë në lojë. Ju mund të zgjidhni t'i bëni këto klasa publike. E

Përdorues

klasa do të jetë klasa që i kërkon përdoruesit ose gurë, letër ose gërshërë, kështu që do të na duhet të shkruajmë një

getMove ()

metodë. E

Kompjuter

klasa gjithashtu do të duhet të ketë një

getMove ()

metodë në mënyrë që kompjuteri gjithashtu të mund të bëjë një lëvizje. Ne do t'i vendosim vendmbajtësit në këto metoda dhe do t'i zbatojmë ato më vonë. E

Përdorues

klasa do të kërkojë një konstruktor që krijon

Skaner

objekt për të marrë hyrjen e përdoruesit. Ne do të vendosim

Skaner

si një fushë private për përdoruesin dhe pastaj inicojeni atë në konstruktor. Meqenëse ne po përdorim

Skaner

class, ne duhet të shkruajmë një deklaratë importi për të në krye të kodit tonë. E

Kompjuter

klasa nuk kërkon një konstruktor, kështu që ne nuk kemi nevojë të shkruajmë një të tillë; kur inicojmë

Kompjuter

objekt, ne thjesht do të thërrasim konstruktorin e paracaktuar. Këtu është ajo që kemi

Gurë Letër gërshërë

klasa duket si tani:

import java.util. Scanner; klasë publike RockPaperScissors {private enum Move {ROCK, PAPER, SCISSORS} klasë private Përdorues {private Scanner inputScanner; publik User () {inputScanner = skaner i ri (System.in); } public Move getMove () {// TODO: Zbatoni këtë metodë return null; }} kompjuteri i klasës private {public Move getMove () {// TODO: Zbatoni këtë metodë return null; }} public RockPaperScissors () {} public static void main (String args) {}}

1585279 4 1
1585279 4 1

Hapi 4. Shkruani

getMove ()

metodë për

Kompjuter

klasa

Kjo metodë do të kthejë një rastësi

Lëviz

Me Ne mund të marrim një grup të

Lëviz

numërimet duke thirrur në

vlerat ()

metoda:

Zhvendos. Vlerat ()

Me Për të zgjedhur një rastësi

Lëviz

numërimi në këtë grup vlerash, ne duhet të gjenerojmë një indeks të rastësishëm që është një numër i plotë midis 0 dhe gjatësisë së grupit tonë të vlerave. Për ta bërë këtë, ne mund të përdorim

nextInt ()

metoda e

E rastësishme

klasë nga e cila duhet të importojmë

java.util

Me Pasi të kemi marrë indeksin e rastit, mund ta kthejmë

Lëviz

të atij indeksi nga grupi i vlerave tona.

publike Move getMove () {Move moves = Move.values (); Random random = i ri Random (); int index = random.nextInt (moves.length); lëvizjet e kthimit [indeksi]; }

1585279 5 1
1585279 5 1

Hapi 5. Shkruani

getMove ()

metodë për

Përdorues

klasa

Kjo metodë do të kthejë një

Lëviz

që korrespondon me atë që përdoruesi ka të dhëna. Ne do të presim që përdoruesi të shkruajë ose "shkëmb", "letër", ose "gërshërë". Së pari, ne duhet të kërkojmë nga përdoruesi një input:

System.out.print ("Shkëmb, letër, apo gërshërë?")

Me Pastaj përdorni

NextLine ()

metoda e

Skaner

objekt për të marrë hyrjen e përdoruesit si një varg. Ne tani duhet të kontrollojmë nëse përdoruesi ka paraqitur një lëvizje të vlefshme, por ne mund të jemi të butë nëse përdoruesi ka shkruar gabim një fjalë. Pra, ne do të kontrollojmë vetëm nëse shkronja e parë e hyrjes së përdoruesit është ose "R" (për shkëmb), "P" (për letër), ose "S" (për gërshërë), dhe ne nuk do të kujdesemi për rastin sepse ne së pari do të përdorim

rasti i sipërm ()

metoda e

Varg

klasë për ta bërë vargun hyrës të përdoruesit të gjithë të mëdhenj. Nëse përdoruesi nuk ka futur një hyrje të saktë nga distanca, ne do ta kërkojmë përsëri përdoruesin. Pastaj, në varësi të asaj që përdoruesi ka futur, ne do të kthejmë një lëvizje përkatëse.

publike Move getMove () {// Nxitni përdoruesin System.out.print ("Shkëmb, letër, apo gërshërë?"); // Merrni hyrjen e përdoruesit String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); nëse (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Përdoruesi ka futur një çelës hyrës të vlefshëm (firstLetter) {rasti 'R': kthehu Move. ROCK; rasti 'P': kthehu Move. PAPER; rasti 'S': kthehu Leviz. GJISLORT; }} // Përdoruesi nuk ka futur një hyrje të vlefshme. Nxit përsëri. kthehu getMove (); }

1585279 6
1585279 6

Hapi 6. Shkruani një

Luaj përsëri()

metodë për

Përdorues

klasa

Përdoruesi duhet të jetë në gjendje të luajë lojën pa pushim. Për të përcaktuar nëse përdoruesi dëshiron të luajë përsëri, duhet të shkruajmë a

Luaj përsëri()

metodë që kthen një boolean duke i treguar lojës nëse përdoruesi ka vendosur të luajë përsëri apo jo. Në këtë metodë, ne po përdorim

Skaner

që ne kishim inicuar më parë në konstruktor për të marrë një "Po" ose një "Jo" nga përdoruesi. Ne vetëm do të kontrollojmë nëse shkronja e parë është 'Y' për të përcaktuar nëse përdoruesi dëshiron të luajë përsëri. Çdo hyrje tjetër do të thotë që përdoruesi nuk dëshiron të luajë përsëri.

play boolean publicAgain () {System.out.print ("A doni të luani përsëri?"); String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); kthehu userInput.charAt (0) == 'Y'; }

1585279 7
1585279 7

Hapi 7. Lidhni

Përdorues

dhe

Kompjuter

klasa së bashku në

Gurë Letër gërshërë

klasa

Tani që kemi mbaruar së shkruari

Përdorues

dhe

Kompjuter

klasa, ne mund të përqëndrohemi në punën në lojën tonë aktuale. Krijoni fusha private për

Përdorues

dhe

Kompjuter

klasa në

Gurë Letër gërshërë

klasa Ne do të duhet të hyjmë në këto fusha për të hyrë në

getMove ()

metodat kur luajmë lojën. Në konstruktorin për

Gurë Letër gërshërë

klasë, iniconi këto fusha. Ne gjithashtu do të duhet të mbajmë shënim rezultatin

userScore

dhe

rezultat kompjuterik

fushat, të cilat ne duhet të inicojmë si 0 në konstruktorin. Ne gjithashtu duhet të mbajmë shënim numrin e lojërave, të cilat gjithashtu do të jenë një fushë e inicuar si 0.

përdorues privat i përdoruesit; kompjuter kompjuterik privat; int int userScore; int int privateScore; numri int privat i lojërave; publike RockPaperScissors () {user = përdorues i ri (); kompjuter = kompjuter i ri (); userScore = 0; rezultat kompjuterik = 0; numriOfGames = 0; }

1585279 8
1585279 8

Hapi 8. Zgjatni

Lëviz

enum për të përfshirë një metodë që na tregon se cila lëvizje fiton në secilin rast.

Duhet të shkruajmë një

krahasoMoves ()

metodë që kthen 0 nëse lëvizjet janë të njëjta, 1 nëse lëvizja aktuale e mund lëvizjen tjetër dhe -1 nëse lëvizja aktuale humbet në lëvizjen tjetër. Kjo do të jetë e dobishme për përcaktimin e fituesit në lojë. Për të zbatuar këtë metodë, së pari do të kthejmë 0 nëse lëvizjet janë të njëjta dhe prandaj kemi një kravatë. Pastaj shkruani një deklaratë switch për kthimin 1 ose -1.

enum privat Lëviz {ROCK, PAPER, Gërshërë; /** * Krahason këtë lëvizje me një lëvizje tjetër me përcaktimin e barazimit, fitores ose * humbjes. * * @param otherMove * lëvizni për ta krahasuar me * @return 1 nëse kjo lëvizje rreh lëvizjen tjetër, -1 nëse kjo lëvizje humbet në * lëvizjen tjetër, 0 nëse këto lëvizje lidhin * / public int compareMoves (Lëvizni lëvizjen tjetër) { / / Tie nëse (kjo == otherMove) kthehet 0; switch (this) {case ROCK: return (otherMove == SCISSORS 1: -1); rast PAPER: kthim (tjetërLëviz == ROCK? 1: -1); gërshërë të rastit: kthim (tjetërLëviz == PAPER? 1: -1); } // Kurrë nuk duhet të arrijë këtu kthehu 0; }}

1585279 9
1585279 9

Hapi 9. Krijo një

Fillo lojen()

metodë në

Gurë Letër gërshërë

klasa

Kjo metodë do të jetë loja e lojës. Filloni duke vënë një të thjeshtë

System.out.println

në metodën.

public void startGame () {System.out.println ("ROCK, PAPER, Gërshërë!"); }

1585279 10
1585279 10

Hapi 10. Merrni lëvizje nga përdoruesi dhe kompjuteri

Fillo lojen()

metodë, përdorni

getMove ()

metodat nga

Përdorues

klasa dhe

Kompjuter

klasë për të marrë lëvizjet e përdoruesit dhe kompjuterit.

Zhvendos userMove = user.getMove (); Leviz computerMove = computer.getMove (); System.out.println ("\ nJu keni luajtur" + userMove + "."); System.out.println ("Kompjuteri u luajt" + computerMove + ". / N");

1585279 11
1585279 11

Hapi 11. Krahasoni dy lëvizjet dhe përcaktoni nëse fitoi përdoruesi apo fitoi kompjuteri

Përdorni

krahasoMoves ()

metodë nga

Lëviz

enum për të përcaktuar nëse përdoruesi fitoi apo jo. Nëse përdoruesi fiton, shtoni rezultatin e përdoruesit me 1. Nëse përdoruesi humbet, rritni rezultatin e kompjuterit me 1. Nëse ka një barazim, mos e rritni asnjë nga rezultatet. Pastaj shtoni numrin e lojërave të luajtura me një.

int compareMoves = userMove.compareMoves (lëvizja e kompjuterit); switch (krahasoMoves) {case 0: // Tie System.out.println ("Tie!"); pushim; rasti 1: // Përdoruesi fiton System.out.println (userMove + "rreh" + computerMove + ". Ju fituat!"); userScore ++; pushim; rasti -1: // Kompjuteri fiton System.out.println (computerMove + "rreh" + userMove + ". Ke humbur."); kompjuterScore ++; pushim; } numberOfGames ++;

1585279 12
1585279 12

Hapi 12. Pyetni nëse përdoruesi dëshiron të luajë përsëri

Nëse përdoruesi dëshiron të luajë përsëri, telefononi

Fillo lojen()

përsëri. Përndryshe, telefononi

printGameStats ()

e cila do të printojë statistikat e lojës. Ne do ta shkruajmë këtë metodë në hapin tjetër.

if (user.playAgain ()) {System.out.println (); Fillo lojen(); } else {printGameStats (); }

1585279 13
1585279 13

Hapi 13. Shkruani

printGameStats ()

metodë.

Kjo metodë do të shfaq statistikat e lojës: numri i fitoreve, numri i humbjeve, numri i barazimeve, numri i lojërave të luajtura dhe përqindja e lojërave të fituara nga përdoruesi. Përqindja e lojërave të fituara llogaritet nga (# fiton + (# kravatë/2))/(# lojëra të luajtura). Kjo metodë përdor

System.out.printf

për të printuar tekst të formatuar.

private void printGameStats () {int fiton = userScore; humbjet int = rezultati kompjuterik; lidhjet int = numriOfGames - userScore - computerScore; përqindje e dyfishtë Fitoi = (fiton + ((dyfish) barazimet) / 2) / numberOfGames; // Line System.out.print ("+"); printDashhes (68); System.out.println ("+"); // Shtyp titujt System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "FITIMET", "HUMBJET", "LIDHJET", "LOJ PLRAT E LUARA", "PERRQINDJA FITOI"); // Line System.out.print ("|"); printDashes (10); System.out.print ("+"); printDashhes (10); System.out.print ("+"); printDashhes (10); System.out.print ("+"); printDashhes (16); System.out.print ("+"); printDashhes (18); System.out.println ("|"); // Vlerat e printimit System.out.printf ("| %6d | %6d | %6d | %12d | %13.2f %% | / n", fitimet, humbjet, lidhjet, numriOfGames, përqindja Fituar * 100); // Line System.out.print ("+"); printDashhes (68); System.out.println ("+"); }

1585279 14
1585279 14

Hapi 14. Filloni lojën në klasën kryesore

Në klasën kryesore, filloni një shembull të

Gurë Letër gërshërë

klasë dhe telefononi

Fillo lojen()

metodë.

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

1585279 15
1585279 15

Hapi 15. Provoni lojën tuaj

Tani që kemi kaluar të gjitha përpjekjet për të shkruar lojën Rock, Letër, Gërshërë, është koha për të përpiluar dhe testuar gjithçka!

Shembull Programi

importo java.util. Rastit; import java.util. Scanner; klasë publike RockPaperScissors {përdorues privat i përdoruesit; kompjuter kompjuterik privat; int int userScore; int int privateScore; numri int privat i lojërave; enum privat Lëviz {ROCK, PAPER, Gërshërë; /** * Krahason këtë lëvizje me një lëvizje tjetër me përcaktimin e barazimit, fitores ose * humbjes. * * @param otherMove * lëvizni për ta krahasuar me * @return 1 nëse kjo lëvizje rreh lëvizjen tjetër, -1 nëse kjo lëvizje humbet në * lëvizjen tjetër, 0 nëse këto lëvizje lidhen * / public int compareMoves (Lëvizni lëvizjen tjetër) { / / Tie if (this == otherMove) kthejë 0; switch (this) {case ROCK: return (otherMove == SCISSORS? 1: -1); rast PAPER: kthim (tjetërLëviz == ROCK? 1: -1); gërshërë të rastit: kthim (tjetërLëviz == PAPER? 1: -1); } // Kurrë nuk duhet të arrijë këtu kthehu 0; }} klasa private Përdoruesi {private Scanner inputScanner; publik User () {inputScanner = skaner i ri (System.in); } Public Move getMove () {// Nxitni përdoruesin System.out.print ("Shkëmb, letër, apo gërshërë?"); // Merrni hyrjen e përdoruesit String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); nëse (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Përdoruesi ka futur një çelës hyrës të vlefshëm (firstLetter) {rasti 'R': kthehu Move. ROCK; rasti 'P': kthehu Move. PAPER; rasti 'S': kthehu Leviz. GJISLORT; }} // Përdoruesi nuk ka futur një hyrje të vlefshme. Nxit përsëri. kthehu getMove (); } public boolean playAgain () {System.out.print ("A doni të luani përsëri?"); String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); kthehu userInput.charAt (0) == 'Y'; }} klasë private Kompjuter {public Move getMove () {Move moves = Move.values (); Random random = i ri Random (); int index = random.nextInt (moves.length); lëvizjet e kthimit [indeksi]; }} publike RockPaperScissors () {user = përdorues i ri (); kompjuter = kompjuter i ri (); userScore = 0; rezultat kompjuterik = 0; numriOfGames = 0; } public void startGame () {System.out.println ("ROCK, PAPER, Gërshërë!"); // Merr lëvizje Leviz userMove = user.getMove (); Leviz computerMove = computer.getMove (); System.out.println ("\ nJu keni luajtur" + userMove + "."); System.out.println ("Kompjuteri u luajt" + computerMove + ". / N"); // Krahasoni lëvizjet dhe përcaktoni fituesin në compareMoves = userMove.compareMoves (lëvizja e kompjuterit); switch (krahasoMoves) {case 0: // Tie System.out.println ("Tie!"); pushim; rasti 1: // Përdoruesi fiton System.out.println (userMove + "rreh" + computerMove + ". Ju fituat!"); userScore ++; pushim; rasti -1: // Kompjuteri fiton System.out.println (computerMove + "rreh" + userMove + ". Ke humbur."); kompjuterScore ++; pushim; } numberOfGames ++; // Kërkoji përdoruesit të luajë përsëri nëse (user.playAgain ()) {System.out.println (); Fillo lojen(); } else {printGameStats (); }} /*** Shtyp statistikat e lojës. Llogarit barazimet si 1/2 e fitores në * përqindje të fituar. */ private void printGameStats () {int fiton = userScore; humbjet int = rezultati kompjuterik; lidhjet int = numriOfGames - userScore - computerScore; përqindje e dyfishtë Fitoi = (fiton + ((dyfish) barazimet) / 2) / numberOfGames; // Line System.out.print ("+"); printDashhes (68); System.out.println ("+"); // Shtyp titujt System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "FITIMET", "HUMBJET", "LIDHJET", "LOJAMRAT E LUARA", "PERRQINDJA FITOI"); // Line System.out.print ("|"); printDashes (10); System.out.print ("+"); printDashhes (10); System.out.print ("+"); printDashhes (10); System.out.print ("+"); printDashhes (16); System.out.print ("+"); printDashhes (18); System.out.println ("|"); // Vlerat e printimit System.out.printf ("| %6d | %6d | %6d | %12d | %13.2f %% | / n", fitoret, humbjet, lidhjet, numriOfGames, përqindja Fituar * 100); // Line System.out.print ("+"); printDashhes (68); System.out.println ("+"); } printDashes private void (int numberOfDashes) {për (int i = 0; i <numberOfDashes; i ++) {System.out.print ("-"); }} public static void main (String args) {RockPaperScissors game = new RockPaperScissors (); game.startGame (); }}

Recommended: