Hoe om `n klip-, papier- en skêrspel in Java te maak
Steen, papier en skêr is `n stel hande vir twee mense. Albei spelers moet "klip, papier, skêr" sê en terselfdertyd een van die drie voorwerpe (klip, papier of skêr) met `n verlengde hand vorm. Die wenner word bepaal deur die formasies van die hande. Die skêr klop die papier, die papier slaan die klip, en die klip slaan die skêr. As albei spelers dieselfde handvorming aanbied, word dit as `n trekking beskou. Ons sal `n eenvoudige speletjie in Java skryf om Stone, Paper, Scissors te simuleer waarin een speler die gebruiker is en die ander die rekenaar.
conținut
stappe
1
Skep die hoofklas en noem dit
PiedraPapelTijeras
. Dit sal die klas wees waarin ons die spel sal skryf. Jy kan kies om dit op een of ander manier te noem, soos spel
of hoof
. Skryf die metodeverklarings vir die konstruktor en vir die hoofmetode.openbare klas StonePaperShoes {publicStonePaperScissors () {} openbare statiese void main (String [] args) {}}
2
Skep `n opsomming vir handgebare (klip, papier of skêr). Ons kan kettings gebruik om klip, papier of skêr te verteenwoordig, maar `n opsomming stel ons in staat om ons konstantes te definieer, wat beteken dat die gebruik van opsomming `n beter ontwerp tot gevolg het. Ons sal ons opsommingstipe bel
skuif
met die waardes ROCA
, ROL
, en skêr
.privaat enum Beweeg {ROCK, PAPER, SCISSORS}
3
Skep twee privaat klasse
gebruiker
en rekenaar
. Hierdie klasse sal ons spelers in die spel verteenwoordig. Die klas gebruiker
sal die klas wees wat die gebruiker vra om tussen klip, papier of skêr te kies, dus moet ons `n metode skryf getMove ()
. Die klas rekenaar
jy moet ook `n metode hê getMove ()
sodat die rekenaar ook sy beweeg kan maak. Ons sal plekhouers in hierdie metodes plaas om hulle later te implementeer. Die klas gebruiker
sal `n konstruktor nodig hê om die voorwerp te konfigureer skandeerder
wat die gebruiker se insette sal neem. Ons sal die skandeerder
as `n privaat veld vir die gebruiker, en dan begin ons dit in die konstruktor. Hoe gebruik ons die klas skandeerder
, Ons moet `n invoerverklaring bo-aan ons kode skryf. Die klas rekenaar
benodig nie `n konstruktor nie, daarom hoef ons nie een te skryf nie - wanneer ons die voorwerp begin rekenaar
, Ons sal die bouer as standaard aanroep. So lyk ons klas nou PiedraPapelTijeras
:invoer java.util.Scanner-openbare klas PiedraPapelTijeras enum {private Move {ROCA, papier, `n skêr} private klas Gebruiker {private-openbare inputScanner Skandeerder Gebruiker () {inputScanner = nuwe Skandeerder (System.in) -} openbare getMove Move () {// `TODO: Implementering van hierdie métodoreturn nul -}} private klas Computer {openbare getMove Move () {// TODO: Implementering van hierdie métodoreturn nul -}} openbare PiedraPapelTijeras () {} openbare statiese nietig hoof (String [] argumente) {}}
4
Skryf die metode
getMove ()
vir die klas rekenaar
. Hierdie metode sal `n skuif
ewekansige. Ons kan `n skikking van die opsommings van skuif
roep die metode waardes ()
: Skuif.waardes ()
. Om `n ewekansige opsomming van skuif
In hierdie skikking van waardes moet ons `n ewekansige indeks genereer wat `n heelgetal is tussen 0 en die lengte van ons skikking van waardes. Om dit te kan doen, kan ons die metode gebruik nextInt ()
van die klas ewekansige
, waarvoor ons moet invoer java.util
. Nadat u die ewekansige indeks gekry het, kan ons die skuif
vir daardie indeks van ons verskeidenheid waardes.openbare getMove Move () {Move [] Moves = Move.values () - Nut Nut = nuwe Random () - int indeks = random.nextInt (moves.length) beweeg -RETURN [indeks] -}
5
Skryf die metode
getMove ()
vir die klas gebruiker
. Hierdie metode sal `n skuif
ooreenstem met wat die gebruiker ingeskryf het. Ons sal aanneem dat die gebruiker sal skryf rock, papier of skêr. Eerstens moet ons `n insette vir die gebruiker aanvra: System.out.print ("Klip, papier of skêr?")
. Dan sal ons die metode gebruik nextLine ()
van die voorwerp skandeerder
om die gebruiker se insette as `n tou te neem. Nou moet ons seker maak of die gebruiker `n geldige skuif ingevoer het, maar ons kan verdraagsaam wees oor die spelling. So sal ons net kyk of die eerste letter wat die gebruiker ingaan, `n is R (vir rock), a P (vir papier) of a T (vir skêr), ongeag of hulle hoofletters of kleinletters is, aangesien ons die metode sal gebruik toUpperCase ()
van die klas string
om alle gebruikersinskrywings te kapitaliseer. As die gebruiker `n verkeerde inskrywing betree, sal ons hom vra om weer in te voer. Dan, afhangende van wat die gebruiker ingeskryf het, sal ons `n ooreenstemmende spel teruggee.openbare skuif getMove () {// Versoek die gebruiker System.out.print ("Klip, papier of skêr? ") - // Kry insette usuarioString usuarioInput = inputScanner.nextLine () - usuarioInput = usuarioInput.toUpperCase () - char firstLetter = usuarioInput.charAt (0) -As (firstLetter == `R` || firstLetter == `P `|| firstLetter ==` t `) {// User het `n válidoswitch data (firstLetter) aangegaan {case` R `omdraai Move.ROCA-geval` P `omdraai Move.PAPEL-geval` T `: terugkeer Move .TIJERAS -}} // Gebruiker het nie `n geldige data ingevoer nie. Versoek again.return getMove () -}
6
Skryf `n metode
playAgain ()
vir die klas gebruiker
. Die gebruiker moet weer kan speel. Om te bepaal of die gebruiker weer wil speel, moet ons `n metode skryf playAgain ()
wat `n Boole-waarde gee wat sê as die gebruiker besluit het om weer te speel of nie. In hierdie metode gebruik ons die skandeerder
wat ons voorheen in die konstruktor begin het om `n Ja of a Nie die gebruiker nie Ons sal slegs kyk of die eerste letter `n `S` is om te bepaal of die gebruiker weer wil speel. Enige ander inskrywing sal beteken dat die gebruiker nie weer wil speel nie.openbare booleanse playAgain () {System.out.print ("Wil jy weer speel? ") -string usuarioInput = inputScanner.nextLine () - usuarioInput = usuarioInput.toUpperCase () - terugkeer usuarioInput.charAt (0) == `S`-}
7
Verbind die klasse
gebruiker
en rekenaar
saam in die klas PiedraPapelTijeras
. Nou dat ons klaar is met die skryf van die klasse gebruiker
en rekenaar
, Ons kan konsentreer op die spel self. Skep privaat velde vir klasse gebruiker
en rekenaar
in die klas PiedraPapelTijeras
. Ons moet toegang tot hierdie velde hê om toegang tot die metodes te verkry getMove ()
wanneer ons speel In die konstruktor vir die klas PiedraPapelTijeras
, Begin hierdie velde. Ons moet ook die punte in die velde byhou usuarioPuntos
en computadoraPuntos
, wat ons by 0 in die konstruktor moet begin. Ons moet ook tred hou met die aantal speletjies, wat ook `n veld by 0 sal wees.private gebruiker gebruiker-private Computer rekenaar-private int usuarioPuntos-private int computadoraPuntos-private int cantidadDeJuegos-openbare PiedraPapelTijeras () {gebruiker = nuwe gebruiker () - PC = nuwe rekenaar () - usuarioPuntos = 0-computadoraPuntos = 0-cantidadDeJuegos = 0 -}
8
Verleng die opsomming
skuif
Om `n metode in te sluit wat ons vertel wie sal wen in elke geval. Ons moet `n metode skryf vergelyk beweeg ()
wat 0 keer as die toneelstukke dieselfde is, 1 as die huidige toneelstuk die ander klop, en -1 as die huidige toneelstuk voor die ander verloor. Dit sal nuttig wees om die wenner van die spel te bepaal. Om hierdie metode te implementeer, sal ons eers 0 terugkeer as die toneelstukke dieselfde is, en daarom sal ons `n trekking maak. Skryf dan `n skakelstaat om 1 of -1 terug te gee.Beweeg private enum {ROCK, Paper, Scissors - / *** Vergelyk hierdie spel met `n ander speel om `n das, oorwinning of nederlaag bepaal ** * * param otherMove skuif te vergelyk * @return 1 as hy dit skuif na wen. `n ander, -1 indien hierdie spel verloor om * die ander, 0 as die speel bind * / openbare int compareMoves (beweeg otherMove) {// Empateif (hierdie == otherMove) terugkeer 0-skakelaar (hierdie) {geval ROCK: terugkeer (? otherMove == skêr 1: 1) -case VRAESTEL: terugkeer (? otherMove ROCK == 1: 1) -case skêr: terugkeer (otherMove == Paper 1: -1) -} // Nooit moet kom tot hier 0 0}}
9
Skep `n metode
startgame ()
in die klas PiedraPapelTijeras
. Hierdie metode sal die ontwikkeling van die spel wees. Begin deur `n eenvoudige te maak System.out.println
in die metode.publieke ongeldige startgame () {System.out.println ("ROCK, PAPER, SCISSORS!") -)
10
Kry die toneelstukke van die gebruiker en die rekenaar. In die metode
startgame ()
, gebruik die metodes getMove ()
van die klas gebruiker
en die klas rekenaar
om die toneelstukke van die gebruiker en die rekenaar te verkry.Skuif userMove = user.getMove () - Skuif computerMove = computer.getMove () - System.out.println (" nJy het gespeel " + userMove + ".") -Systeem.out.println ("Rekenaar gespeel " + rekenaarmove + ". n") -
11
Vergelyk die twee beweeg en bepaal of die gebruiker of die rekenaar gewen het. Gebruik die metode
vergelyk beweeg ()
uit die enum skuif
om te bepaal of die gebruiker gewen het of nie. As die gebruiker gewen het, verhoog die gebruikers se telling met 1. As die gebruiker verloor het, verhoog die rekenaar telling met 1. As daar `n das was, verhoog nie enige van die tellings nie. Dan verhoog die aantal speletjies in een.int compareMoves = usuarioMove.compareMoves (computadoraMove) -switch (compareMoves) {geval 0: // EmpateSystem.out.println ("Trek!") -break-case 1: // Win User System.out.println (userMove + " jy klop " + rekenaarmove + ". Jy het gewen!") -gebruikersPunte ++ - breekpos -1: // Win Computer System.out.println (computerMove + " jy klop " + userMove + ". Jy het verloor") -rekenaarPunte + + - breek-} aantal speletjies + + -
12
Vra die gebruiker of hy weer wil speel. As die gebruiker weer wil speel, bel weer
startgame ()
. Anders, bel printgameStats ()
wat die statistieke van die spel sal druk. Ons sal hierdie metode in die volgende stap skryf.indien (user.playAgain ()) {System.out.println () - startGame () -} anders {printGameStats () -}
13
Skryf die metode
printgameStats ()
. Hierdie metode sal die statistieke van die spel wys: aantal oorwinnings, aantal verliese, aantal trekkings, aantal speletjies, en en persentasie gebruikers se oorwinnings. Die persentasie gespeelde speletjies word bereken deur (# voctories + (# ties / 2)) / (# speletjies). Hierdie metode gebruik System.out.printf
om geformateerde teks te druk.privaat leegdrukGameStats ()% 6d
14
Begin die spel in die hoofklas. In die hoofklas, begin `n voorbeeld van die klas
PiedraPapelTijeras
en noem die metode startgame ()
.openbare statiese nietig hoof (String [] argumente) {PiedraPapelTijeras PiedraPapelTijeras spel = nuwe () - game.startGame () -}
Skerm-Shot-06/23/2013-at-2.27.50-AM.jpg" klas ="beeld ligkas">
15
Toets jou spel. Noudat ons al die moeite gedoen het om die spel van Stone, Paper, Scissors te skryf, is dit tyd om alles op te stel en te toets!
Voorbeeldprogram
invoer java.util.Random-invoer java.util.Scanner-openbare klas PiedraPapelTijeras {private gebruiker-gebruiker Computer private rekenaar-private int usuarioPuntos-private int computadoraPuntos-private int cantidadDeJuegos-private enum {Beweeg ROCA, papier, `n skêr - / * ** vergelyk hierdie spel met mekaar om te bepaal of dit is `n teken, `n wen of `n nederlaag *. ** * param otherMove skuif te vergelyk * @return 1 of dit skuif die ander klop, -1 teen hierdie skuif verloor `n * ander, 0 as die speel bind * / openbare int compareMoves (Skuif otherMove) {// Empateif (hierdie == otherMove) terugkeer 0-skakelaar (hierdie) {geval ROCK: terugkeer (otherMove == skêr 1: - ? 1) -case VRAESTEL: terugkeer (otherMove ROCK == 1: 1) -case skêr: terugkeer (otherMove == Paper 1: -1) -} // moet nooit bereik aquíreturn 0 -}} private klas Gebruiker {private-openbare inputScanner Skandeerder Gebruiker () {inputScanner = nuwe Skandeerder (System.in) -} openbare getMove Move () {// vra die usuarioSystem.out.print ("Klip, papier of skêr? ") - // Kry insette usuarioString usuarioInput = inputScanner.nextLine () - usuarioInput = usuarioInput.toUpperCase () - char firstLetter = usuarioInput.charAt (0) -As (firstLetter == `R` || firstLetter == `P `|| firstLetter ==` t `) {// User het `n válidoswitch data (firstLetter) aangegaan {case` R `omdraai Move.ROCA-geval` P `omdraai Move.PAPEL-geval` T `: terugkeer Move .TIJERAS -}} // Gebruiker het nie `n geldige data ingevoer nie. Versoek again.return getMove () -} openbare boolean playAgain () {System.out.print ("Wil jy weer speel? ") -string usuarioInput = inputScanner.nextLine () - usuarioInput = usuarioInput.toUpperCase () - terugkeer usuarioInput.charAt (0) == `S` -}} private klas Computer {openbare getMove Move () {Move [] Moves = Move .values () - Nut Nut = nuwe Random () - int indeks = random.nextInt (moves.length) beweeg -RETURN [indeks] -}} openbare PiedraPapelTijeras () {gebruiker = nuwe gebruiker () - = nuwe rekenaar rekenaar ( ) -userPoint = 0-computerPoint = 0-aantal speletjies = 0-} publieke void startGame () {System.out.println ("ROCK, PAPER, SCISSORS!") - / Kry bewegingsMove userMove = user.getMove () - Skuif computerMove = computer.getMove () - System.out.println ()" nJy het gespeel " + userMove + ".") -Systeem.out.println ("Rekenaar gespeel " + rekenaarmove + ". n") - // Vergelyk speel en bepaal winnerint compareMoves = userMove.compareMoves (computerMove) -wisselaar (vergelyk beweeg) {geval 0: // EmpateSystem.out.println ("Trek!") -break-case 1: // Win User System.out.println (userMove + " jy klop " + rekenaarmove + ". Jy het gewen!") -gebruikersPunte ++ - breekpos -1: // Win Computer System.out.println (computerMove + " jy klop " + userMove + ". Jy het verloor") -computadoraPuntos ++ - ++ cantidadDeJuegos deurbraak} - // Prompt gebruiker play nuevamenteif (usuario.playAgain ()) {System.out.println () - startGame () -} anders {printGameStats () -}} / *** Druk die statistieke van die spel af. Berekening van `n das as ½ * wen-wen persentasie. * / Private leemte printGameStats ()% 6s private leemte printDashes (int numberOfDashes) {vir (int i = 0- i < numberOfDashes- i ++) {System.out.print ("-") -)} publieke statiese leegte hoof (String [] args) {PaperPaperSmile game = newPaperStone Stone () - game.startGame () -}}
Deel op sosiale netwerke:
Verwante
- Hoe om te kodeer in Base64 met Java
- Hoe om jou eerste Java-program te skryf
- Hoe om `n Java-program te skryf met twee klasse met behulp van Eclipse
- Hoe om `n grafiese koppelvlak van rooster in Java te maak
- Hoe om `n metode in Java te bel
- Hoe om `n eenvoudige papier geweer te maak
- Hoe om te wen in klip, papier of skêr
- Hoe om `n munt te laat verdwyn
- Hoe om `n vierkant met `n vel papier te maak
- Hoe om `n papier notaboek te maak
- Hoe speel `spook in die begraafplaas `
- Hoe om klip, papier, skêr, hagedis, spock te speel
- Hoe om klip, papier of skêr te speel
- Hoe om sardientjies te speel
- Hoe om `n skêr te maak
- Hoe om `n goeie paar naaldwerk skêr te kies
- Hoe om papier te sny sonder om `n skêr te gebruik
- Hoe om `n reguit lyn te sny
- Hoe Strip Oorlog speel
- Hoe om `n veranderlike in Java te skep
- Hoe om `n tornado in Minecraft te maak