Rock, Paper, Scissors ist ein Handspiel, das von zwei Personen gespielt wird. Beide Menschen würden sagen "Stein, Papier, Schere" und dann gleichzeitig mit einer ausgestreckten Hand eines von drei Objekten (Stein, Papier oder Schere) bilden. Der Gewinner wird durch die Handformationen bestimmt. Schere schlägt Papier, Papier schlägt Rock und Rock schlägt Schere. Wenn beide Spieler die gleiche Handformation spielen, gilt dies als unentschieden. Wir werden ein einfaches Spiel in Java schreiben, um Rock, Paper, Scissors zu simulieren, wobei ein Spieler der Benutzer und der andere der Computer ist.
Schritte
- 1 Erstelle die Hauptklasse und rufe sie an
Schere, Stein, Papier
. Dies wird die Klasse sein, in der wir das Spiel schreiben werden. Sie können wählen, etwas anderes wie zu nennenSpiel
oderMain
. Schreiben Sie in Methodendeklarationen für den Konstruktor und die Hauptmethode.Öffentlichkeit Klasse Schere, Stein, Papier Öffentlichkeit Schere, Stein, Papier() Öffentlichkeit statisch Leere Main(Zeichenfolge[] Argumente)
- 2 Erstellen Sie eine Aufzählung für die Handgesten (Stein, Papier oder Schere). Wir könnten Strings verwenden, um Stein, Papier oder Schere darzustellen, aber eine Aufzählung erlaubt uns, unsere Konstanten vorzugeben, was bedeutet, dass die Verwendung der Aufzählung ein besseres Design ist. Wir werden unseren Enum-Typ nennen
Bewegung
mit den WertenROCK
,PAPIER
, undSCHERE
.Privatgelände enum Bewegung SCHERE, STEIN, PAPIER
- 3 Erstellen Sie zwei private Klassen
Benutzer
undComputer
. Diese Klassen repräsentieren unsere Spieler im Spiel. Sie können diese Klassen veröffentlichen. DasBenutzer
Die Klasse wird die Klasse sein, die den Benutzer entweder zu Stein, Papier oder Schere auffordert, also müssen wir eine schreibengetMove ()
Methode. DasComputer
Klasse muss auch eine habengetMove ()
Methode, damit der Computer auch einen Zug ausführen kann. Wir werden Platzhalter in diese Methoden einfügen und sie später implementieren. DasBenutzer
Die Klasse benötigt einen Konstruktor, der dieScanner
Objekt, um die Benutzereingabe aufzunehmen. Wir werden dieScanner
als privates Feld für den Benutzer und dann im Konstruktor initiieren. Da wir das verwendenScanner
Klasse, wir müssen eine Importanweisung dafür oben in unserem Code schreiben. DasComputer
Für die Klasse ist kein Konstruktor erforderlich. Daher müssen wir keinen Konstruktor erstellen. wenn wir das initiierenComputer
Objekt, wir werden nur den Standardkonstruktor aufrufen. Hier ist was unserSchere, Stein, Papier
Klasse sieht jetzt so aus:einführen java.util.Scanner; Öffentlichkeit Klasse Schere, Stein, Papier Privatgelände enum Bewegung SCHERE, STEIN, PAPIER Privatgelände Klasse Benutzer Privatgelände Scanner-EingabeScanner; Öffentlichkeit Benutzer() EingabeScanner = Neu Scanner(System.im); Öffentlichkeit Bewege getMove() // TODO: Implementiere diese Methode Rückkehr Null; Privatgelände Klasse Computer Öffentlichkeit Bewege getMove() // TODO: Implementiere diese Methode Rückkehr Null; Öffentlichkeit Schere, Stein, Papier() Öffentlichkeit statisch Leere Main(Zeichenfolge[] Argumente)
- 4 Schreiben Sie die
getMove ()
Methode für dieComputer
Klasse. Diese Methode wird eine zufällige zurückgegebenBewegung
. Wir können eine Reihe von bekommenBewegung
Aufzählungen durch Aufruf derWerte()
Methode:Move.values ()
. Um einen Zufall zu wählenBewegung
Aufzählung in diesem Werte-Array müssen wir einen zufälligen Index erzeugen, der eine Ganzzahl zwischen 0 und der Länge unseres Werte-Arrays ist. Um dies zu tun, können wir das verwendennextInt ()
Methode derZufällig
Klasse, aus der wir importieren müssenjava.util
. Nachdem wir den Zufallsindex erhalten haben, können wir denBewegung
dieses Index von unserem Werte-Array.Öffentlichkeit Bewege getMove() Bewegung[] bewegt sich = Bewegung.Werte(); Zufällig zufällig = Neu Zufällig(); int Index = zufällig.nextInt(bewegt sich.Länge); Rückkehr bewegt sich[Index];
- 5 Schreiben Sie die
getMove ()
Methode für dieBenutzer
Klasse. Diese Methode gibt a zurückBewegung
entsprechend was der Benutzer eingegeben hat. Wir werden erwarten, dass der Benutzer entweder "Rock", "Papier" oder "Schere" schreibt. Zuerst müssen wir den Benutzer zur Eingabe auffordern:System.out.print ("Stein, Papier oder Schere?")
. Dann benutze dienächste Zeile()
Methode derScanner
Objekt, um die Benutzereingabe als Zeichenfolge zu erhalten. Wir müssen nun überprüfen, ob der Benutzer einen gültigen Zug eingereicht hat, aber wir können nachsichtig sein, wenn der Benutzer ein Wort falsch geschrieben hat. Wir werden also nur prüfen, ob der erste Buchstabe der Benutzereingabe entweder "R" (für Rock), "P" (für Papier) oder "S" (für Schere) ist, und wir kümmern uns nicht um den Fall, weil Wir werden zuerst dietoUpperCase ()
Methode derZeichenfolge
Klasse, um die Benutzereingabestring in Großbuchstaben zu schreiben. Wenn der Benutzer keine remote korrekte Eingabe eingegeben hat, werden wir den Benutzer erneut auffordern. Dann werden wir, je nachdem, was der Benutzer eingegeben hat, einen entsprechenden Zug zurückgeben.Öffentlichkeit Bewege getMove() // Fordern Sie den Benutzer auf System.aus.drucken("Rock, Papier oder Schere?"); // Erhalte die Benutzereingabe Zeichenfolge Benutzereingabe = EingabeScanner.nächste Zeile(); Benutzereingabe = Benutzereingabe.toUpperCase(); verkohlen erster Brief = Benutzereingabe.charAt(0); ob (erster Brief == "R" || erster Brief == 'P' || erster Brief == "S") // Benutzer hat eine gültige Eingabe eingegeben Schalter (erster Brief) Fall "R": Rückkehr Bewegung.ROCK; Fall 'P': Rückkehr Bewegung.PAPIER; Fall "S": Rückkehr Bewegung.SCHERE; // Benutzer hat keine gültige Eingabe eingegeben. Aufforderung erneut. Rückkehr getMove();
- 6 Schreib ein
Spiel nochmal()
Methode für dieBenutzer
Klasse. Der Benutzer sollte das Spiel immer und immer wieder spielen können. Um zu bestimmen, ob der Benutzer erneut spielen möchte, müssen wir einen schreibenSpiel nochmal()
Methode, die einen booleschen Wert zurückgibt, der dem Spiel mitteilt, ob der Benutzer bestimmt hat, ob er erneut spielen möchte oder nicht. Bei dieser Methode verwenden wir dieScanner
die wir zuvor im Konstruktor initiiert hatten, um ein "Ja" oder ein "Nein" vom Benutzer zu erhalten. Wir werden nur prüfen, ob der erste Buchstabe "Y" ist, um zu bestimmen, ob der Benutzer erneut spielen möchte. Jede andere Eingabe bedeutet, dass der Benutzer nicht erneut spielen möchte.Öffentlichkeit boolesch Spiel nochmal() System.aus.drucken("Willst du wieder spielen?"); Zeichenfolge Benutzereingabe = EingabeScanner.nächste Zeile(); Benutzereingabe = Benutzereingabe.toUpperCase(); Rückkehr Benutzereingabe.charAt(0) == 'Y';
- 7 Verbinde die
Benutzer
undComputer
Klassen zusammen in derSchere, Stein, Papier
Klasse. Jetzt, wo wir mit dem Schreiben fertig sindBenutzer
undComputer
Klassen können wir uns darauf konzentrieren, an unserem eigentlichen Spiel zu arbeiten. Erstellen Sie private Felder für dieBenutzer
undComputer
Klassen in derSchere, Stein, Papier
Klasse. Wir müssen auf diese Felder zugreifen, um auf diegetMove ()
Methoden, wenn wir das Spiel spielen. Im Konstruktor für dieSchere, Stein, Papier
Klasse, initiiere diese Felder. Wir müssen auch den Punktestand im Auge behaltenBenutzerScore
undComputerScore
Felder, die wir im Konstruktor als 0 initiieren müssen. Wir müssen auch die Anzahl der Spiele im Auge behalten, was auch ein Feld ist, das als 0 initialisiert wird.Privatgelände Benutzer Benutzer; Privatgelände Computercomputer; Privatgelände int BenutzerScore; Privatgelände int ComputerScore; Privatgelände int Anzahl von Spielen; Öffentlichkeit Schere, Stein, Papier() Benutzer = Neu Benutzer(); Computer = Neu Computer(); BenutzerScore = 0; ComputerScore = 0; Anzahl von Spielen = 0;
- 8 Erweitere
Bewegung
enum, um eine Methode einzufügen, die uns sagt, welche Bewegung in jedem Fall gewinnt. Wir müssen ein schreibenvergleicheMoves ()
Methode, die 0 zurückgibt, wenn die Züge gleich sind, 1, wenn die aktuelle Bewegung die andere bewegt, und -1, wenn die aktuelle Bewegung die andere Bewegung verliert. Dies wird nützlich sein, um den Gewinner im Spiel zu bestimmen. Um diese Methode zu implementieren, geben wir zuerst 0 zurück, wenn die Züge gleich sind und daher haben wir ein Unentschieden. Dann schreibe eine switch-Anweisung für die Rückgabe von 1 oder -1.Privatgelände enum Bewegung SCHERE, STEIN, PAPIER; / ** * Vergleicht diesen Zug mit einem anderen Zug, um einen Gleichstand, einen Sieg oder einen Verlust zu bestimmen. * * @param othersMove * bewegt sich zum Vergleich mit * @return 1, wenn dieser Zug den anderen Zug schlägt, -1 wenn dieser Zug gegen * den anderen Zug verliert, 0 wenn diese Züge gleich sind * / Öffentlichkeit int vergleicheMoves(Verschieben Sie anderenMove) // Krawatte ob (Dies == SonstigesMove) Rückkehr 0; Schalter (Dies) Fall ROCK: Rückkehr (SonstigesMove == SCHERE ? 1 : -1); Fall PAPIER: Rückkehr (SonstigesMove == ROCK ? 1 : -1); Fall SCHERE: Rückkehr (SonstigesMove == PAPIER ? 1 : -1); // Sollte niemals hier ankommen Rückkehr 0;
- 9 Ein ... kreieren
Spiel beginnen()
Methode in derSchere, Stein, Papier
Klasse. Diese Methode wird das Spiel des Spiels sein. Beginnen Sie mit einem einfachenSystem.out.println
in der Methode.Öffentlichkeit Leere Spiel beginnen() System.aus.drucken("SCHERE, STEIN, PAPIER!");
- 10 Bekommen Sie Bewegungen vom Benutzer und vom Computer. In dem
Spiel beginnen()
Methode, benutze diegetMove ()
Methoden aus derBenutzer
Klasse und dieComputer
Klasse, um den Benutzer und die Bewegungen des Computers zu erhalten.Verschieben Sie userMove = Benutzer.getMove(); Bewegen Sie computerMove = Computer.getMove(); System.aus.drucken("\ nDu spieltest " + BenutzerMove + "."); System.aus.drucken("Computer gespielt" + ComputerMove + ".\ n");
- 11 Vergleichen Sie die beiden Züge und ermitteln Sie, ob der Benutzer gewonnen oder der Computer gewonnen hat. Benutze die
vergleicheMoves ()
Methode von derBewegung
enum um festzustellen, ob der Benutzer gewonnen hat oder nicht. Wenn der Benutzer gewonnen hat, erhöhen Sie die Benutzerpunktzahl um 1. Wenn der Benutzer verloren hat, erhöhen Sie die Computerpunktzahl um 1. Wenn es einen Gleichstand gab, erhöhen Sie keine Punktzahlen. Erhöhen Sie dann die Anzahl der gespielten Spiele um eins.int vergleicheMoves = BenutzerMove.vergleicheMoves(ComputerMove); Schalter (vergleicheMoves) Fall 0: // Krawatte System.aus.drucken("Krawatte!"); Unterbrechung; Fall 1: // Benutzer gewinnt System.aus.drucken(BenutzerMove + "schlägt" + ComputerMove + ". Du hast gewonnen!"); BenutzerScore++; Unterbrechung; Fall -1: // Computer gewinnt System.aus.drucken(ComputerMove + "schlägt" + BenutzerMove + ". Du hast verloren."); ComputerScore++; Unterbrechung; Anzahl von Spielen++;
- 12 Fragen Sie, ob der Benutzer erneut spielen möchte. Wenn der Benutzer erneut spielen möchte, rufen Sie an
Spiel beginnen()
nochmal. Ansonsten, ruf anprintGameStats ()
welches die Statistik des Spiels ausdruckt. Wir werden diese Methode im nächsten Schritt schreiben.ob (Benutzer.Spiel nochmal()) System.aus.drucken(); Spiel beginnen(); sonst printGameStats();
- 13 Schreiben Sie die
printGameStats ()
Methode. Diese Methode zeigt die Statistiken des Spiels an: Anzahl der Gewinne, Anzahl der Verluste, Anzahl der Gleichstände, Anzahl der gespielten Spiele und Prozentsatz der Spiele, die der Benutzer gewonnen hat. Der Prozentsatz der gewonnenen Spiele wird berechnet durch (# wins + (# ties / 2)) / (# gespielte Spiele). Diese Methode verwendetSystem.out.printf
um formatierten Text auszudrucken.Privatgelände Leere printGameStats() int Gewinnt = BenutzerScore; int Verluste = ComputerScore; int Bindungen = Anzahl von Spielen - BenutzerScore - ComputerScore; doppelt Prozentwert = (Gewinnt + ((doppelt) Bindungen) / 2) / Anzahl von Spielen; // Linie System.aus.drucken("+"); printDashes(68); System.aus.drucken("+"); // Titel drucken System.aus.drucken("|% 6s |% 6s |% 6s |% 12s |% 14s |\ n", "GEWINNT", "VERLUSTE", "KRAWATTEN", "SPIELE GESPIELT", "PERCENTAGE GEWONNEN"); // Linie System.aus.drucken("|"); printDashes(10); System.aus.drucken("+"); printDashes(10); System.aus.drucken("+"); printDashes(10); System.aus.drucken("+"); printDashes(16); System.aus.drucken("+"); printDashes(18); System.aus.drucken("|"); // Drucke Werte System.aus.drucken("|% 6d |% 6d |% 6d |% 12d |% 13.2f %% |\ n", gewinnt, Verluste, Bindungen, numberOfGames, prozentualWon * 100); // Linie System.aus.drucken("+"); printDashes(68); System.aus.drucken("+");
- 14 Starte das Spiel in der Hauptklasse. Initialisieren Sie in der Hauptklasse eine Instanz von
Schere, Stein, Papier
Klasse und rufe dieSpiel beginnen()
Methode.Öffentlichkeit statisch Leere Main(Zeichenfolge[] Argumente) RockPaperScheren Spiel = Neu Schere, Stein, Papier(); Spiel.Spiel beginnen();
- 15 Testen Sie Ihr Spiel. Jetzt, da wir alle Anstrengungen unternommen haben, das Spiel "Rock, Paper, Scissors" zu schreiben, ist es an der Zeit, alles zu kompilieren und zu testen!
Facebook
Twitter
Google+