Как да направите игра на скала, хартия, ножица в Java (със снимки)

Съдържание:

Как да направите игра на скала, хартия, ножица в Java (със снимки)
Как да направите игра на скала, хартия, ножица в Java (със снимки)

Видео: Как да направите игра на скала, хартия, ножица в Java (със снимки)

Видео: Как да направите игра на скала, хартия, ножица в Java (със снимки)
Видео: 10 идей для мгновенного обновления вашей спальни 2024, Април
Anonim

Рок, хартия, ножица е игра на ръка, играна от двама души. И двамата хора биха казали „камък, хартия, ножица“и след това едновременно образуват един от трите предмета (скала, хартия или ножица) с протегната ръка. Победителят се определя от ръчните формации. Ножицата бие хартията, хартията бие камъка, а скалата бие ножиците. Ако и двамата играчи играят една и съща формация, това се счита за равенство. Ще напишем проста игра в Java за симулиране на рок, хартия, ножици, където един играч е потребителят, а другият играч е компютърът.

Стъпки

1585279 1 1
1585279 1 1

Стъпка 1. Създайте основния клас и го извикайте

Камък ножица хартия

.

Това ще бъде класът, в който ще напишем играта. Можете да изберете да го наречете нещо друго, като например

Игра

или

Основен

. Запишете декларации за метода за конструктора и основния метод.

публичен клас RockPaperScissors {публичен RockPaperScissors () {} публичен static void main (String args) {}}

1585279 2 1
1585279 2 1

Стъпка 2. Създайте изброяване за жестовете с ръце (камък, хартия или ножица)

Можем да използваме низове за представяне на скала, хартия или ножица, но изброяването ни позволява да дефинираме предварително нашите константи, което означава, че използването на изброяване е по -добър дизайн. Ще извикаме нашия тип изброяване

Ход

със стойностите

ROCK

Хартия

и

НОЖИЦИ

частно изброяване Преместване {ROCK, PAPER, SCISSORS}

1585279 3 1
1585279 3 1

Стъпка 3. Създайте два частни класа

Потребител

и

Компютър

.

Тези класове ще представляват нашите играчи в играта. Можете да изберете да направите тези класове публични. The

Потребител

class ще бъде класът, който подканва потребителя за камък, хартия или ножица, така че ще трябва да напишем

getMove ()

метод. The

Компютър

клас също ще трябва да има a

getMove ()

метод, така че компютърът също да може да направи ход. Ще поставим заместители в тези методи и ще ги приложим по -късно. The

Потребител

class ще изисква конструктор, който настройва

Скенер

обект, който да бъде въведен от потребителския вход. Ние ще поставим

Скенер

като частно поле за потребителя и след това го инициирайте в конструктора. Тъй като използваме

Скенер

клас, трябва да напишем декларация за импортиране за него в горната част на нашия код. The

Компютър

клас не изисква конструктор, така че не е нужно да го пишем; когато инициираме

Компютър

обект, просто ще извикаме конструктора по подразбиране. Ето какво е нашето

Камък ножица хартия

класът изглежда сега:

