Jak napisać grę "kamień, nożyczki, papier" na javie
"Kamień, nożyczki, papier" - to gra "na palcach" dla dwóch. Gracze mówią "kamień, nożyczki, papier" i rzucony do przodu, tworząc jedną z trzech postaci (kamień, nożyczki lub papier). Zwycięzca jest ustalany w następujący sposób: Nożyczki pokonują papier, papier bije kamień, kamień bije nożyczki. Jeśli obaj gracze pokazują tę samą figurę, jest uważany za rysunek. Napiszemy prostą grę na Javie, która gra "kamień, nożyczki, papier" z komputerem.
Kroki
jeden. Utwórz podstawową klasę i nazwij ją
RockpapersCordsors
. W tej klasie opiszemy grę. Możesz nazwać to inaczej, na przykład Gra
lub Główny
. Napisz reklamy projektantów i metodę główną.Klasa publiczna RockpapersCords {publiczne rockpapersCordsCords () {} Public Staning Void Main (String [] Args) {}}
2. Utwórz aukcję (enum), aby opisać możliwe ruchy (kamień, nożyczki, papier). Możemy ustawić do biegania ciągów, ale aukcja pozwala nam predesterminować stałą, więc użycie enum jest lepsze. Zadzwońmy do naszej aukcji
Ruszaj się
I ustaw znaczeniaSkała
, Papier
i Nożyce
.Prywatny Enum Move {Rock, Paper, Nożyczki}
3. Utwórz dwie zamknięte klasę (słowa kluczowe) klasy
Użytkownik
i Komputer
. Te klasy będą reprezentować graczy. Możesz także wprowadzić te klasy (słowo kluczowe). KlasaUżytkownik
poprosi od użytkownika, co przeniesie go - kamień, nożyczki lub papier - więc musimy napisać metodę getmave ()
. KlasaKomputer
powinien mieć również metodęgetmave ()
, Abyśmy mogli uzyskać komputer. Do tej pory po prostu zadeklarujemy te metody i napiszemy wdrożenie później. Klasa Użytkownik
Musi mieć konstruktor, w którym obiekt jest inicjowany Skaner
, który odczytuje dane wejściowe użytkownika. OgłosićSkaner
Zamknięty członek danych klasy Użytkownik
i zainicjuj go w projektantku. Ponieważ zamierzamy użyć klasy Skaner
, Musimy go połączyć za pomocą słowa kluczowego Import
. Klasa Komputer
Projektant nie jest potrzebny, więc nie piszemy go - podczas inicjowania obiektu Komputer
Po prostu zadzwonimy do domyślnego projektanta. Oto klasa RockpapersCordsors
Wygląda teraz:Importuj Java.UTIL.Scanner-Class Class RockpapersCissors {Private Enum Move {Rock, Paper, Nożyczki} Użytkownik Prywatny Użytkownik {Prywatny Skaner InputScanner-Public Użytkownik () {InputScanner = Nowy Skaner (System.W) -} Public Move GetMove () {// Todo: Implementacja Meturn Null -}} Prywatna klasa Komputer {Publiczny Move GetMove () {Public Move GetMove () {// Todo: Wdrożenie Meturn Null -}} Publiczne rockpapersCords () {} publiczna statyczna void main (string [] argss) {}}
cztery. Napisz implementację metody
getmave ()
Dla klasy Komputer
. Ta metoda zwróci wartość losową Ruszaj się
.Możemy uzyskać tablicę wartości Ruszaj się
Wywołanie metody Wartości ()
lubię to: Ruszaj się.Wartości ()
. Wybrać sens losowy Ruszaj się
Z tej tablicy musimy wygenerować losowy indeks między 0 a liczbą elementu tablicy. Aby to zrobić, zadzwoń do metodyNEODINT ()
klasaLosowy
, Które się łączymy:Importuj Java.UTIL.Losowy
. Po otrzymaniu przypadkowego indeksu, zwrócimy wartość Ruszaj się
Z tym indeksem w naszej tablicy.Publiczny ruch GetMove () {Move [] ruchy = ruch.Wartości () - Random Random = Nowy Random () - IND INDEX = Random.NEODINT (ruchy.Długość) -Return ruchy [indeks] -}
pięć. Napisz implementację metody
getmave ()
Dla klasy Użytkownik
. Ta metoda zwróci wartość Ruszaj się
Odpowiednie wprowadzanie użytkownika. Użytkownik może wejść "skała", "nożyce", lub "papier". Najpierw wycofaj wiadomość: System.Na zewnątrz.Wydrukować ("Kamień, nożyczki lub papier?")
. Następnie używając metody Dalnline ()
Obiekt Skaner
, Dostajemy dane wejściowe użytkownika w postaci sznurka. Teraz musisz sprawdzić poprawność wprowadzania użytkownika. Nie będziemy jednak zwracać uwagi na literówki i po prostu sprawdzić pierwszą literę "K", "N" lub "B". Nie zwracamy również uwagi na rejestr listów, ponieważ z góry, zadzwonimy do metody Taperek ()
klasa Strunowy
, Przy wejściu do użytkownika na najlepszy rejestr. Jeśli użytkownik nie wprowadził nawet w przybliżeniu prawidłowy wybór, poproś o jego ruch. Następnie, w zależności od wejścia użytkownika, nasza metoda zwróci odpowiednią wartość Ruszaj się
.Publiczny ruch GetMove () {// Wycofaj prośbę o wejście.Na zewnątrz.Wydrukować ("Kamień, nożyczki lub papier? ") - // Przeczytaj wprowadzanie użytkowników UserInput = InputScanner.Dalnline () - UserInput = UserInput.Touppercase () - Char Firstlestter = UserInput.Charat (0) -if (Firstlestter == `K` || Firstlestter == `n` || Firstlestter == `B`) {// Wprowadzanie prawidłowego przełącznika (Firstlettletter) {Case "K": Return Ruch.Rock-Case `H`: Return Ruch.Paper-Case `B`: Return Move.Nożyczki -}} // Nieprawidłowe. Przynieś żądanie, aby ponownie wejść.Return GetMove () -}
6. Napisz implementację metody
Zagraj ponownie ()
klasa Użytkownik
. Użytkownik musi być w stanie zagrać ponownie. Aby ustalić, czy użytkownik chce ponownie grać, napisz metodę Zagraj ponownie ()
, co zwróci wartość typu Bool, a tym samym, powiedz grę, czy użytkownik chce ponownie grać. W tej metodzie używamy obiektu Skaner
, które zainicjowaliśmy w projektancie"tak" lub"Nie" Od użytkownika. Właśnie sprawdzamy pierwszą literę, jeśli chcesz, użytkownik chce ponownie grać, każdy inny list oznacza "Nie".Public boolean playagain () {system.Na zewnątrz.Wydrukować ("Chcesz znowu grać? ") -String UserInput = InputScanner.Dalnline () - UserInput = UserInput.Taperska () - Powrót UserInput.Charat (0) == `d`-}
7. Kod klasowy
Użytkownik
i klasa Komputer
w klasie RockpapersCordsors
. Kod pisania dla zajęć Użytkownik
i Komputer
, Możemy wykonać samą grę. Ogłosić klasy Użytkownik
i Komputer
Dane klasy zamkniętej RockpapersCordsors
. Będziemy się do nich odnosić, powodując metodę getmave ()
, zdobyć graczy. Zainicjuj je w projektantku klasowym RockpapersCordsors
. Musimy również przechowywać konto. Dostosować UżytkownicyCore
i Computercore
, Linija zero. I wreszcie, utwórz pole danych do przechowywania liczby gier, także inicjując ją za pomocą zera.Prywatny użytkownik User-Private Computer Computer-Private INT Userscore-Private Int ComputerCore-Private Int Numery NumerofGames-Public RockpapersCordsCords () {User = Nowy Użytkownik () - Computer = Nowy komputer () - UżytkownicyCore = 0-Computercore = 0-NumberOfGames = 0 -}
osiem. Pełna aukcja
Ruszaj się
Metoda, która porównuje ruchy i określa zwycięzcę. Kodeks ręki do metody Porównanie ()
co powróci 0, jeśli ruchy są takie same, 1 - jeśli bieżące uruchomienie bije drugą i -1 - jeśli inny ruch bije prąd. Bieżący bieg jest pokazany przez ten wskaźnik, a drugi jest przesyłany w parametrze OtherMove. Przydatne jest określenie zwycięzcy. Najpierw piszemy kod definiujący rysunek i zwracamy 0, a następnie napisz instrukcję przełącznika, aby określić zwycięzcę.Prywatny Enum Move {Rock, Paper, Nożyczki - / *** porównuje bieżący ruch z transmitowaną w parametrze Othermove i określa * zwycięstwo, porażka lub rysować.** @param Othermove * Kurs, z którym prąd * @return 1 jest porównywany, jeśli bieżący ruch bije drugi, -1, jeśli inny ruch bije prąd, * 0 w przypadku losowania * / Public Int porównanie (ruch porównawczy Othermove) {// draw == Othermove) Zwróć 0-przełącznik (to) {Case Rock: Return (OtherMove == Nożyczki ? 1: -1) - Papier: Powrót (Othermove == Rock ? 1: -1) -Case nożyczki: Powrót (Othermove == Paper ? 1: -1) -} // Ten kod nigdy nie musi być wykonywany 0-}}
dziewięć. Ogłosić metodę
Rozpocząć grę ()
w klasie RockpapersCordsors
. W tej metodzie będzie gra. Zacznij dzwoniąc do metody System.Na zewnątrz.Println
.Publiczny void StartGame () {System.Na zewnątrz.Println ("Nożyczki do papieru rockowego!") -}
10. Uzyskaj pociągnięcia komputera i użytkownika. W metodzie
Rozpocząć grę ()
Połączenie getmave ()
zajęcia Użytkownik
i Komputer
, zdobyć ruchy.Przesuń usermove = użytkownik.Getmave () - Move Computmove = komputer.Getmave () - System.Na zewnątrz.Println ("Nutaf Sowoke" + Usermove + ".") -System.Na zewnątrz.Println ("Komputer działa" + Computermove + ".N")-
jedenaście. Porównaj przebieg komputera i ruch gracza, aby określić, kto wygrał. Zadzwoń do metody
Porównanie ()
wymienianie kolejno Ruszaj się
, Aby ustalić, czy użytkownik wygrał. Jeśli tak, zwiększ jego konto na 1. Jeśli nie, zwiększ konto komputera. W przypadku remisu rachunek pozostaje taki sam. Po tym zwiększyć liczbę gier zagranych przez 1.Int porównawcze = usermove.Porównanie (porównawcze) {Case 0: // DrawsSystem.Na zewnątrz.Println ("Remis!") -Break-case 1: // pokonał gracza.Na zewnątrz.Println (usermove + " Bije " + Computermove + ". Wygrałeś!") -UsersScore ++ - Break-Case -1: // pokonał Compersystem.Na zewnątrz.Println (computermove + " Bije " + Usermove + ". Przegrałeś.") -Computercore ++ - Break-} Numery++-
12. Poproś użytkownika, czy chce ponownie grać. Jeśli tak, zadzwoń do metody
Rozpocząć grę ()
jeszcze raz. Jeśli nie, zadzwoń do metody PrintGamestats ()
, który przyniesie statystyki gry. Napiszymy jego wdrożenie w następnym kroku.jeśli (użytkownik.Playagain ()) {system.Na zewnątrz.Println () - startGame () -} else {printgamestats () -}
13. Napisz implementację metody
PrintGamestats ()
. Ta metoda wycofuje statystyki gry: liczba zwycięstw, zmian, rysuje, liczba granych gier i odsetek zwycięstw gracza. Procent wygranych gier jest uważany za następujący: (liczba zwycięstw + (liczba rysunków / 2)) / (liczba graczy). Ta metoda używa System.Na zewnątrz.Printf
Do formatowanego wyjścia tekstowego.Prywatne pustkowe printgamestats () ") -PrintDashes (10) -system.Na zewnątrz.Wydrukować ("+") -PrintDashes (10) -system.Na zewnątrz.Wydrukować ("+") -PrintDashes (10) -system.Na zewnątrz.Wydrukować ("+") -PrintDashes (16) -System.Na zewnątrz.Wydrukować ("+") -PrintDashes (18) -System.Na zewnątrz.Println ("
czternaście. Rozpocząć grę. Głównie klasa zainicjuj obiekt
RockpapersCordsors
i nazwij to metodą Rozpocząć grę ()
.Publiczny statyczny Void Main (String [] Args) {RockpapersCissors gry = New rockpapersCissors () - Gra.Rozpocząć grę () -}
piętnaście. Przetestuj grę. Teraz, kiedy wszystko jest za sobą, nadszedł czas, aby skompilować i przetestować naszą grę!
Przykładowy program
Importuj Java.UTIL.Random-import Java.UTIL.Skaner-klasa i określa * zwycięstwo, porażka lub rysować.** @param Othermove * Kurs, z którym prąd * @return 1 jest porównywany, jeśli bieżący ruch bije drugi, -1, jeśli inny ruch bije prąd, * 0 w przypadku losowania * / Public Int porównanie (ruch porównawczy Othermove) {// draw == Othermove) Zwróć 0-przełącznik (to) {Case Rock: Return (OtherMove == Nożyczki ? 1: -1) - Papier: Powrót (Othermove == Rock ? 1: -1) -Case nożyczki: Powrót (Othermove == Paper ? 1: -1) -} // Ten kod nie musi być wykonywany Nigdy /}} Użytkownik Prywatnych klasy {Private Scanner InputScanner-Public Użytkownika () {InputScanner = Nowy skaner (system.W) -} Public Move GetMove () {// Wyświetla żądanie do wejścia.Na zewnątrz.Wydrukować ("Kamień, nożyczki lub papier? ") - // Przeczytaj wprowadzanie użytkowników UserInput = InputScanner.Dalnline () - UserInput = UserInput.Touppercase () - Char Firstlestter = UserInput.Charat (0) -if (Firstlestter == `K` || Firstlestter == `n` || Firstlestter == `B`) {// Wprowadzanie prawidłowego przełącznika (Firstlettletter) {Case "K": Return Ruch.Rock-Case `H`: Return Ruch.Paper-Case `B`: Return Move.Nożyczki -}} // Nieprawidłowe. Przynieś żądanie, aby ponownie wejść.RETURN GETMOCH () -} Public Boolean Playagain () {System.Na zewnątrz.Wydrukować ("Chcesz znowu grać? ") -String UserInput = InputScanner.Dalnline () - UserInput = UserInput.Taperska () - Powrót UserInput.Charat (0) == `Y` -}} Prywatny komputer Computer {Public Move GetMove () {Move [] Moves = Ruch.Wartości () - Random Random = Nowy Random () - IND INDEX = Random.NEODINT (ruchy.Długość) -Return ruchy [indeks] -}} publiczne rockpapersorsCordsCords () {user = Nowy użytkownik () - Computer = Nowy komputer () - UżytkownicyCore = 0-Computercore = 0-Numbergames = 0-} Public Void StartGame () {System.Na zewnątrz.Println ("Nożyczki do papieru rockowego!") - // Uzyskanie Move Usermove = Użytkownik.Getmave () - Move Computmove = komputer.Getmave () - System.Na zewnątrz.Println ("Nutaf Sowoke " + Usermove + ".") -System.Na zewnątrz.Println ("Komputer działa " + Computermove + ".N") - // Porównanie ruchów i definicję porównania Winnerint = USERMOVE.Porównanie (porównawcze) {Case 0: // DrawsSystem.Na zewnątrz.Println ("Wiązanie!") -Break-case 1: // pokonał gracza.Na zewnątrz.Println (usermove + " Bije " + Computermove + ". Wygrałeś!") -UsersScore ++ - Break-Case -1: // pokonał Compersystem.Na zewnątrz.Println (computermove + " Bije " + Usermove + ". Przegrałeś.") -Computercore ++ - Break-} NumberOofames ++ - // Oferujemy użytkownikowi ponownie grać (użytkownik.Playagain ()) {system.Na zewnątrz.Println () - StartGame () -} else {printgamestats () -}} / *** Zawarcie statystyk. Rysowania są brane pod uwagę jako pół głębokości *, gdy licząc procent zwycięstw.* / Private Void PrintGamestats ()% 13.2F %% Prywatne pustki printdashes (int Numberofdashes) {dla (int i = 0- i < numberOfDashes- i++) {System.out.print("-")-}}public static void main(String[] args) {RockPaperScissors game = new RockPaperScissors()-game.startGame()-}}