Sådan laver du en sten-, papir- og sakse spil i Java

Stenen, papir og sakse er et håndspil, der spilles af to personer. De to mennesker skal sige "sten, papir og sakse" på samme tid og dernæst danne en af ​​disse tre genstande med en hånd udstrakt. Vinderen er bestemt afhængigt af hvad hver enkelt valgte. Saksene vandt fra papiret, som vinder fra stenen, som vinder fra saks. Hvis begge spillere vælger det samme, bliver resultatet et slips. Her vil vi skrive et simpelt program i Java, der simulerer dette spil, så brugeren er en spiller og computeren er den anden.

trin

  1. 1
    Opret hovedklassen og kalder den PedraPapelTesoura. Dette bliver klassen hvor du vil kode for spillet. Du kan give det et andet navn, som spil eller Main. Erklære den vigtigste metode og bygherrer.

    offentlig klasse PedraPapelTesoura {offentlig PedraPapelTesoura () {} offentlig statisk tomrum hoved (String [] args) {}}
  2. 2
    Opret en opgørelse for håndbevægelser (sten, papir eller saks). Vi kunne bruge strenge til dette, men opskrivning giver os mulighed for at foruddefinere vores konstanter, hvilket betyder, at dette er en bedre tilgang. Vi vil ringe til vores flytte, med værdierne STONE, PAPIR, og SHEAR.

    privat flytte {STONE, PAPER, SCISSORS}
  3. 3
    Opret to private klasser Bruger og computer. Disse klasser vil repræsentere vores spillere i spillet. Du kan også vælge at forlade disse offentlige klasser. Klassen Bruger vil være den, der vil bede brugeren om at vælge mellem sten, papir og sakse, så er det nødvendigt at lave en metode getMove (). Klassen computer Du skal også bruge en metode getMove () så han også kan vælge. Vi vil efterlade disse metoder kontrolleret og implementere dem senere. Klassen Bruger Du skal bruge en konstruktør, der opretter objektet scanner at modtage brugerindgangen. Vi vil forlade scanner som et privat felt for brugeren og derefter starte det i konstruktøren. Hvordan bruger vi klassen scanner, Du skal importere den i begyndelsen af ​​koden. Klassen computer kræver ikke en konstruktør, så vi behøver ikke at skrive en. Vi kan initialisere et objekt computer gennem den kaldende standardkonstruktor. I øjeblikket er vores klasse PedraPapelTesoura ser sådan ud:

    import java.util.Scanner offentlig-privat klasse PedraPapelTesoura {enum {Flyt sten, papir, saks, privat klasse} {Bruger privat-offentligt inputScanner Scanner Bruger () {inputScanner = ny scanner (System.in) -} offentlig getMove Move () {// TODO: gennemføre denne methodreturn null -}} privat klasse Computer {public getMove Flyt () {// TODO: gennemføre denne methodreturn null -}} offentlig PedraPapelTesoura () {} public static void main (String [] args) { }}
  4. 4
    Skriv metoden getMove () for klassen computer. Denne metode vil returnere et tilfældigt valg. Vi kan have en vektor, der opregner flytte ved hjælp af metoden værdier (): Move.values ​​(). For at vælge et tilfældigt valg skal vi generere et tilfældigt tal mellem 0 og størrelsen af ​​vores vektor af værdier. For at gøre dette skal du bruge nextInt () af klassen Tilfældig, som også skal importeres fra java.util. Efter generering af det tilfældige heltal kan vi vende tilbage til flytte som er i den position, der svarer til dette nummer.

    offentlig getMove Move () {Move [] = Move.values ​​valg () - Random Random Random = nye () - Random.nextInt int index = (moves.length) -Vend valg [index] -}
  5. 5
    Skriv metoden getMove () for klassen Bruger. Denne metode vil returnere et valg, som brugeren valgte. Vi venter på, at brugeren vælger "sten", "papir" eller "saks". Først skal vi bede om en adgang til brugeren: System.out.print ("Stone, papir eller saks?"). Brug derefter nextLine () af objektet scanner at få brugerens input som en streng. Vi skal nu kontrollere, at brugeren har lavet et gyldigt valg, men vi kan være fleksible, hvis han har stavet det forkerte ord. Så vi kan kun kontrollere de første to bogstaver af brugerindgangen, "PE" til sten, "PA" til papir eller "TE" til saks. Det er ligegyldigt, om ordet er stort eller lille, fordi vi først vil bruge metoden toUpperCase () af klassen snor at konvertere alle bogstaverne i posten til store bogstaver. Hvis brugeren ikke har indtastet den rigtige indstilling, bliver de bedt om igen. Derefter vil vi, afhængigt af input, returnere den valgte håndbevægelse.

    offentlig getMove Flyt () {// Spørg usuárioSystem.out.print ( "Rock, papir, saks?") - // Kom entradaString userinput inputScanner.nextLine = () - userinput userInput.toUpperCase = () - char = primeiraLetter userInput.charAt (0) -char secondLetter = userInput.charAt (1) -if (firstLetter == `P` (secondFile == `E` || secondFile == `A`) || firstLetter == `t`) {// Brugeren indtastede et input válidaswitch (PrimeiraLetra) { `P`: if (segundaLetra == `E`) {return Move.PEDRA-} else {} tilfælde tilbagevenden Move.PAPEL- `T`: Return Move.TOSOURSE -}} // Brugeren indtaste ikke en gyldig post, prøv igen.return getMove () -}
  6. 6
    Skriv en metode at spilleNy () for klassen Bruger. Brugeren skal kunne vælge at spille spillet så mange gange, som han ønsker. For at afgøre, om brugeren ønsker at afspille, skal du skrive en metode playAgain () som returnerer en boolesk variabel, der vil fortælle om brugeren ønsker at spille igen eller ej. I denne metode vil vi bruge scanner som allerede er initialiseret før i konstruktøren for at få en "ja" eller en "nej" bruger. Vi kontrollerer kun, om det første bogstav er `S` for at bestemme, om brugeren ønsker at spille igen. Enhver anden post betyder, at brugeren ikke længere ønsker at spille.

    offentlige boolean playAgain () {System.out.print ( "Du ønsker at spille igen?") -String userinput inputScanner.nextLine = () - userinput userInput.toUpperCase = () - returnerer userInput.charAt (0) == `S` -}
  7. 7
    Deltag i klasserne Bruger og computer i klassen PedraPapelTesoura. Nu da vi er færdige med at skrive disse to klasser, kan vi fokusere på selve spillet. Opret private felter til klassen Bruger og for computer i klassen PedraPapelTesoura. Vi skal bruge disse felter for at få adgang til metoderne getMove () når vi spiller I Costr PedraPapelTesoura, initialiser disse felter. Du skal også gemme partituret i felterne userScore og computerScore, som skal initialiseres til 0 i konstruktøren. Vi skal også spare antallet af spil, der spilles, hvilket også starter ved 0.

    privat Bruger brugervenligt privat computer computer-privat int userScore-privat int computerScore-privat int numberOfGames-offentlige PedraPapelTesoura () {user = brugernavn () - computer = ny computer () - userScore = 0-computerScore = 0-numberOfGames = 0 -}
  8. 8
    Forlæng enummen flytte at inddrage en metode, der fortæller os, hvilken vindende bevægelse i hvert enkelt tilfælde. Vi skal skrive en metode compareMoves () som vil returnere 0, hvis valgene er de samme, 1 hvis det nuværende valg er vinderen og -1 hvis det er taberen. Dette vil være meget nyttigt for at bestemme vinderen af ​​spillet. For at implementere denne metode skal vi først returnere 0, hvis valgene er de samme, hvilket resulterer i et slips. Så vi skal lave en switch for at returnere 1 eller -1.



    privat enum {Move STONE, papir, saks -. / *** Sammenlign dette valg med den anden for at afgøre, hvem der vandt eller en uafgjort *** * @param otherMove valg, der skal sammenlignes * © retur 1, hvis den nuværende valg af en anden sejr , og -1 hvis det taber. 0 vil blive returneret i tilfælde af uafgjort ** / offentlige int compareMoves (Move otherMove) {// Tieif (dette == otherMove) tilbagevenden 0-kontakten (dette) {case STONE: return (otherMove == SCISSORS 1:.? - 1) -Case PAPER: return (otherMove STONE == 1: -1) -Case FORSKYDNINGSSTABILITET: return (otherMove == 1 PAPIR :? -1) -}}} returnere 0-
  9. 9
    Opret en metode startspil () i klassen PedraPapelTesoura. Det vil starte og køre spillet. Start med at tilføje en enkel System.out.println.

    public void startGame () {System.out.println ("STONE, PAPER, SCISSOR!") -}
  10. 10
    Få bevægelser af brugeren og computeren. I metoden startspil (), brug metoderne getMove () af klassen Bruger og klasse computer for at få bevægelser af brugeren og computeren.

    Flytter = userMove user.getMove () - Flyt computerMove = computer.getMove () - System.out.println ( " nDu valgt" userMove + + "") - System.out.println ( "Computeren har valgt" + computerMove + ". n") -
  11. 11
    Sammenlign de to træk for at bestemme hvem der vandt. Brug metode compareMoves () fra enum flytte at afgøre, om brugeren har vundet eller ej. Hvis han er udløbet, øg hans score med 1, ellers øge computerscore. I tilfælde af et slips må du ikke øge nogen af ​​scorerne. Derefter øges antallet af spil med 1.

    int = compareMoves userMove.compareMoves (computerMove) -switch (compareMoves) {case 0: // TieSystem.out.println ( "Uafgjort") - break-tilfælde 1: // winsSystem.out.println Bruger (userMove + "vinder .! af "+ + computerMove" Du vandt ") - userScore ++ - break-tilfælde -1: // winsSystem.out.println Computer (computerMove +" beats "+ + userMove" Du tabte ") - computerScore ++ - pause .. -} numberOfGames ++ -
  12. 12
    Spørg afspilleren, hvis han vil spille igen. Hvis ja, ring til metoden startspil () igen. Ellers skal du ringe til metoden printGameStats () så han kan vise spillet statistik. Vi vil vise denne metode i næste trin.

    hvis (user.playAgain ()) {System.out.println () - startGame () -} andet {printGameStats () -}
  13. 13
    Skriv metoden printGameStats (). Denne metode viser statistikkerne i spillet: antal gevinster, tab, træk, antal udførte spil og procentdel af sejren hos brugeren. Denne procentdel beregnes som: (antal sejre + (antal bånd / 2)) / (antal spil spillet). Denne metode bruger System.out.printf at udskrive teksten på skærmen.

    private void printGameStats ()% 12s 
  14. 14
    Start spillet i hovedklassen. I den initialiserer du en forekomst af klassen PedraPapelTesoura og kalder metoden startspil ().

    public static void main (String [] args) {PedraPapelTesoura = nyt spil PedraPapelTesoura () - game.startGame () -}
  15. Billede med titlen Screen Shot 2013 06 23 kl. 2.27.50 AM.jpg
    15
    Test dit spil. Nu hvor du har gjort alt for at lave et spil af sten, papir og sakse, er det tid til at kompilere og afprøve alt!

Prøveprogram

java.util.Random import-import java.util.Scanner-public class Bruger {privat PedraPapelTesoura brugervenlige privat computer computer-privat int userScore-privat int computerScore-private int numberOfGames-privat enum {Move STEN, PAPIR, saks - / * ** Sammenlign dette valg med den anden for at afgøre, hvem der vandt eller en uafgjort. *** * @param otherMove valg, der skal sammenlignes * © retur 1, hvis den nuværende valg for at vinde en anden, og -1 hvis hun taber. 0 vil blive returneret i tilfælde af uafgjort ** / offentlige int compareMoves (Move otherMove) {// Empateif (dette == otherMove) tilbagevenden 0-kontakten (dette) {case STONE: return (otherMove == SCISSORS 1:.? - 1) -Case PAPER: return (otherMove STONE == 1: -1) -Case FORSKYDNINGSSTABILITET: return (otherMove == 1 PAPIR :? -1) -} tilbagevenden 0 -}} privat klasse Brugeren {private og den offentlige Scanner inputScanner // Få brugerSystem.out.print ("Sten, papir eller sakse?") - // Få brugerindgang String userInput = inputScanner.nextLine () - = userinput userInput.toUpperCase () - = userInput.charAt firstLetter char (0) -hvis (primeiraLetter == `P` (secondFile == `E` || secondFile == `A`) || firstLetter == `t`) {// Brugeren indtastede et input válidaswitch (PrimeiraLetra) { `P`: if (segundaLetra == `E`) {return Move.PEDRA-} else {} tilfælde tilbagevenden Move.PAPEL- `T`: returnere Move.TESOURA -}} // brugeren har ikke indtaste en gyldig indgang, så prøv novamentereturn getMove () -} public boolean playAgain () {System.out.print ( "Du ønsker at spille igen?") -String userinput = inputScanner.nextLine () - = userinput userInput.toUpperCase () - userInput.charAt returløb (0) == `S` -}} privat klasse Computer {public getMove Move () {Move [] = bevæger Move.values ​​( ) œ RANDOM random = new Random () - int index = Random.nextInt (moves.length) -Vend bevæger [index] -}} public PedraPapelTesoura () {user = ny bruger () - computer = ny computer () - userScore = 0 = 0-computerScore-numberOfGames = 0- startGame} public void () {System.out.println ( "Rock, papir, saks") - // Hent movimentosMove userMove = user.getMove () - Flyt = computerMove computer.getMove () - System.out.println ( " nDu spillede" userMove + + "") - System.out.pri ntln ( " n" "Computer spillede" + computerMove +) - // sammenligner og bestemmer bevægelserne vencedorint compareMoves = userMove.compareMoves (computerMove) -switch (compareMoves) {case 0: // EmpateSystem.out.println ( "Draw!") - pause 1: // Bruger winsSystem.out.println (userMove + "vinder fra" + computerMove + ". ! Du vandt ") - userScore ++ - break-tilfælde -1: // winsSystem.out.println Computer (computerMove +" beats "+ userMove +" du tabte ") - computerScore ++ - ++ numberOfGames break} - // Spørgsmål .. brugeren, hvis de ønsker at spille novamenteif (user.playAgain ()) {System.out.println () - startGame () -} else {printGameStats () -}.} / *** viser statistikkerne for spillet betragter trækker som en win 1/2 * for at angive den procentdel af sejre. * / private void printGameStats ()% 14s printDashes private void (int numberOfDashes) {for (int i = 0- i < numberOfDashes- i++) {System.out.print(";")-}}public static void main(String[] args) {PedraPapelTesoura game = new PedraPapelTesoura()-game.startGame()-}}
Del på sociale netværk:

Relaterede
© 2024 HodTari.com