Hoe een spel te schrijven `steen, schaar, papier` op java

"Steen, schaar, papier" - dit is een spel "op de vingers" voor twee. Spelers zeggen "steen, schaar, papier" en naar voren geworpen, vormen een van de drie figuren (steen, schaar of papier). De winnaar wordt als volgt bepaald: schaar beat papier, papier verslaat een steen, steen beats schaar. Als beide spelers hetzelfde cijfer laten zien, wordt het als een gelijkspel beschouwd. We zullen een eenvoudig spel op Java schrijven, dat "steen, schaar, papier" met een computer zal spelen.

Stappen

een. Maak een basisklasse en noem het Steen Papier Schaar. In deze klas zullen we het spel beschrijven. Je kunt het bijvoorbeeld anders noemen Spel of Voornaamst. Schrijf een ontwerperadvertenties en de hoofdmethode.

Public Class Rockpaperscissors {Public Rockpaperscissors () {} Public Standing Void Main (String [] Args) {}}
  • 2. Maak een lijst (ENUM) om mogelijke bewegingen (steen, schaar, papier) te beschrijven. We kunnen stralen instellen, maar de lijst stelt ons in staat de constante voor te staan, dus het gebruik van ENUM is beter. Laten we onze vermelding bellen Beweging En zet de betekenissenSteen, Papieren Schaar.

    Private Enum Move {rock, papier, schaar}
  • 3. Maak twee gesloten klasse (Private) klasse (Keyword) Gebruiker en Computer. Deze klassen vertegenwoordigen spelers. Je kunt deze klassen ook open maken (openbaar trefwoord). KlasGebruiker Zal bij de gebruiker vragen, wat het doet - steen, schaar of papier - dus we moeten een methode schrijven Getmove (). KlasComputer moet ook een methode hebbenGetmove (), Zodat we een computer kunnen krijgen. Tot nu toe zullen we deze methoden eenvoudig verklaren en zullen de implementatie later schrijven. Klas Gebruiker Moet een constructeur hebben waarin het object is geïnitialiseerd Scanner, die gebruikersinvoer zal lezen. VerklarenScanner Gesloten lid van Class-gegevens Gebruiker en initialiseer het in de ontwerper. Omdat we de klas gaan gebruiken Scanner, We moeten het verbinden met een sleutelwoord Importeren . Klas Computer Designer is niet nodig, dus we zullen het niet schrijven - bij het initialiseren van het object Computer We zullen eenvoudig de standaardontwerper bellen. Hier is de klas Steen Papier Schaar Kijkt nu:

    Import java.Util.Scanner-Public Class Rockpaperscissors {Private Enum Move {Rock, Paper, Scissors} Private Class-gebruiker {Private Scanner InputScanner-Public Gebruiker () {InputScanner = Nieuwe Scanner (systeem.In) -} Public Move GetMove () {// TODO: implementatie van de METUNL NULL -}} Privéklasse Computer {Public Move GetMove () {Public Move GetMove () {// TODO: implementatie van de METUNT NULL -}} Openbare rockpaperscissors () {} openbare statische void hoofd (string [] args) {}}
  • 4. Schrijf de implementatie van de methode Getmove () Voor de les Computer. Deze methode zal willekeurige waarde retourneren Beweging.We kunnen een reeks waarden krijgen Beweging Een methode bellen Waarden () zoals dit: Beweging.Waarden (). Om willekeurige betekenis te kiezen Beweging Vanuit deze array moeten we een willekeurige index genereren tussen 0 en het aantal arrayelement. Om dit te doen, belt u de methodeVolgendeint () klasWillekeurig , Die we verbinden, dus:Import java.Util.Willekeurig. Na een willekeurige index ontvangen, zullen we de waarde terugbetalen Beweging Met deze index in onze array.

    Public Move GetMove () {verplaatsen [] Moves = Move.Waarden () - willekeurig willekeurig = nieuw willekeurig () - int index = willekeurig.Nextint (bewegingen.Lengte) -Return Moves [Index] -}
  • vijf. Schrijf de implementatie van de methode Getmove () Voor de les Gebruiker. Deze methode retourneert de waarde Beweging Geschikte gebruikersinvoer. De gebruiker kan invoeren "een steen", "schaar", of "papier". Trek eerst een bericht in: Systeem.Uit.Print ("Steen, schaar of papier?"). Vervolgens de methode gebruiken Sluitlijn () Object Scanner, We krijgen de gebruikersinvoer in de vorm van een string. Nu moet u de juistheid van de gebruiker invoeren. We zullen echter geen aandacht besteden aan typefouten en eenvoudig de eerste letter "K", "H" of "B". We zullen ook niet letten op het register van brieven, omdat we van tevoren de methode zullen bellen Touppercase () klas Draad, Bij het invoeren van de gebruiker naar het bovenregister. Als de gebruiker zelfs geen corrigeerde keuze heeft ingevoerd, verzoek ik de verhuizing opnieuw. Afhankelijk van de ingang van de gebruiker retourneert onze methode de bijbehorende waarde Beweging.

    Public Move GetMove () {// Trek een verzoek in om in te voeren.Uit.Print ("Steen, schaar of papier? ") - // Lees de invoer van gebruikersstring userinput = InputScanner.NEUZESTELLING () - User Input = User Input.Touppercase () - Char Firstletter = User Input.Charat (0) -Als (Firstletter == `K` || Firstletter == `N` || Firstletter == `B`) {// Installatie van de corrigeerschakelaar (Firstletter) {Case `K`: Return Move.Rock-case `H`: Return Move.Paper-Case `B`: Return Move.Schaar -}} // onjuist. Breng een verzoek om opnieuw in te gaan.Retourneer GetMove () -}
  • 6. Schrijf de implementatie van de methode Speel opnieuw () klas Gebruiker. De gebruiker moet opnieuw en opnieuw kunnen spelen. Om te bepalen of de gebruiker opnieuw wil spelen, schrijf de methode Speel opnieuw (), Wat de waarde van het type bool en, dus het spel zal retourneren of de gebruiker opnieuw wil spelen. In deze methode gebruiken we het object Scanner , die we in de ontwerper hebben geïnitialiseerd om te krijgen"Ja" of"Nee" Van de gebruiker. We controleren gewoon de eerste letter, als u, dan wil de gebruiker opnieuw spelen, een andere letter zal betekenen "Nee".

    Public Boolean PlayageAIN () {systeem.Uit.Print ("Wil opnieuw spelen? ") -STRING UserInput = InputScanner.NEUZESTELLING () - User Input = User Input.Touppercase () - Return-userInput.Charat (0) == `d`-}
  • 7. Klassencode Gebruiker en klasse Computer in de klas Steen Papier Schaar. Schrijfcode voor klassen Gebruiker en Computer, We kunnen het spel zelf doen. Kondigen klassen aan Gebruiker en Computer Gesloten klasgegevens Steen Papier Schaar. We zullen naar hen verwijzen, waardoor een methode wordt veroorzaakt Getmove (), om spelers te krijgen. Initialiseer ze in een klasseontwerper Steen Papier Schaar. We moeten ook een account opslaan. Aanpassen Gebruikerscore en Computerscore, Linitiase ze nul. En maak tot slot een gegevensveld voor het opslaan van het aantal games, initialiseer het ook met nul.

    PRIVATEER GEBRUIKER User-Private Computer Computer-Particuliere Int GebruikersCore-Private Int Computerscore-Private Int Pumberofgames-Public Rockpaperscissors () {user = Nieuwe gebruiker () - Computer = Nieuwe computer () - GebruikersCore = 0-computerscore = 0-nummerOFGAMES = 0 -}
  • acht. Volledige lijst Beweging methode die bewegingen vergelijkt en de winnaar bepaalt. Wij handcode voor methode Vergelijken () die 0 retourneert als de bewegingen hetzelfde zijn, 1 - als de huidige loopt de andere en -1 - als een andere beweging de stroom verslaat. De stroomloop wordt getoond door de deze aanwijzer en de andere wordt verzonden in de parameter van de andere move. Het is handig om de winnaar te bepalen. Eerst schrijven we de code die een draw- en terugkerende 0 definiëren en de schakelaarinstructie schrijven om de winnaar te bepalen.

    Private Enum Move {rock, papier, schaar - / *** Vergelijkt de huidige beweging met verzonden in de parameter van andere move en bepaalt * overwinning, nederlaag of teken.** @param andereMOVE * De cursus waarmee de stroom * @return 1 wordt vergeleken als de huidige beweging de andere slaat, -1 als een andere beweging de stroom verslaat, * 0 in het geval van een gelijkspel * / public-int vergelijken AndereMOVE) {// Draw == OtherMove) Return 0-Switch (this) {Case Rock: Return (andereMove == schaar ? 1: -1) - Case Paper: Return (andereMove == Rock ? 1: -1) -Case schaar: Return (andereMOVE == PAPIER ? 1: -1) -} // Deze code moet nooit worden uitgevoerd 0-}}
  • negen. Kondig de methode aan Start het spel () in de klas Steen Papier Schaar. In deze methode zal er een spel zijn. Begin met de methode te bellen Systeem.Uit.Println.

    Public Void StartGame () {System.Uit.Println ("STEEN PAPIER SCHAAR!") -}
  • 10. Krijg computerstreken en gebruiker. In de methode Start het spel () Telefoongesprek Getmove () klassen Gebruiker en Computer , om hun bewegingen te krijgen.

    Verplaats Usermove = gebruiker.Getmove () - Move Computermove = Computer.Getmove () - Systeem.Uit.Println (" Nuta-beroerte" + User-MOVE + ".") -Systeem.Uit.Println ("Computer loopt" + Computermove + ". N")-
  • elf. Vergelijk de loop van de computer en de beweging van de speler om te bepalen wie won. Bel de methode Vergelijken () vermelding Beweging, Om te bepalen of de gebruiker won. Zo ja, verhoogt u zijn account op 1. Zo niet, verhoog het account van de computer. In het geval van een gelijkspel blijft de rekening hetzelfde. Verhoog daarna het aantal games dat wordt gespeeld door 1.

    INT CERIFICUBES = User MOVE.Vergelijken (vergelijken) {Case 0: // DrawSystem.Uit.Println ("Tekenen!") -Break-koffer 1: // versloeg het spelersysteem.Uit.Println (User MOVE + " Beats " + Computermove + ". Jij hebt gewonnen!") -USerserscore ++ - Break-case -1: // versloeg het computersysteem.Uit.Println (computermove + " Beats " + User-MOVE + ". Je bent verloren.") -Computerscore ++ - Break-} Numberofgames++-
  • 12. Vraag de gebruiker of hij opnieuw wil spelen. Zo ja, bel de methode Start het spel () nog een keer. Zo niet, bel de methode Printgamestats (), die de statistieken van het spel brengen. We zullen de implementatie in de volgende stap schrijven.

    if (gebruiker.Playagain ()) {systeem.Uit.Println () - StartGame () -} else {printgamestats () -}
  • 13. Schrijf de implementatie van de methode Printgamestats (). Deze methode zal de statistieken van het spel intrekken: het aantal overwinningen, laesies, trekt, het aantal gespeelde spellen en het percentage van de overwinningen van de speler. Het percentage gewonnen games wordt als volgt beschouwd: (aantal overwinningen + (aantal draws / 2)) / (aantal gespeelde spellen). Deze methode gebruikt Systeem.Uit.Printf Voor opgemaakte tekstuitvoer.

    Private void printgamestats () ") -PrintDashes (10) -systeem.Uit.Print ("+") -PrintDashes (10) -systeem.Uit.Print ("+") -PrintDashes (10) -systeem.Uit.Print ("+") -PrintDashes (16) -systeem.Uit.Print ("+") -PrintDashes (18) -systeem.Uit.Println ("
  • veertien. Start het spel. Voornamelijk initialiseer het object Steen Papier Schaar en bel IT-methode Start het spel ().

    Public Static Void Main (String [] Args) {Rockpaperscissors Game = New Rockpaperscissors () - Game.Start het spel () -}
  • Titel afbeelding Screen Shot 2013 06 23 op 2.27.50 AM.jpg
    vijftien. Test het spel. Nu dat al het werk achter is, is het tijd om ons spel te compileren en te testen!
  • Voorbeeldprogramma

    Import java.Util.Random-Import Java.Util.Scanner-openbare klasse RockpaperCissors {Private User User-Private Computer Computer-Particuliere Int GebruikersCore-Private Int Computerscore-Particuliere Int Numberofgames-Private Enum Move {Rock, Paper, Scissors - / *** Vergelijkt de huidige beweging met verzonden in de parameter van andere MOVE en bepaalt * overwinning, nederlaag of tekenen.** @param andereMOVE * De cursus waarmee de stroom * @return 1 wordt vergeleken als de huidige beweging de andere slaat, -1 als een andere beweging de stroom verslaat, * 0 in het geval van een gelijkspel * / public-int vergelijken AndereMOVE) {// Draw == OtherMove) Return 0-Switch (this) {Case Rock: Return (andereMove == schaar ? 1: -1) - Case Paper: Return (andereMove == Rock ? 1: -1) -Case schaar: Return (andereMOVE == PAPIER ? 1: -1) -} // Deze code hoeft niet te worden uitgevoerd nooit /}} Private Class-gebruiker {Private Scanner InputScanner-Public Gebruiker () {InputScanner = Nieuwe Scanner (Systeem.In) -} Public Move GetMove () {// geeft een verzoek weer om in te voeren.Uit.Print ("Steen, schaar of papier? ") - // Lees de invoer van gebruikersstring userinput = InputScanner.NEUZESTELLING () - User Input = User Input.Touppercase () - Char Firstletter = User Input.Charat (0) -Als (Firstletter == `K` || Firstletter == `N` || Firstletter == `B`) {// Installatie van de corrigeerschakelaar (Firstletter) {Case `K`: Return Move.Rock-case `H`: Return Move.Paper-Case `B`: Return Move.Schaar -}} // onjuist. Breng een verzoek om opnieuw in te gaan.Retourneer GetMove () -} Public Boolean PlayageAIN () {systeem.Uit.Print ("Wil opnieuw spelen? ") -STRING UserInput = InputScanner.NEUZESTELLING () - User Input = User Input.Touppercase () - Return-userInput.Charat (0) == `Y` -}} Private Class Computer {Public Move GetMove () {MOVE [] MOVES = MOVE.Waarden () - willekeurig willekeurig = nieuw willekeurig () - int index = willekeurig.Nextint (bewegingen.Lengte) -Return Moves [Index] -}} Public Rockpaperscissors () {user = Nieuwe gebruiker () - Computer = Nieuwe computer () - GebruikersCore = 0-Computerscore = 0-nummerOFGAMES = 0-} Public Void StartGame () {systeem.Uit.Println ("STEEN PAPIER SCHAAR!") - // Move UserMove = gebruiker.Getmove () - Move Computermove = Computer.Getmove () - Systeem.Uit.Println (" Nuta-beroerte " + User-MOVE + ".") -Systeem.Uit.Println ("Computer loopt " + Computermove + ". N") - // Vergelijking van bewegingen en de definitie van de Winningint-comparissen = Gebruikersmove.Vergelijken (vergelijken) {Case 0: // DrawSystem.Uit.Println ("Binden!") -Break-koffer 1: // versloeg het spelersysteem.Uit.Println (User MOVE + " Beats " + Computermove + ". Jij hebt gewonnen!") -USerserscore ++ - Break-case -1: // versloeg het computersysteem.Uit.Println (computermove + " Beats " + User-MOVE + ". Je bent verloren.") -computerscore ++ - break-} Numberofgames ++ - // Wij bieden de gebruiker opnieuw af te spelen (gebruiker.Playagain ()) {systeem.Uit.Println () - StartGame () -} else {printgamestats () -}} / *** Conclusie van statistieken. Trekkingen worden in aanmerking genomen als halve diepten * bij het tellen van het percentage van de overwinningen.* / Private void printgamestats ()% 13.2F %% Private Void PrintDashes (INT PERMEROFDASHES) {voor (int i = 0- i < numberOfDashes- i++) {System.out.print("-")-}}public static void main(String[] args) {RockPaperScissors game = new RockPaperScissors()-game.startGame()-}}
    Deel in het sociale netwerk:
    Vergelijkbaar