внос java.util. Scanner; публичен клас RockPaperScissors {private enum Move {ROCK, PAPER, SCISSORS} private class User {private Scanner inputScanner; публичен потребител () {inputScanner = нов скенер (System.in); } public Move getMove () {// TODO: Прилагане на този метод return null; }} частен клас Компютър {обществен Move getMove () {// TODO: Прилагане на този метод return null; }} обществен RockPaperScissors () {} публичен static void main (String args) {}}

1585279 4 1
1585279 4 1

Стъпка 4. Напишете

getMove ()

метод за

Компютър

клас.

Този метод ще върне произволен случай

Ход

. Можем да получим масив от

Ход

изброяване чрез извикване на

стойности()

метод:

Move.values ()

. За да изберете произволен

Ход

изброяване в този масив от стойности, трябва да генерираме случаен индекс, който е цяло число между 0 и дължината на нашия масив от стойности. За да направим това, можем да използваме

nextInt ()

метод на

Случайно

клас, от който трябва да импортираме

java.util

. След като получим случайния индекс, можем да върнем

Ход

на този индекс от нашия масив от стойности.

public Move getMove () {Move ходове = Move.values (); Random random = new Random (); int index = random.nextInt (move.length); връщане на ходове [индекс]; }

1585279 5 1
1585279 5 1

Стъпка 5. Напишете

getMove ()

метод за

Потребител

клас.

Този метод ще върне a

Ход

съответстващи на това, което потребителят е въвел. Очакваме потребителят да напише или „рок“, „хартия“или „ножица“. Първо, трябва да подканим потребителя за въвеждане:

System.out.print ("Камък, хартия или ножица?")

. След това използвайте

nextLine ()

метод на

Скенер

обект, за да получи потребителското въвеждане като низ. Сега трябва да проверим дали потребителят е подал валиден ход, но можем да бъдем снизходителни, ако потребителят е написал грешно дума. Така че ще проверяваме само дали първата буква от потребителското въвеждане е или „R“(за рок), „P“(за хартия), или „S“(за ножици), и няма да се интересуваме от случая, защото първо ще използваме

toUpperCase ()

метод на

Низ

class, за да накара потребителския низ да въведе всички главни букви. Ако потребителят не е въвел дистанционно правилен вход, ще го подканим отново. След това, в зависимост от това какво е вложил потребителят, ще върнем съответния ход.

public Move getMove () {// Подканете потребителя System.out.print ("Камък, хартия или ножица?"); // Вземете потребителския вход String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Потребителят е въвел валиден входен ключ (firstLetter) {случай 'R': връщане Move. ROCK; случай 'P': връщане Move. PAPER; случай 'S': връщане Move. SCISSORS; }} // Потребителят не е въвел валиден вход. Подканете отново. връщане getMove (); }

1585279 6
1585279 6

Стъпка 6. Напишете a

Играй отново()

метод за

Потребител

клас.

Потребителят трябва да може да играе играта отново и отново. За да определим дали потребителят иска да играе отново, трябва да напишем a

Играй отново()

метод, който връща булева стойност, казваща на играта дали потребителят е решил да играе отново или не. В този метод използваме

Скенер

които преди това сме инициирали в конструктора, за да получим „Да“или „Не“от потребителя. Ще проверим само дали първата буква е „Y“, за да определим дали потребителят иска да играе отново. Всеки друг вход ще означава, че потребителят не иска да играе отново.

обществен булев playAgain () {System.out.print ("Искате ли да играете отново?"); Низ userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); връщане userInput.charAt (0) == 'Y'; }

1585279 7
1585279 7

Стъпка 7. Свържете

Потребител

и

Компютър

класове заедно в

Камък ножица хартия

клас.

Сега, когато приключихме с писането на

Потребител

и

Компютър

класове, можем да се съсредоточим върху работата върху нашата действителна игра. Създайте лични полета за

Потребител

и

Компютър

класове в

Камък ножица хартия

клас. Ще имаме нужда от достъп до тези полета за достъп до

getMove ()

методи, когато играем играта. В конструктора за

Камък ножица хартия

клас, инициирайте тези полета. Също така ще трябва да следим резултата в

userScore

и

computerScore

полета, които трябва да инициираме като 0 в конструктора. Трябва да следим и броя на игрите, което също ще бъде поле, инициирано като 0.

частен потребител; частен компютърен компютър; private int userScore; частен int computerScore; private int numberOfGames; публичен RockPaperScissors () {потребител = нов потребител (); компютър = нов Компютър (); userScore = 0; computerScore = 0; numberOfGames = 0; }

1585279 8
1585279 8

Стъпка 8. Разширете

Ход

enum да включва метод, който ни казва кой ход печели във всеки случай.

Трябва да напишем а

compareMoves ()

метод, който връща 0, ако ходовете са еднакви, 1, ако текущият ход победи другия ход, и -1, ако текущият ход загуби от другия ход. Това ще бъде полезно за определяне на победителя в играта. За да приложим този метод, първо ще върнем 0, ако ходовете са еднакви и следователно имаме равенство. След това напишете оператор switch за връщане на 1 или -1.

частно изброяване Move {ROCK, PAPER, SCISSORS; /** * Сравнява този ход с друг ход за определяне на равенство, печалба или * загуба. * * @param otherMove * се движи за сравнение с * @return 1, ако този ход победи другия ход, -1 ако този ход загуби до * другия ход, 0, ако тези ходове се свържат * / public int compareMoves (Move otherMove) { / / Вържете if (this == otherMove) връща 0; switch (this) {case ROCK: return (otherMove == НОЖИЦИ? 1: -1); случай PAPER: return (otherMove == ROCK? 1: -1); случай НОЖИЦИ: return (otherMove == PAPER? 1: -1); } // Никога не трябва да достига тук return 0; }}

1585279 9
1585279 9

Стъпка 9. Създайте a

Започни игра()

метод в

Камък ножица хартия

клас.

Този метод ще бъде играта на играта. Започнете, като поставите проста

System.out.println

в метода.

обществена невалидна startGame () {System.out.println ("СТЕНА, ХАРТИЯ, НОЖИЦИ!"); }

1585279 10
1585279 10

Стъпка 10. Вземете движения от потребителя и компютъра

В

Започни игра()

метод, използвайте

getMove ()

методи от

Потребител

клас и

Компютър

клас, за да получите движенията на потребителя и компютъра.

Преместване на userMove = user.getMove (); Преместете computerMove = computer.getMove (); System.out.println ("\ nИграхте" + userMove + "."); System.out.println ("Игра на компютър" + computerMove + ". / N");

1585279 11
1585279 11

Стъпка 11. Сравнете двата хода и определете дали печели потребителят или компютърът

Използвай

compareMoves ()

метод от

Ход

enum, за да се определи дали потребителят е спечелил или не. Ако потребителят спечели, увеличете потребителския резултат с 1. Ако потребителят загуби, увеличете компютърния резултат с 1. Ако има равенство, не увеличавайте нито един от резултатите. След това увеличете броя на игрите, изиграни от една.

int compareMoves = userMove.compareMoves (computerMove); switch (compareMoves) {случай 0: // Връзка System.out.println ("Връзка!"); прекъсване; случай 1: // Потребителят печели System.out.println (userMove + "beats" + computerMove + ". Вие спечелихте!"); userScore ++; прекъсване; случай -1: // Компютърът печели System.out.println (computerMove + "beats" + userMove + ". Загубихте."); computerScore ++; прекъсване; } numberOfGames ++;

1585279 12
1585279 12

Стъпка 12. Попитайте дали потребителят иска да играе отново

Ако потребителят иска да играе отново, обадете се

Започни игра()

отново. В противен случай се обадете

printGameStats ()

който ще отпечата статистиката на играта. Ще напишем този метод в следващата стъпка.

if (user.playAgain ()) {System.out.println (); Започни игра(); } else {printGameStats (); }

1585279 13
1585279 13

Стъпка 13. Напишете

printGameStats ()

метод.

Този метод ще покаже статистиката на играта: брой печалби, брой загуби, брой равенства, брой изиграни игри и процент спечелени игри от потребителя. Процентът на спечелените игри се изчислява чрез (# победи + (# равенства/2))/(# изиграни игри). Този метод използва

System.out.printf

за отпечатване на форматиран текст.

private void printGameStats () {int wins = userScore; int загуби = computerScore; int връзки = numberOfGames - userScore - computerScore; двоен процентWon = (печели + ((двойни) равенства) / 2) / numberOfGames; // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); // Отпечатайте заглавия System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "WINS", "LOSSES", "TIES", "GAMEES PLAYED", "PERCENTAGE СПЕЧЕЛЕНИ"); // Line System.out.print ("|"); printDashes (10); System.out.print ("+"); printDashes (10); System.out.print ("+"); printDashes (10); System.out.print ("+"); printDashes (16); System.out.print ("+"); printDashes (18); System.out.println ("|"); // Отпечатване на стойности System.out.printf ("| %6d | %6d | %6d | %12d | %13.2f %% | / n", печалби, загуби, равенства, numberOfGames, процентWon * 100); // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); }

1585279 14
1585279 14

Стъпка 14. Стартирайте играта в основния клас

В основния клас инициализирайте екземпляр на

Камък ножица хартия

клас и се обадете на

Започни игра()

метод.

публичен static void main (String args) {RockPaperScissors игра = нов RockPaperScissors (); game.startGame (); }

1585279 15
1585279 15

Стъпка 15. Изпробвайте играта си

Сега, след като сме преминали през всички усилия да напишем играта Rock, Paper, Scissors, време е да компилираме и тестваме всичко!

Примерна програма

импортиране на java.util. Random; внос java.util. Scanner; публичен клас RockPaperScissors {private User user; частен компютър; private int userScore; частен int computerScore; private int numberOfGames; частно изброяване Move {ROCK, PAPER, SCISSORS; /** * Сравнява този ход с друг ход за определяне на равенство, печалба или * загуба. * * @param otherMove * се движи за сравнение с * @return 1, ако този ход победи другия ход, -1 ако този ход загуби до * другия ход, 0, ако тези ходове се свържат * / public int compareMoves (Move otherMove) { / / Вържете if (this == otherMove) връща 0; switch (this) {case ROCK: return (otherMove == НОЖИЦИ? 1: -1); случай PAPER: return (otherMove == ROCK? 1: -1); случай НОЖИЦИ: return (otherMove == PAPER? 1: -1); } // Никога не трябва да достига тук return 0; }} частен потребител от клас {частен скенер inputScanner; публичен потребител () {inputScanner = нов скенер (System.in); } обществен Преместване getMove () {// Подкани потребителя System.out.print ("Камък, хартия или ножица?"); // Вземете потребителския вход String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Потребителят е въвел валиден входен ключ (firstLetter) {случай 'R': връщане Move. ROCK; случай 'P': връщане Move. PAPER; случай 'S': връщане Move. SCISSORS; }} // Потребителят не е въвел валиден вход. Подканете отново. връщане getMove (); } обществен булев playAgain () {System.out.print ("Искате ли да играете отново?"); Низ userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); връщане userInput.charAt (0) == 'Y'; }} частен клас Компютър {обществен Преместване getMove () {Преместване ходове = Move.values (); Random random = new Random (); int index = random.nextInt (move.length); връщане на ходове [индекс]; }} обществени RockPaperScissors () {потребител = нов потребител (); компютър = нов Компютър (); userScore = 0; computerScore = 0; numberOfGames = 0; } public void startGame () {System.out.println ("СТЕНА, ХАРТИЯ, НОЖИЦИ!"); // Получаване на движения Move userMove = user.getMove (); Преместете computerMove = computer.getMove (); System.out.println ("\ nИграхте" + userMove + "."); System.out.println ("Игра на компютър" + computerMove + ". / N"); // Сравнете ходовете и определете победителя int compareMoves = userMove.compareMoves (computerMove); switch (compareMoves) {случай 0: // Връзка System.out.println ("Връзка!"); прекъсване; случай 1: // Потребителят печели System.out.println (userMove + "beats" + computerMove + ". Вие спечелихте!"); userScore ++; прекъсване; случай -1: // Компютърът печели System.out.println (computerMove + "beats" + userMove + ". Загубихте."); computerScore ++; прекъсване; } numberOfGames ++; // Помолете потребителя да играе отново if (user.playAgain ()) {System.out.println (); Започни игра(); } else {printGameStats (); }} /*** Отпечатва статистиката на играта. Изчислява равенството като 1/2 печалба в * процент спечелени. */ private void printGameStats () {int wins = userScore; int загуби = computerScore; int връзки = numberOfGames - userScore - computerScore; двоен процентWon = (печели + ((двойни) равенства) / 2) / numberOfGames; // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); // Отпечатайте заглавия System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "WINS", "LOSSES", "TIES", "GAMEES PLAYED", "PERCENTAGE СПЕЧЕЛЕНИ"); // Line System.out.print ("|"); printDashes (10); System.out.print ("+"); printDashes (10); System.out.print ("+"); printDashes (10); System.out.print ("+"); printDashes (16); System.out.print ("+"); printDashes (18); System.out.println ("|"); // Отпечатване на стойности System.out.printf ("| %6d | %6d | %6d | %12d | %13.2f %% | / n", печалби, загуби, равенства, numberOfGames, процентWon * 100); // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); } private void printDashes (int numberOfDashes) {for (int i = 0; i <numberOfDashes; i ++) {System.out.print ("-"); }} публично статично void main (String args) {RockPaperScissors игра = нов RockPaperScissors (); game.startGame (); }}

Препоръчано: