Wie erstelle ich ein Stein-, Papier-, Scheren-Spiel in Java (mit Bildern)

Inhaltsverzeichnis:

Wie erstelle ich ein Stein-, Papier-, Scheren-Spiel in Java (mit Bildern)
Wie erstelle ich ein Stein-, Papier-, Scheren-Spiel in Java (mit Bildern)

Video: Wie erstelle ich ein Stein-, Papier-, Scheren-Spiel in Java (mit Bildern)

Video: Wie erstelle ich ein Stein-, Papier-, Scheren-Spiel in Java (mit Bildern)
Video: Eigene Texturen erstellen | Sketchup für Holzwerker 2024, Kann
Anonim

Rock, Paper, Scissors ist ein Handspiel, das von zwei Personen gespielt wird. Beide würden "Stein, Papier, Schere" sagen und dann gleichzeitig mit ausgestreckter Hand eines von drei Objekten (Stein, Papier oder Schere) formen. Der Gewinner wird durch die Handformationen ermittelt. Schere schlägt Papier, Papier schlägt Stein und Stein schlägt Schere. Wenn beide Spieler die gleiche Handformation spielen, gilt dies als Unentschieden. Wir werden ein einfaches Spiel in Java schreiben, um Stein, Papier und Schere zu simulieren, wobei ein Spieler der Benutzer und der andere der Computer ist.

Schritte

1585279 1 1
1585279 1 1

Schritt 1. Erstellen Sie die Hauptklasse und rufen Sie sie auf

Schere, Stein, Papier

.

Dies wird die Klasse sein, in der wir das Spiel schreiben werden. Sie können es anders benennen, wie z

Spiel

oder

Hauptsächlich

. Schreiben Sie Methodendeklarationen für den Konstruktor und die Hauptmethode ein.

public class RockPaperScissors { public RockPaperScissors() { } public static void main(String args) {} }

1585279 2 1
1585279 2 1

Schritt 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 ermöglicht es uns, unsere Konstanten vorzudefinieren, was bedeutet, dass die Verwendung der Aufzählung ein besseres Design ist. Wir nennen unseren Enum-Typ

Bewegung

mit den Werten

FELSEN

PAPIER

und

SCHERE

private enum Verschieben { FELSEN, PAPIER, SCHERE }

1585279 3 1
1585279 3 1

Schritt 3. Erstellen Sie zwei private Klassen

Benutzer

und

Rechner

.

Diese Klassen werden unsere Spieler im Spiel repräsentieren. Sie können diese Kurse öffentlich machen. Die

Benutzer

class ist die Klasse, die den Benutzer auffordert, entweder Stein, Papier oder Schere einzugeben, also müssen wir a. schreiben

getMove()

Methode. Die

Rechner

Klasse muss auch a. haben

getMove()

Methode, damit der Computer auch einen Zug machen kann. Wir werden Platzhalter in diese Methoden einfügen und sie später implementieren. Die

Benutzer

-Klasse benötigt einen Konstruktor, der die

Scanner

Objekt, um die Benutzereingabe aufzunehmen. Wir werden die

Scanner

als privates Feld für den Benutzer und initiieren es dann im Konstruktor. Da wir die

Scanner

-Klasse müssen wir eine Import-Anweisung dafür am Anfang unseres Codes schreiben. Die

Rechner

class benötigt keinen Konstruktor, also brauchen wir keinen zu schreiben; wenn wir das initiieren

Rechner

-Objekt rufen wir nur den Standardkonstruktor auf. Hier ist, was unsere

Schere, Stein, Papier

Klasse sieht jetzt so aus:

java.util. Scanner importieren; öffentliche Klasse RockPaperScissors { private Aufzählung Move { ROCK, PAPER, SCISSORS } private Klasse Benutzer { private Scanner inputScanner; public User () { inputScanner = neuer Scanner (System.in); } public Move getMove() { // TODO: Implementieren Sie diese Methode return null; } } private Klasse Computer { public Move getMove() { // TODO: Implementieren Sie diese Methode return null; } } public RockPaperScissors() { } public static void main(String args) { } }

1585279 4 1
1585279 4 1

Schritt 4. Schreiben Sie die

getMove()

Methode für die

Rechner

Klasse.

Diese Methode gibt ein zufälliges. zurück

Bewegung

. Wir können eine Reihe von

Bewegung

Aufzählungen durch Aufruf der

Werte()

Methode:

Move.values()

. Um eine zufällige zu wählen

Bewegung

Aufzählung in diesem Werte-Array müssen wir einen zufälligen Index generieren, der eine ganze Zahl zwischen 0 und der Länge unseres Werte-Arrays ist. Dazu können wir die

nextInt()

Methode der

Willkürlich

Klasse, aus der wir importieren müssen

java.util

. Nachdem wir den Zufallsindex erhalten haben, können wir den

Bewegung

dieses Index aus unserem Werte-Array.

public Move getMove() { Move bewegt = Move.values(); Zufällig zufällig = neu Zufällig (); int index = random.nextInt(moves.length); Rückkehr bewegt[index]; }

1585279 5 1
1585279 5 1

Schritt 5. Schreiben Sie die

getMove()

Methode für die

Benutzer

Klasse.

Diese Methode gibt a. zurück

Bewegung

entsprechend der Eingabe des Benutzers. Wir erwarten, dass der Benutzer entweder "Stein", "Papier" oder "Schere" schreibt. Zuerst müssen wir den Benutzer zu einer Eingabe auffordern:

System.out.print("Stein, Papier oder Schere?")

. Dann nutze die

nächste Zeile()

Methode der

Scanner

-Objekt, um die Benutzereingabe als Zeichenfolge abzurufen. Wir müssen jetzt ü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 prüfen also nur, ob der erste Buchstabe der Benutzereingabe entweder "R" (für Stein), "P" (für Papier) oder "S" (für Schere) ist, und kümmern uns nicht um die Groß-/Kleinschreibung, weil Wir werden zuerst die verwenden

toUpperCase()

Methode der

Zeichenfolge

-Klasse, um die Benutzereingabezeichenfolge in Großbuchstaben zu ändern. Wenn der Benutzer keine entfernt korrekte Eingabe gemacht hat, werden wir den Benutzer erneut auffordern. Dann geben wir, je nachdem, was der Benutzer eingegeben hat, einen entsprechenden Zug zurück.

public Move getMove() { // Den Benutzer auffordern System.out.print("Stein, Papier oder Schere? "); // Holen Sie sich die Benutzereingabe String userInput = inputScanner.nextLine(); userInput = userInput.toUpperCase(); char firstLetter = userInput.charAt(0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') { // Benutzer hat einen gültigen Eingabeschalter eingegeben (firstLetter) { case 'R': return Move. ROCK; Fall 'P': Rückgabe Move. PAPER; Fall 'S': return Move. SCISSORS; } } // Der Benutzer hat keine gültige Eingabe eingegeben. Aufforderung erneut. getMove() zurückgeben; }

1585279 6
1585279 6

Schritt 6. Schreiben Sie a

nochmal abspielen()

Methode für die

Benutzer

Klasse.

Der Benutzer soll das Spiel immer wieder spielen können. Um festzustellen, ob der Benutzer erneut spielen möchte, müssen wir a. schreiben

nochmal abspielen()

-Methode, die einen booleschen Wert zurückgibt, der dem Spiel mitteilt, ob der Benutzer entschieden hat, erneut zu spielen oder nicht. Bei dieser Methode verwenden wir die

Scanner

die wir zuvor im Konstruktor initiiert hatten, um vom Benutzer ein "Ja" oder ein "Nein" zu erhalten. Wir prüfen nur, ob der erste Buchstabe 'Y' ist, um festzustellen, ob der Benutzer erneut spielen möchte. Jede andere Eingabe bedeutet, dass der Benutzer nicht mehr spielen möchte.

public boolean playAgain() { System.out.print("Möchten Sie wieder spielen? "); String userInput = inputScanner.nextLine(); userInput = userInput.toUpperCase(); return userInput.charAt(0) == 'Y'; }

1585279 7
1585279 7

Schritt 7. Verbinden Sie die

Benutzer

und

Rechner

Klassen zusammen in der

Schere, Stein, Papier

Klasse.

Nun, da wir mit dem Schreiben fertig sind

Benutzer

und

Rechner

Klassen können wir uns auf die Arbeit an unserem eigentlichen Spiel konzentrieren. Erstellen Sie private Felder für die

Benutzer

und

Rechner

Klassen in der

Schere, Stein, Papier

Klasse. Wir müssen auf diese Felder zugreifen, um auf die

getMove()

Methoden, wenn wir das Spiel spielen. Im Konstruktor für die

Schere, Stein, Papier

Klasse, initiieren Sie diese Felder. Wir müssen auch die Punktzahl in

userScore

und

computerScore

Felder, die wir im Konstruktor als 0 initiieren müssen. Wir müssen auch die Anzahl der Spiele im Auge behalten, die ebenfalls ein Feld sein wird, das als 0 gestartet wird.

privater Benutzerbenutzer; private Computer-Computer; private int userScore; private int computerScore; private int numberOfGames; public RockPaperScissors() { user = new user(); computer = neuer Computer(); Benutzerbewertung = 0; Computerbewertung = 0; numberOfGames = 0; }

1585279 8
1585279 8

Schritt 8. Erweitern Sie die

Bewegung

enum, um eine Methode einzuschließen, die uns sagt, welcher Zug in jedem Fall gewinnt.

Wir müssen a. schreiben

vergleichenMoves()

Methode, die 0 zurückgibt, wenn die Züge gleich sind, 1, wenn der aktuelle Zug den anderen Zug schlägt, und -1, wenn der aktuelle Zug gegen den anderen Zug verliert. Dies ist nützlich, 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 wir daher ein Unentschieden haben. Schreiben Sie dann eine switch-Anweisung, um 1 oder -1 zurückzugeben.

private Aufzählung Move { FELSEN, PAPIER, SCHERE; /** * Vergleicht diesen Zug mit einem anderen Zug, um ein Unentschieden, einen Gewinn oder * eine Niederlage zu bestimmen. * * @param otherMove * Zug 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 */ public int CompareMoves(Move otherMove) { / / Tie if (dies == otherMove) return 0; switch (this) { case ROCK: return (otherMove == SCISSORS ? 1: -1); case PAPER: return (otherMove == ROCK ? 1: -1); case SCISSORS: return (otherMove == PAPER ? 1: -1); } // Sollte niemals hierher kommen return 0; } }

1585279 9
1585279 9

Schritt 9. Erstellen Sie eine

Spiel starten()

Methode in der

Schere, Stein, Papier

Klasse.

Diese Methode wird das Spielen des Spiels sein. Beginnen Sie mit einem einfachen

System.out.println

bei der Methode.

public void startGame() { System.out.println("FELSEN, PAPIER, SCHERE!"); }

1585279 10
1585279 10

Schritt 10. Holen Sie sich Bewegungen vom Benutzer und vom Computer

In dem

Spiel starten()

Methode, verwenden Sie die

getMove()

Methoden aus der

Benutzer

Klasse und die

Rechner

Klasse, um die Bewegungen des Benutzers und des Computers zu erhalten.

Verschieben userMove = user.getMove(); ComputerMove verschieben = computer.getMove(); System.out.println("\nDu hast gespielt " + userMove + "."); System.out.println("Computer abgespielt" + computerMove + ".\n");

1585279 11
1585279 11

Schritt 11. Vergleichen Sie die beiden Züge und bestimmen Sie, ob der Benutzer oder der Computer gewonnen hat

Verwenden Sie die

vergleichenMoves()

Methode aus der

Bewegung

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 ein Unentschieden gab, erhöhen Sie keine der Punkte. Erhöhen Sie dann die Anzahl der gespielten Spiele um eins.

int CompareMoves = userMove.compareMoves(computerMove); switch (compareMoves) { case 0: // Tie System.out.println("Tie!"); brechen; Fall 1: // Benutzer gewinnt System.out.println(userMove + "beats" + computerMove + ". Du hast gewonnen!"); userScore++; brechen; case -1: // Computer gewinnt System.out.println(computerMove + " schlägt " + userMove + ". Du hast verloren."); computerScore++; brechen; } numberOfGames++;

1585279 12
1585279 12

Schritt 12. Fragen Sie, ob der Benutzer erneut spielen möchte

Wenn der Benutzer wieder spielen möchte, rufen Sie an

Spiel starten()

wieder. Ansonsten ruf an

printGameStats()

die die Statistik des Spiels ausdruckt. Wir werden diese Methode im nächsten Schritt schreiben.

if (user.playAgain()) { System.out.println(); Spiel starten(); aufrechtzuerhalten. sonst { printGameStats(); }

1585279 13
1585279 13

Schritt 13. Schreiben Sie die

printGameStats()

Methode.

Diese Methode zeigt die Statistik des Spiels an: Anzahl der Siege, Anzahl der Verluste, Anzahl der Unentschieden, Anzahl der gespielten Spiele und Prozentsatz der vom Benutzer gewonnenen Spiele. Der Prozentsatz der gewonnenen Spiele wird durch (# Siege + (# Unentschieden/2))/(# gespielte Spiele) berechnet. Diese Methode verwendet

System.out.printf

um formatierten Text auszudrucken.

privat void printGameStats() { int wins = userScore; int-Verluste = ComputerScore; int ties = numberOfGames - userScore - computerScore; doppelter ProzentsatzWon = (Siege + ((Doppel-) Unentschieden) / 2) / numberOfGames; // Zeile System.out.print("+"); printGestriche(68); System.out.println("+"); // Titel drucken System.out.printf("| %6s | %6s | %6s | %12s | %14s |\n", "WINS", "LOSSES", "TIES", "GAMES PLAYED", "PERCENTAGE GEWONNEN"); // Zeile System.out.print("|"); printGestriche(10); System.out.print("+"); printGestriche(10); System.out.print("+"); printGestriche(10); System.out.print("+"); printGestriche(16); System.out.print("+"); printGestriche(18); System.out.println("|"); // Werte ausgeben System.out.printf("| %6d | %6d | %6d | %12d | %13.2f%% |\n", Siege, Niederlagen, Unentschieden, numberOfGames, ProzentsatzWon * 100); // Zeile System.out.print("+"); printGestriche(68); System.out.println("+"); }

1585279 14
1585279 14

Schritt 14. Starten Sie das Spiel in der Hauptklasse

Initialisieren Sie in der Hauptklasse eine Instanz des

Schere, Stein, Papier

Klasse und ruf an

Spiel starten()

Methode.

public static void main(String args) { RockPaperScissors game = new RockPaperScissors(); game.startGame(); }

1585279 15
1585279 15

Schritt 15. Testen Sie Ihr Spiel

Nachdem wir uns nun alle Mühe gegeben haben, das Spiel „Stein, Papier, Schere“zu schreiben, ist es an der Zeit, alles zu kompilieren und auszuprobieren!

Beispielprogramm

java.util. Random importieren; java.util. Scanner importieren; öffentliche Klasse RockPaperScissors { privater Benutzer Benutzer; private Computer-Computer; private int userScore; private int computerScore; private int numberOfGames; private Aufzählung Move { FELSEN, PAPIER, SCHERE; /** * Vergleicht diesen Zug mit einem anderen Zug, um ein Unentschieden, einen Gewinn oder * eine Niederlage zu bestimmen. * * @param otherMove * Zug 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 */ public int CompareMoves(Move otherMove) { / / Tie if (dies == otherMove) return 0; switch (this) { case ROCK: return (otherMove == SCISSORS ? 1: -1); case PAPER: return (otherMove == ROCK ? 1: -1); case SCISSORS: return (otherMove == PAPER ? 1: -1); } // Sollte niemals hierher kommen return 0; } } private Klasse Benutzer { privater Scanner inputScanner; public User () { inputScanner = neuer Scanner (System.in); } public Move getMove() { // Den Benutzer auffordern System.out.print("Stein, Papier oder Schere? "); // Holen Sie sich die Benutzereingabe String userInput = inputScanner.nextLine(); userInput = userInput.toUpperCase(); char firstLetter = userInput.charAt(0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') { // Benutzer hat einen gültigen Eingabeschalter eingegeben (firstLetter) { case 'R': return Move. ROCK; Fall 'P': Rückgabe Move. PAPER; Fall 'S': return Move. SCISSORS; } } // Der Benutzer hat keine gültige Eingabe eingegeben. Aufforderung erneut. getMove() zurückgeben; } public boolean playAgain() { System.out.print("Möchten Sie noch einmal spielen? "); String userInput = inputScanner.nextLine(); userInput = userInput.toUpperCase(); return userInput.charAt(0) == 'Y'; } } private Klasse Computer { public Move getMove() { Move bewegt = Move.values(); Zufällig zufällig = neu Zufällig (); int index = random.nextInt(moves.length); Rückkehr bewegt[index]; } } public RockPaperScissors() { user = new User(); computer = neuer Computer(); Benutzerbewertung = 0; Computerbewertung = 0; numberOfGames = 0; } public void startGame() { System.out.println("FELSEN, PAPIER, SCHERE!"); // Moves abrufen Move userMove = user.getMove(); ComputerMove verschieben = computer.getMove(); System.out.println("\nDu hast gespielt " + userMove + "."); System.out.println("Computer abgespielt" + computerMove + ".\n"); // Züge vergleichen und Gewinner ermitteln int CompareMoves = userMove.compareMoves(computerMove); switch (compareMoves) { case 0: // Tie System.out.println("Tie!"); brechen; Fall 1: // Benutzer gewinnt System.out.println(userMove + "beats" + computerMove + ". Du hast gewonnen!"); userScore++; brechen; case -1: // Computer gewinnt System.out.println(computerMove + " schlägt " + userMove + ". Du hast verloren."); computerScore++; brechen; } numberOfGames++; // Bitten Sie den Benutzer, erneut zu spielen if (user.playAgain()) { System.out.println(); Spiel starten(); aufrechtzuerhalten. sonst { printGameStats(); } } /** * Gibt die Statistik des Spiels aus. Berechnet Unentschieden als 1/2 Gewinn in * gewonnenem Prozentsatz. */ private void printGameStats() { int wins = userScore; int-Verluste = ComputerScore; int ties = numberOfGames - userScore - computerScore; doppelter ProzentsatzWon = (Siege + ((Doppel-) Unentschieden) / 2) / numberOfGames; // Zeile System.out.print("+"); printGestriche(68); System.out.println("+"); // Titel drucken System.out.printf("| %6s | %6s | %6s | %12s | %14s |\n", "WINS", "LOSSES", "TIES", "GAMES PLAYED", "PERCENTAGE GEWONNEN"); // Zeile System.out.print("|"); printGestriche(10); System.out.print("+"); printGestriche(10); System.out.print("+"); printGestriche(10); System.out.print("+"); printGestriche(16); System.out.print("+"); printGestriche(18); System.out.println("|"); // Werte ausgeben System.out.printf("| %6d | %6d | %6d | %12d | %13.2f%% |\n", Siege, Niederlagen, Unentschieden, numberOfGames, ProzentsatzWon * 100); // Zeile System.out.print("+"); printGestriche(68); System.out.println("+"); } private void printDashes(int numberOfDashes) { for (int i = 0; i < numberOfDashes; i++) { System.out.print("-"); } } public static void main(String args) { RockPaperScissors game = new RockPaperScissors(); game.startGame(); } }

Empfohlen: