Как сделать игру «Камень, ножницы, бумага» на Java (с изображениями)

Оглавление:

Как сделать игру «Камень, ножницы, бумага» на Java (с изображениями)
Как сделать игру «Камень, ножницы, бумага» на Java (с изображениями)

Видео: Как сделать игру «Камень, ножницы, бумага» на Java (с изображениями)

Видео: Как сделать игру «Камень, ножницы, бумага» на Java (с изображениями)
Видео: SketchUp: Как создать материал? 2024, Апрель
Anonim

«Камень, ножницы, бумага» - это игра, в которую играют два человека. Оба человека сказали бы «камень, ножницы, бумага», а затем одновременно образовали бы один из трех предметов (камень, бумага или ножницы) с протянутой рукой. Победитель определяется по раскладке рук. Ножницы бьют по бумаге, бумага бьет по камню, камень бьет по ножницам. Если оба игрока разыгрывают одинаковую комбинацию рук, считается ничья. Мы напишем простую игру на Java, имитирующую камень, ножницы, бумагу, в которой один игрок является пользователем, а другой - компьютером.

Шаги

1585279 1 1
1585279 1 1

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

Камень ножницы Бумага

.

Это будет класс, в который мы будем писать игру. Вы можете назвать его как-нибудь иначе, например

Игра

или

Главный

. Запишите объявления методов для конструктора и основного метода.

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

1585279 2 1
1585279 2 1

Шаг 2. Создайте список жестов рук (камень, бумага или ножницы)

Мы могли бы использовать строки для представления камня, бумаги или ножниц, но перечисление позволяет нам заранее определять наши константы, что означает, что использование перечисления - лучший дизайн. Мы назовем наш тип перечисления

Двигаться

со значениями

РОК

БУМАГА

а также

НОЖНИЦЫ

частное перечисление Перемещение {КАМЕНЬ, БУМАГА, НОЖНИЦЫ}

1585279 3 1
1585279 3 1

Шаг 3. Создайте два частных класса

Пользователь

а также

Компьютер

.

Эти классы будут представлять наших игроков в игре. Вы можете сделать эти классы общедоступными. В

Пользователь

class будет классом, который предлагает пользователю выбрать камень, бумагу или ножницы, поэтому нам нужно будет написать

getMove ()

метод. В

Компьютер

класс также должен иметь

getMove ()

метод, чтобы компьютер тоже мог двигаться. Мы добавим в эти методы заполнители и реализуем их позже. В

Пользователь

классу потребуется конструктор, который настраивает

Сканер

объект для ввода пользовательского ввода. Мы поставим

Сканер

как частное поле для пользователя, а затем инициировать его в конструкторе. Поскольку мы используем

Сканер

class, нам нужно написать для него оператор импорта в верхней части нашего кода. В

Компьютер

класс не требует конструктора, поэтому нам не нужно его писать; когда мы инициируем

Компьютер

объект, мы просто будем вызывать конструктор по умолчанию. Вот что наши

Камень ножницы Бумага

класс выглядит сейчас:

import java.util. Scanner; открытый класс RockPaperScissors {частное перечисление Перемещение {КАМЕНЬ, БУМАГА, НОЖНИЦЫ} частный класс Пользователь {частный сканер inputScanner; общедоступный пользователь () {inputScanner = новый сканер (System.in); } public Move getMove () {// ЗАДАЧА: Реализуйте этот метод return null; }} частный класс Computer {public Move getMove () {// ЗАДАЧА: Реализуйте этот метод return null; }} public RockPaperScissors () {} public static void main (String args) {}}

1585279 4 1
1585279 4 1

Шаг 4. Напишите

getMove ()

метод для

Компьютер

класс.

Этот метод вернет случайный

Двигаться

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

Двигаться

перечисления путем вызова

ценности()

метод:

Move.values ()

. Выбрать случайный

Двигаться

перечисление в этом массиве значений, нам нужно сгенерировать случайный индекс, который является целым числом от 0 до длины нашего массива значений. Для этого мы можем использовать

nextInt ()

метод

Случайный

класс, из которого нам нужно импортировать

java.util

. После того, как мы получили случайный индекс, мы можем вернуть

Двигаться

этого индекса из нашего массива значений.

public Move getMove () {Move move = Move.values (); Случайный случайный = новый Случайный (); int index = random.nextInt (move.length); возврат ходов [индекс]; }

1585279 5 1
1585279 5 1

Шаг 5. Напишите

getMove ()

метод для

Пользователь

класс.

Этот метод вернет

Двигаться

соответствует тому, что ввел пользователь. Мы ожидаем, что пользователь напишет «камень», «бумага» или «ножницы». Во-первых, нам нужно запросить у пользователя ввод:

System.out.print («Камень, бумага или ножницы?»)

. Затем используйте

nextLine ()

метод

Сканер

объект, чтобы получить ввод пользователя в виде строки. Теперь нам нужно проверить, отправил ли пользователь правильный ход, но мы можем проявить снисходительность, если пользователь написал слово с ошибкой. Таким образом, мы будем проверять только, является ли первая буква пользовательского ввода «R» (камень), «P» (бумага) или «S» (ножницы), и нас не будет заботить случай, потому что мы сначала будем использовать

toUpperCase ()

метод

Нить

чтобы сделать строку ввода пользователя прописной. Если пользователь не ввел удаленно правильный ввод, мы снова предложим пользователю запрос. Затем, в зависимости от того, что ввел пользователь, мы вернем соответствующий ход.

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) {case 'R': return Move. ROCK; case 'P': вернуть Move. PAPER; case 'S': вернуть Move. SCISSORS; }} // Пользователь не ввел допустимый ввод. Подскажите еще раз. return getMove (); }

1585279 6
1585279 6

Шаг 6. Напишите

playAgain ()

метод для

Пользователь

класс.

Пользователь должен иметь возможность играть в игру снова и снова. Чтобы определить, хочет ли пользователь снова сыграть, нам нужно написать

playAgain ()

который возвращает логическое значение, сообщающее игре, решил ли пользователь играть снова или нет. В этом методе мы используем

Сканер

который мы ранее инициировали в конструкторе, чтобы получить от пользователя «Да» или «Нет». Мы только проверим, является ли первая буква «Y», чтобы определить, хочет ли пользователь играть снова. Любой другой ввод будет означать, что пользователь не хочет играть снова.

public boolean playAgain () {System.out.print ("Вы хотите снова сыграть?"); Строка userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); вернуть userInput.charAt (0) == 'Y'; }

1585279 7
1585279 7

Шаг 7. Подключите

Пользователь

а также

Компьютер

классы вместе в

Камень ножницы Бумага

класс.

Теперь, когда мы закончили писать

Пользователь

а также

Компьютер

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

Пользователь

а также

Компьютер

классы в

Камень ножницы Бумага

класс. Нам потребуется доступ к этим полям, чтобы получить доступ к

getMove ()

методы, когда мы играем в игру. В конструкторе для

Камень ножницы Бумага

class, заполните эти поля. Нам также нужно будет отслеживать счет в

userScore

а также

computerScore

поля, которые нам нужно инициировать как 0 в конструкторе. Нам также нужно отслеживать количество игр, которое также будет полем, инициированным как 0.

частный пользователь-пользователь; частный компьютер компьютер; частный 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.

