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
, Papier
en 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 () -}

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: