dmylogi.com

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.

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 skuifom 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">
    Prent titel Screen Shot 2013 06 23 om 2.27.50 AM.jpg
    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 jou eerste Java-program te skryfHoe om jou eerste Java-program te skryf
    Hoe om `n Java-program te skryf met twee klasse met behulp van EclipseHoe om `n Java-program te skryf met twee klasse met behulp van Eclipse
    Hoe om `n grafiese koppelvlak van rooster in Java te maakHoe om `n grafiese koppelvlak van rooster in Java te maak
    Hoe om `n metode in Java te belHoe om `n metode in Java te bel
    Hoe om `n eenvoudige papier geweer te maakHoe om `n eenvoudige papier geweer te maak
    Hoe om te wen in klip, papier of skêrHoe om te wen in klip, papier of skêr
    Hoe om `n munt te laat verdwynHoe om `n munt te laat verdwyn
    Hoe om `n vierkant met `n vel papier te maakHoe om `n vierkant met `n vel papier te maak
    Hoe om `n papier notaboek te maakHoe om `n papier notaboek te maak
    Hoe speel `spook in die begraafplaas `Hoe speel `spook in die begraafplaas `
    » » Hoe om `n klip-, papier- en skêrspel in Java te maak
    © 2024 dmylogi.com