частное перечисление Перемещение {КАМЕНЬ, БУМАГА, НОЖНИЦЫ; / ** * Сравнивает этот ход с другим ходом, чтобы определить ничью, победу или * поражение. * * @param otherMove * move для сравнения с * @return 1, если этот ход превосходит другой, -1, если этот ход проигрывает * другому ходу, 0, если эти ходы равны * / public int compareMoves (Move otherMove) {/ / Связать if (this == otherMove) return 0; переключатель (это) {case ROCK: return (otherMove == НОЖНИЦЫ? 1: -1); case PAPER: return (otherMove == ROCK? 1: -1); case НОЖНИЦЫ: return (otherMove == БУМАГА? 1: -1); } // Здесь никогда не должно быть return 0; }}

1585279 9
1585279 9

Шаг 9. Создайте

начать игру()

метод в

Камень ножницы Бумага

класс.

Этот метод и будет игрой в игру. Начните с простого

System.out.println

в методе.

public void 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) {case 0: // Связать System.out.println ("Связать!"); перерыв; case 1: // Пользователь выигрывает System.out.println (userMove + "beats" + computerMove + ". Вы выиграли!"); userScore ++; перерыв; case -1: // Компьютер побеждает System.out.println (computerMove + "beats" + userMove + ". Вы проиграли."); computerScore ++; перерыв; } numberOfGames ++;

1585279 12
1585279 12

Шаг 12. Спросите, хочет ли пользователь снова сыграть

Если пользователь хочет снова сыграть, позвоните

начать игру()

опять таки. В противном случае звоните

printGameStats ()

который распечатает статистику игры. Мы напишем этот метод на следующем шаге.

если (user.playAgain ()) {System.out.println (); начать игру(); } еще {printGameStats (); }

1585279 13
1585279 13

Шаг 13. Напишите

printGameStats ()

метод.

Этот метод отображает статистику игры: количество побед, количество проигрышей, количество ничьей, количество сыгранных игр и процент игр, выигранных пользователем. Процент выигранных игр рассчитывается по формуле (# побед + (# ничьей / 2)) / (# сыгранных игр). Этот метод использует

System.out.printf

распечатать форматированный текст.

закрытый void printGameStats () {int wins = userScore; int loss = computerScore; int tie = numberOfGames - userScore - computerScore; двойной процентВон = (выигрыши + ((двойные) ничьи) / 2) / numberOfGames; // Строка System.out.print ("+"); printDashes (68); System.out.println ("+"); // Печатать заголовки System.out.printf ("|% 6s |% 6s |% 6s |% 12s |% 14s | / n", "ВЫИГРЫШИ", "ПОТЕРЯ", "НЯТИ", "ИГРЫ ИГРЫ", "ПРОЦЕНТ ПОБЕДИЛ"); // Строка 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, percentWon * 100); // Строка System.out.print ("+"); printDashes (68); System.out.println ("+"); }

1585279 14
1585279 14

Шаг 14. Запускаем игру в основном классе

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

Камень ножницы Бумага

класс и позвонить

начать игру()

метод.

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

1585279 15
1585279 15

Шаг 15. Протестируйте свою игру

Теперь, когда мы приложили все усилия, чтобы написать игру «Камень, ножницы, бумага», пришло время скомпилировать и протестировать все!

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

import java.util. Random; import java.util. Scanner; открытый класс RockPaperScissors {частный пользователь-пользователь; частный компьютер компьютер; частный int userScore; частный int computerScore; private int numberOfGames; частное перечисление Move {КАМЕНЬ, БУМАГА, НОЖНИЦЫ; / ** * Сравнивает этот ход с другим ходом, чтобы определить ничью, победу или * поражение. * * @param otherMove * move для сравнения с * @return 1, если этот ход превосходит другой, -1, если этот ход проигрывает * другому ходу, 0, если эти ходы совпадают * / public int compareMoves (Move otherMove) {/ / Связать if (this == otherMove) return 0; переключатель (это) {case ROCK: return (otherMove == НОЖНИЦЫ? 1: -1); case PAPER: return (otherMove == ROCK? 1: -1); case НОЖНИЦЫ: return (otherMove == БУМАГА? 1: -1); } // Здесь никогда не должно быть return 0; }} частный класс User {частный сканер inputScanner; общедоступный пользователь () {inputScanner = новый сканер (System.in); } 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) {case 'R': return Move. ROCK; case 'P': вернуть Move. PAPER; case 'S': вернуть Move. SCISSORS; }} // Пользователь не ввел допустимый ввод. Подскажите еще раз. return getMove (); } public boolean playAgain () {System.out.print ("Вы хотите снова сыграть?"); Строка userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); вернуть userInput.charAt (0) == 'Y'; }} частный класс Computer {public Move getMove () {Move move = Move.values (); Случайный случайный = новый Случайный (); int index = random.nextInt (move.length); возвратные ходы [индекс]; }} public RockPaperScissors () {user = new User (); компьютер = новый компьютер (); 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) {case 0: // Связать System.out.println ("Связать!"); перерыв; case 1: // Пользователь выигрывает System.out.println (userMove + "beats" + computerMove + ". Вы выиграли!"); userScore ++; перерыв; case -1: // Компьютер побеждает System.out.println (computerMove + "beats" + userMove + ". Вы проиграли."); computerScore ++; перерыв; } numberOfGames ++; // Просим пользователя сыграть еще раз if (user.playAgain ()) {System.out.println (); начать игру(); } еще {printGameStats (); }} / ** * Распечатывает статистику игры. Рассчитывает ничью как 1/2 выигрыша в * процентном соотношении. * / private void printGameStats () {int wins = userScore; int loss = computerScore; int tie = numberOfGames - userScore - computerScore; двойной процентВон = (выигрыши + ((двойные) ничьи) / 2) / numberOfGames; // Строка System.out.print ("+"); printDashes (68); System.out.println ("+"); // Печатать заголовки System.out.printf ("|% 6s |% 6s |% 6s |% 12s |% 14s | / n", "ВЫИГРЫШИ", "ПОТЕРЯ", "НЯТИ", "ИГРЫ ИГРЫ", "ПРОЦЕНТ ПОБЕДИЛ"); // Строка 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, percentWon * 100); // Строка System.out.print ("+"); printDashes (68); System.out.println ("+"); } private void printDashes (int numberOfDashes) {для (int я = 0; я <numberOfDashes; я ++) {System.out.print ("-"); }} public static void main (String args) {RockPaperScissors game = new RockPaperScissors (); game.startGame (); }}

Рекомендуемые: