emkiset.ru

Een steen-, papier- en scharengame maken in Java

Steen, papier en schaar is een set handen voor twee personen. Beide spelers moeten "steen, papier, schaar" zeggen en tegelijkertijd een van de drie objecten (steen, papier of schaar) vormen met een uitgestrekte hand. De winnaar wordt bepaald door de vorm van de handen. De schaar sloeg op het papier, het papier klopt de steen en de steen klopt de schaar. Als beide spelers dezelfde handformatie presenteren, wordt dit als gelijkspel beschouwd. We zullen een eenvoudig spel in Java schrijven om Stone, Paper, Scissors te simuleren, waarbij de ene speler de gebruiker is en de andere de computer.

stappen

1
Maak de hoofdklasse en noem hem PiedraPapelTijeras. Dit zal de klas zijn waarin we het spel zullen schrijven. Je kunt ervoor kiezen om het op een andere manier een naam te geven, zoals spel of hoofd-. Schrijf de methodeaangiften voor de constructor en voor de hoofdmethode.

public class StonePaperShoes {publicStonePaperScissors () {} public static void main (String [] args) {}}
  • 2
    Maak een opsomming voor handgebaren (steen, papier of schaar). We zouden kettingen kunnen gebruiken om steen, papier of schaar te vertegenwoordigen, maar een opsomming stelt ons in staat onze constanten vooraf te definiëren, wat betekent dat het gebruik van opsomming resulteert in een beter ontwerp. We zullen ons opsommingstype noemen verhuizing met de waarden ROCA, ROL, en SCISSORS.

    private enum Verplaats {ROCK, PAPER, SCISSORS}
  • 3
    Maak twee privélessen gebruiker en computer. Deze klassen vertegenwoordigen onze spelers in het spel. De klas gebruiker zal de klasse zijn die de gebruiker vraagt ​​te kiezen tussen rock, paper of scissors, dus we moeten een methode schrijven getMove (). De klas computer je moet ook een methode hebben getMove () zodat de computer ook kan bewegen. We plaatsen tijdelijke aanduidingen in deze methoden om ze later te implementeren. De klas gebruiker vereist een constructor om het object te configureren scanner welke de input van de gebruiker zal gebruiken. We zullen de scanner als een privéveld voor de gebruiker, en dan starten we het in de constructor. Hoe gebruiken we de klas? scanner, we moeten een importverklaring bovenaan onze code schrijven. De klas computer er is geen constructeur voor nodig, dus we hoeven er geen te schrijven - als we het object starten computer, we zullen gewoon de constructor standaard bellen. Dit is hoe onze klas er nu uitziet PiedraPapelTijeras:

    import java.util.Scanner-public class PiedraPapelTijeras enum {private Move {Roca, papier, schaar} private class gebruiker {publiek-private inputScanner scanner () {inputScanner = new Scanner (System.in) -} public getMove Move () {// `TODO: Implementeer deze métodoreturn null -}} private class Computer {public getMove Move () {// TODO: Implementeer deze métodoreturn null -}} public PiedraPapelTijeras () {} public static void main (String [] args) {}}
  • 4
    Schrijf de methode getMove () voor de klas computer. Deze methode retourneert a verhuizing willekeurig. We kunnen een reeks van de opsommingen van krijgen verhuizing de methode aanroepen waarden (): Move.values ​​(). Om een ​​willekeurige opsomming van te kiezen verhuizing in deze reeks waarden moeten we een willekeurige index genereren die een geheel getal tussen 0 en de lengte van onze reeks waarden is. Om dit te doen kunnen we de methode gebruiken nextInt () van de klas toevallig, waarvan we moeten importeren java.util. Na de willekeurige index te hebben verkregen, kunnen we de verhuizing voor die index van onze reeks waarden.

    public getMove Move () {Move [] Moves = Move.values ​​() - Random willekeurige = new Random () - int index = random.nextInt (moves.length) Verplaatst -Return [index] -}
  • 5
    Schrijf de methode getMove () voor de klas gebruiker. Deze methode retourneert a verhuizing overeenkomend met wat de gebruiker heeft ingevoerd. We gaan ervan uit dat de gebruiker zal schrijven rock, papier of schaar. Eerst moeten we een invoer voor de gebruiker aanvragen: System.out.print ("Rots, papier of schaar?"). Dan zullen we de methode gebruiken nextLine () van het object scanner om de invoer van de gebruiker als een string te nemen. Nu moeten we controleren of de gebruiker een geldige zet heeft ingevoerd, maar we kunnen tolerant zijn over de spelling. Dus we controleren alleen of de eerste letter die de gebruiker invoert, een is R (voor rock), a P (voor papier) of a T (voor een schaar), ongeacht of deze hoofdletters of kleine letters zijn, omdat we de methode zullen gebruiken toUpperCase () van de klas snaar om alle gebruikersvermeldingen te kapitaliseren. Als de gebruiker een onjuiste invoer invoert, zullen we hem vragen om opnieuw in te voeren. Afhankelijk van wat de gebruiker heeft ingevoerd, retourneren we vervolgens een overeenkomend stuk.

    openbaar Verplaats getMove () {// Vraag de gebruiker System.out.print ("Rots, papier of schaar? ") - // Get ingang usuarioString usuarioInput = inputScanner.nextLine () - usuarioInput = usuarioInput.toUpperCase () - char firstLetter = usuarioInput.charAt (0) -als (firstLetter == `R` || firstLetter == `P `|| firstLetter ==` t `) {// gebruiker een válidoswitch data (firstLetter) ingevoerd {case` R `: terug Move.ROCA-case` P `: terug Move.PAPEL-case` T `: return Move .TIJERAS -}} // gebruiker heeft niet ingevoerd een geldige gegevens. Request nuevamente.return getMove () -}


  • 6
    Schrijf een methode playAgain () voor de klas gebruiker. De gebruiker zou opnieuw en opnieuw moeten kunnen spelen. Om te bepalen of de gebruiker opnieuw wil spelen, moeten we een methode schrijven playAgain () die een Booleaanse waarde retourneert die aangeeft of de gebruiker heeft besloten opnieuw te spelen of niet. In deze methode gebruiken we de scanner dat we eerder in de constructor begonnen waren om een Ja of a Niet de gebruiker We zullen alleen controleren of de eerste letter een `S` is om te bepalen of de gebruiker opnieuw wil spelen. Elke andere invoer betekent dat de gebruiker niet opnieuw wil spelen.

    public boolean playAgain () {System.out.print ("Wil je nog een keer spelen? ") -String usuarioInput = inputScanner.nextLine () - usuarioInput = usuarioInput.toUpperCase () - terug usuarioInput.charAt (0) == `S`-}
  • 7
    Verbind de klassen gebruiker en computer samen in de klas PiedraPapelTijeras. Nu zijn we klaar met het schrijven van de lessen gebruiker en computer, We kunnen ons concentreren op het spel zelf. Maak privévelden voor klassen gebruiker en computer in de klas PiedraPapelTijeras. We moeten toegang krijgen tot deze velden om toegang te krijgen tot de methoden getMove () wanneer we spelen. In de constructor voor de klas PiedraPapelTijeras, Start deze velden. We moeten ook de punten in de velden bijhouden usuarioPuntos en computadoraPuntos, die we moeten starten bij 0 in de constructor. We moeten ook het aantal games bijhouden, dat ook een veld is gestart om 0.

    private gebruiker gebruiker-private Computer computer-private int usuarioPuntos-private int computadoraPuntos-private int cantidadDeJuegos-publieke PiedraPapelTijeras () {user = nieuwe User () - PC = new Computer () - usuarioPuntos = 0-computadoraPuntos = 0-cantidadDeJuegos = 0 -}
  • 8
    Verlengt de opsomming verhuizing om een ​​methode op te nemen die ons vertelt wie in elk geval zal winnen. We moeten een methode schrijven compareMoves () dat geeft 0 terug als de spelen hetzelfde zijn, 1 als het huidige spel de andere verslaat, en -1 als het huidige spel voor de ander verliest. Dit is handig om de winnaar van het spel te bepalen. Om deze methode te implementeren, zullen we eerst 0 retourneren als de spelen hetzelfde zijn, en daarom zullen we een gelijkspel hebben. Schrijf vervolgens een instructie switch om 1 of -1 te retourneren.




    Verplaats private enum {steen, papier, schaar - / *** Vergelijk dit spel met een ander spel met een gelijkspel, overwinning of nederlaag te bepalen ** * * @ param otherMove move te vergelijken * @ return 1 als hij deze stap te wint. een ander, -1 als dit spel verliest * de andere, 0 als het speelt gelijk * / public int compareMoves (bewegen otherMove) {// Empateif (dit == otherMove) return 0-schakelaar (dit) {case ROCK: return (? otherMove == SCISSORS 1: 1) -case PAPIER: return (? otherMove ROCK == 1: 1) -Case SCISSORS: return (otherMove == Paper 1: -1) -} // nooit zou moeten aankomen tot hier 0 0}}
  • 9
    Maak een methode startGame () in de klas PiedraPapelTijeras. Deze methode zal de ontwikkeling van het spel zijn. Begin met een simpele System.out.println in de methode.

    public void startGame () {System.out.println ("ROTS, PAPIER, SCHAAREN!") -}
  • 10
    Download de spelen van de gebruiker en de computer. In de methode startGame (), gebruik de methoden getMove () van de klas gebruiker en de klas computer om de spelen van de gebruiker en de computer te verkrijgen.

    Move userMove = user.getMove () - Move computerMove = computer.getMove () - System.out.println (" nJe hebt gespeeld " + userMove + ".") -System.out.println ("Computer gespeeld " + computer Verwijderen + ". n") -
  • 11
    Vergelijk de twee zetten en bepaal of de gebruiker of de computer heeft gewonnen. Gebruik de methode compareMoves () uit het enum verhuizingom te bepalen of de gebruiker heeft gewonnen of niet. Als de gebruiker heeft gewonnen, verhoog dan de score van de gebruiker met 1. Verlies de computer score met 1 als de gebruiker het niet meer doet. Als er een gelijkspel is, verhoog dan geen van de scores. Vergroot vervolgens het aantal spellen in één.

    int compareMoves = userMove.compareMoves (computerMove) -switch (compareMoves) {case 0: // EmpateSystem.out.println ("Trekken!") -breakcase 1: // Win User System.out.println (userMove + " je slaat " + computer Verwijderen + ". Je hebt gewonnen!") --userPoints ++ - break-case -1: // Win Computer System.out.println (computerMove + " je slaat " + userMove + ". Je bent verloren") -computerPoints ++ - break-} aantal games ++ -
  • 12
    Vraag de gebruiker of hij nog een keer wil spelen. Als de gebruiker opnieuw wil spelen, belt u opnieuw startGame (). Anders belt u printGameStats () die de statistieken van het spel zal afdrukken. We zullen deze methode in de volgende stap schrijven.

    if (user.playAgain ()) {System.out.println () - startGame () -} else {printGameStats () -}
  • 13
    Schrijf de methode printGameStats (). Deze methode toont de statistieken van het spel: aantal overwinningen, aantal verliezen, aantal trekkingen, aantal spellen en en percentage gebruikerswinsten. Het percentage gewonnen spellen wordt berekend door (# voctories + (# ties / 2)) / (# spellen). Deze methode gebruikt System.out.printf om opgemaakte tekst af te drukken.

    private void printGameStats ()% 6d 
  • 14
    Start het spel in de hoofdklasse. In de hoofdklasse initialiseert u een instantie van de klasse PiedraPapelTijeras en bel de methode startGame ().

    public static void main (String [] args) {PaperstoneScissors game = newPaperstoneScissors () - game.startGame () -}
  • Screen-Shot-06/23/2013-at-2.27.50-AM.jpg" class ="afbeelding lightbox">
    Titel afbeelding Screen Shot 2013 06 23 op 2.27.50 AM.jpg
    15
    Test je spel. Nu we ons uiterste best hebben gedaan om het spel van Stone, Paper, Scissors te schrijven, is het tijd om alles te compileren en te testen!
  • Voorbeeldprogramma

    import java.util.Random-import java.util.Scanner-public class PiedraPapelTijeras {private gebruiker-computer van de gebruiker private computer-private int usuarioPuntos-private int computadoraPuntos-private int cantidadDeJuegos-private enum {Move Roca, papier, schaar - / * ** Vergelijk dit spel met een ander om te bepalen of het een gelijkspel, een overwinning of * een nederlaag is. ** @param otherMove * spelen om te vergelijken * @return 1 als dit spel de andere verslaat, -1 is dit spel de voorkant kwijt a * andere, 0 als het speelt gelijk * / public int compareMoves (Move otherMove) {// Empateif (dit == otherMove) return 0-schakelaar (dit) {case ROCK: return (otherMove == schaar 1: - ? 1) Case-PAPIER: return (otherMove ROCK == 1: 1) -case SCISSORS: return (otherMove == Paper 1: -1) -} // mag nooit bereiken aquíreturn 0 -}} private klasse Gebruiker {private Scanner inputScanner-public User () {inputScanner = nieuwe Scanner (System.in) -} public Move getMove () {// Vraag het userSystem.out.print aan ("Rots, papier of schaar? ") - // Get ingang usuarioString usuarioInput = inputScanner.nextLine () - usuarioInput = usuarioInput.toUpperCase () - char firstLetter = usuarioInput.charAt (0) -als (firstLetter == `R` || firstLetter == `P `|| firstLetter ==` t `) {// gebruiker een válidoswitch data (firstLetter) ingevoerd {case` R `: terug Move.ROCA-case` P `: terug Move.PAPEL-case` T `: return Move .TIJERAS -}} // gebruiker heeft niet ingevoerd een geldige gegevens. Verzoek again.return getMove () -} public boolean playAgain () {System.out.print ("Wil je nog een keer spelen? ") -String usuarioInput = inputScanner.nextLine () - usuarioInput = usuarioInput.toUpperCase () - terug usuarioInput.charAt (0) == `S` -}} private class Computer {public getMove Move () {Move [] Moves = Move .values ​​() - Random willekeurige = new Random () - int index = random.nextInt (moves.length) Verplaatst -Return [index] -}} public PiedraPapelTijeras () {user = new gebruiker () - = new computer computer ( ) -userPoint = 0-computerPoint = 0-aantal games = 0-} public void startGame () {System.out.println ("ROTS, PAPIER, SCHAAREN!") - // Get movesMove userMove = user.getMove () - Verplaats computerMove = computer.getMove () - System.out.println (" nJe hebt gespeeld " + userMove + ".") -System.out.println ("Computer gespeeld " + computer Verwijderen + ". n") - // Vergelijk speelt en bepaal winnerint compareMoves = userMove.compareMoves (computerMove) -switch (compareMoves) {case 0: // EmpateSystem.out.println ("Trekken!") -breakcase 1: // Win User System.out.println (userMove + " je slaat " + computer Verwijderen + ". Je hebt gewonnen!") --userPoints ++ - break-case -1: // Win Computer System.out.println (computerMove + " je slaat " + userMove + ". Je bent verloren") -computadoraPuntos ++ - ++ cantidadDeJuegos break} - // Prompt gebruiker play nuevamenteif (usuario.playAgain ()) {System.out.println () - startGame () -} else {printGameStats () -}} / *** Print de statistieken van het spel. Bereken een gelijkspel als ½ overwinning in * het winnende percentage. * / Prive void printGameStats ()% 6s private void printDashes (int numberOfDashes) {for (int i = 0- i < numberOfDashes- i ++) {System.out.print ("-") -}} public static void main (String [] args) {PaperstoneScissors game = newPaperstoneScissors () - game.startGame () -}}
    Delen op sociale netwerken:

    Verwant
    Hoe maak je een kompas in MinecraftHoe maak je een kompas in Minecraft
    Hoe maak je een grafische interface van raster in JavaHoe maak je een grafische interface van raster in Java
    Hoe te winnen in steen, papier of schaarHoe te winnen in steen, papier of schaar
    Hoe maak je een papieren mesHoe maak je een papieren mes
    Hoe maak je een vierkant met een vel papierHoe maak je een vierkant met een vel papier
    Hoe maak je een papieren stropdasHoe maak je een papieren stropdas
    Hoe maak je een papieren notitieblokHoe maak je een papieren notitieblok
    Hoe een eenvoudig papieren wapen te makenHoe een eenvoudig papieren wapen te maken
    Hoe True American te spelenHoe True American te spelen
    Hoe de payana te spelenHoe de payana te spelen
    » » Een steen-, papier- en scharengame maken in Java
    © 2021 emkiset.ru