Как да напишем играта "камък, ножици, хартия" на java
"Камък, ножици, хартия" - това е игра "на пръстите" за двама. Играчите казват "камък, ножици, хартия" и хвърлен ръка напред, образувайки една от трите цифри (камък, ножици или хартия). Победителят се определя, както следва: ножиците бият хартия, хартията бие камък, камък бие ножици. Ако и двамата играчи показват една и съща фигура, тя се счита за равенство. Ние ще напишем проста игра на Java, която ще играе "камък, ножици, хартия" с компютър.
Стъпка
един. Създайте основен клас и го наречете
Камък ножица хартия
. В този клас ще опишем играта. Можете да го наречете иначе, например Игра
или Основно
. Напишете дизайнерски реклами и основен метод.Публична класа Rockpaperscissors {Public Rockpaperscissors () {} Публично посочване на Void Main (низ [] Args) {}} t
2. Създайте списък (Enum), за да опишете възможните ходове (камък, ножици, хартия). Можем да настроим текущи струни, но списъкът ни позволява да предопределяте постоянното, така че използването на Enum е по-добро. Да наричаме нашата обява
Ход
И задайте значениятаРок
, Хартия
и Ножици
.Частна преместване {рок, хартия, ножици}
3. Създайте два затворени класа (частен) клас
Потребител
и Компютър
. Тези класове ще представляват играчи. Можете също да направите тези класове (публична ключова дума). КласПотребител
ще поиска от потребителя, какво го премества - камък, ножици или хартия - така че трябва да напишем метод getmove ()
. КласКомпютър
също трябва да има методgetmove ()
, Така че можем да получим компютър. Досега ние просто ще декларираме тези методи и ще напишем изпълнението по-късно. Клас Потребител
Трябва да има конструктор, в който обектът е инициализиран Скенер
, което ще прочете потребителския вход. ДекларирамСкенер
Затворен член на класовите данни Потребител
и го инициализирайте в дизайнера. Тъй като ще използваме класа Скенер
, Трябва да го свържем с ключова дума Внос
. Клас Компютър
Дизайнерът не е необходим, така че ние няма да го напишем - при инициализирането на обекта Компютър
Ние просто ще се обадим на дизайнера по подразбиране. Тук е класът Камък ножица хартия
Изглежда сега:Импортиране на Java.Утил.Scanner-Public Class RockpapersCissors {частна Enum Move {Rock, Paper, Scissors} ЧАСТНИЯ КЛАСА ПОТРЕБИТЕЛЯ {PRIVERN SCANNERSPANSCANNER-Публичен потребител () {INPUTSCANNER = Нов скенер (система t.In) -} Public Move Getmove () {// Todo: внедряване на метене null -}} частен клас компютър {публичен ход getmove () {публичен ход getmove () {// todo: внедряване на meturn null -}} Public RockpapersCissors () {} Обществен статичен Void Main (низ [] ARGS) {}}
4. Напишете изпълнението на метода
getmove ()
За клас Компютър
. Този метод ще върне случайната стойност Ход
.Можем да получим масив от ценности Ход
Призоваване на метод Стойности ()
като този: Ход.Стойности ()
. Да изберем случайно значение Ход
От този масив трябва да генерираме случайно индекс между 0 и броя на елемента на масив. За да направите това, обадете се на методаNextint ()
КласСлучайно
, Които свързваме така:Импортиране на Java.Утил.Случайно
. След като получих случаен индекс, ще възстановим стойността Ход
С този индекс в нашия масив.Обществен ход getmove () {move [] moves = move.Стойности () - случайно случайно = ново произволен () - int индекс = случайно.Nextint (движи се.Дължина) - върнете се [индекс] -}
пет. Напишете изпълнението на метода
getmove ()
За клас Потребител
. Този метод ще върне стойността Ход
Подходящо потребителско въвеждане. Потребителят може да влезе "камък", "ножици", или "Хартия". Първо оттеглете съобщение: Система.Навън.Печат ("Камък, ножици или хартия?"Чест
. След това използвайки метода Nextline ()
Обект Скенер
, Получаваме въвеждане на потребителя под формата на низ. Сега трябва да проверите коректността на въвеждането на потребителя. Въпреки това, ние няма да обърнем внимание на грешките и просто да проверим първата буква "K", "N" или "B". Също така няма да обърнем внимание на регистъра на писмата, тъй като предварително ще се обадим на метода Touppercase ()
Клас Низ
, Когато въвеждате потребителя към най-горния регистър. Ако потребителят не е въвел дори приблизителен избор, аз искам да се движат отново. След това, в зависимост от входа на потребителя, нашият метод ще върне съответната стойност Ход
.Public Move Getmove () {// Изтегляне на заявка за влизане.Навън.Печат ("Камък, ножици или хартия? ") - // Прочетете въвеждането на потребителска употреба на потребителска употреба = inputscanner.Nextline () - UserInput = UserInput.Touppercase () - Char Fortletter = UserInUput.Charat (0) -if (Fortletter == `K` || Fortletter == `n` || pirterletter == `b`) {// влизане в лолета (първа плоча) {case `k`: връщане на движение.Рок-калъф "H `: връщане на движение.Калъф за хартия "Б": връщане на движение.Ножици -}} // неправилно. Донесете заявка за влизане отново.Връщане getmove () -}
6. Напишете изпълнението на метода
Играй отново ()
Клас Потребител
. Потребителят трябва да може да играе отново и отново. За да определите дали потребителят иска да играе отново, напишете метод Играй отново ()
, което ще върне стойността на вида на бул и по този начин да кажете на играта дали потребителят иска да играе отново. В този метод използваме обекта Скенер
, които инициализирахме в дизайнера, за да получим"Да" или"Не" От потребителя. Просто проверяваме първото писмо, ако искате, тогава потребителят иска да играе отново, всяко друго писмо ще означава "Не".Public Boolean Playagain () {система.Навън.Печат ("Искам да играя отново? ") -СТРОЙСТВО НА ПОТРЕБИТЕЛЯ.Nextline () - UserInput = UserInput.Toupperce () - Връщане на потребителска програма.Charat (0) == `d`-}
7. Код за клас на вратовръзка
Потребител
и клас Компютър
в клас Камък ножица хартия
. Код за писане на класове Потребител
и Компютър
, Можем да направим самата игра. Обявяват класове Потребител
и Компютър
Данни за затворени класове Камък ножица хартия
. Ще се позовем на тях, причинявайки метод getmove ()
, да получите играчи. Инициализирайте ги в клас дизайнер Камък ножица хартия
. Трябва също така да съхраняваме сметка. Нагласям Потребители
и Computerscore
, Линейницата им нула. И накрая, създайте поле за данни за съхраняване на броя на игрите, също инициализирате го с нула.Частен потребител потребител-частен компютърен компютър-частен int потребител на потребителите комбинирани-частен int computerscore-частен int numberofgames-public rockpaperscissors () {user = нов потребител () - компютър = нов компютър () - потребител = 0-computerscore = 0-numberofgames = 0 -}
Осем. Пълна обява
Ход
метод, който ще сравни движенията и да определи победителя. Ние ръката код за метод Сравнение ()
което ще върне 0, ако движенията са едни и същи, 1 - ако текущото движение бие другото и -1 - ако друг ход бие ток. Текущото изпълнение се показва от този показалец, а другият се предава в параметъра на другия начин. Полезно е да се определи победителя. Първо пишем кода, определящ равенство и връщаме 0, след което напишете инструкцията за превключване, за да определим победителя.Частният се движи {Rock, Хартия, ножици - / *** сравнява текущия ход с предаден в другата параметър и определя * победа, поражение или рисуване.** @param admomove * Курсът, с който се сравнява текущата * @return 1, ако текущата стъпка бие другата, -1, ако друг ход бие текущата, * 0 в случай на равенство * / публично интелене-сравнение (преместване Advermove) {// draw == advermove) връщане 0-превключвател (това) {case rock: връщане (addommove == ножици ? 1: -1) -Съпруга: връщане (advermove == рок ? 1: -1) -анки ножици: връщане (addommove == хартия ? 1: -1) -} // този код никога не трябва да се изпълнява 0-}}
девет. Обявява метода
Започни игра ()
в клас Камък ножица хартия
. В този метод ще има игра. Започнете, като се обадите на метода Система.Навън.Println
.Публична Void StartGame () {система.Навън.Println ("КАМЪК НОЖИЦА ХАРТИЯ!") -}
10. Получаване на компютърни удари и потребители. В метода
Започни игра ()
Обади се getmove ()
Класове Потребител
и Компютър
, да получите техните движения.Преместване на stermove = Потребител.Getmove () - преместете computermove = компютър.Getmove () - система.Навън.Println ("Uta stroke" + Stermove + ".") -Система.Навън.Println ("Компютърно движение" + Computermove + ". Н"Чест-
единадесет. Сравнете хода на компютъра и преминаването на играча, за да определите кой е спечелил. Обадете се на метода
Сравнение ()
Описание Ход
, Да определите дали потребителят спечели. Ако е така, увеличете сметката си на 1. Ако не, увеличете профила на компютъра. В случай на равенство, законопроектът остава същият. След това увеличете броя на игрите, които се играят от 1.INT сравнение = lovermove.Сравнения (сравнение) {СЛУЧАЙ 0: // Drawsystem.Навън.Println ("Рисувам!") - случай 1: // победи играчът.Навън.Println (stermove + " Удари " + Computermove + ". Ти спечели!") -УСЕСССССКОР ++ - Случай на прекъсване -1: // победи компютрите.Навън.Println (Computermove + " Удари " + Stermove + ". Ти загуби.") -ОтпучанинScore ++ - Break-} Numbers++-
12. Попитайте потребителя дали иска да играе отново. Ако да, извикайте метода
Започни игра ()
отново. Ако не, обадете се на метода Printgamestats ()
, което ще донесе статистиката на играта. Ще напишем неговото прилагане в следващата стъпка.Ако (потребител.Playagain ()) {система.Навън.Println () - stritgame () -} else {printgamestats () -}
13. Напишете изпълнението на метода
PrintGamestats ()
. Този метод ще изтегли статистиката на играта: броя на победите, лезии, рисуване, броя на изиграните игри и процента на победите на играча. Процентът на спечелените игри се счита за следното: (брой победи + (брой равенства / 2)) / (брой изиграни игри). Този метод използва Система.Навън.Printf
За форматиран текст.Частни Void PrintGamestats () ") -Принти (10) -система.Навън.Печат ("+") -Принти (10) -система.Навън.Печат ("+") -Принти (10) -система.Навън.Печат ("+") -Принтдаши (16) -система.Навън.Печат ("+") -Принти (18) -система.Навън.Println ("
Четиринадесет. Започни игра. Главно клас инициализирайте обекта
Камък ножица хартия
и го наричат метод Започни игра ()
.Обществен статичен Void Main (низ [] Args) {Rockpaperscissors игра = нови Rockpapperscissors () - игра.Започни игра () -}

Петнадесет години. Тествайте играта. Сега, когато цялата работа е зад, е време да компилирате и да тестваме нашата игра!
Примерна програма
Импортиране на Java.Утил.Случайно-внос Java.Утил.Scanner-Public Class RockpapersCissors {част потребител-частен компютър компютър-частен int потребителско-частни int computerscore-частен int номерofgames-частен enum move {рок, хартия, ножици - / *** сравнява текущия ход с предаване в другия параметър и определя * победа, поражение или рисуване.** @param admomove * Курсът, с който се сравнява текущата * @return 1, ако текущата стъпка бие другата, -1, ако друг ход бие текущата, * 0 в случай на равенство * / публично интелене-сравнение (преместване Advermove) {// draw == advermove) връщане 0-превключвател (това) {case rock: връщане (addommove == ножици ? 1: -1) -Съпруга: връщане (advermove == рок ? 1: -1) -анки ножици: връщане (addommove == хартия ? 1: -1) -} // този код не трябва да бъде изпълнен никога /}} ЧАСТ НА ЧАСТНИЯ КЛАСА (ЧАСТИ ЧАСТИРАН СКУННЕР ЗАКЛЮЧВАНЕSCANNER-Публичен потребител () {INPUTSCANNER = Нов скенер (система t.In) -} Public Move Getmove () {// Показва заявка за влизане.Навън.Печат ("Камък, ножици или хартия? ") - // Прочетете въвеждането на потребителска употреба на потребителска употреба = inputscanner.Nextline () - UserInput = UserInput.Touppercase () - Char Fortletter = UserInUput.Charat (0) -if (Fortletter == `K` || Fortletter == `n` || pirterletter == `b`) {// влизане в лолета (първа плоча) {case `k`: връщане на движение.Рок-калъф "H `: връщане на движение.Калъф за хартия "Б": връщане на движение.Ножици -}} // неправилно. Донесете заявка за влизане отново.Връщане getmove () -} public boolean playagain () {система.Навън.Печат ("Искам да играя отново? ") -СТРОЙСТВО НА ПОТРЕБИТЕЛЯ.Nextline () - UserInput = UserInput.Toupperce () - Връщане на потребителска програма.Charat (0) == `Y` -}} Частен клас Компютър {Публичен ход getmove () {move [] moves = move.Стойности () - случайни случайни = нови случайни () - int индекс = случайно.Nextint (движи се.Дължина) -Редете се движи [индекс] -}} Публични rockpaperscissors () {user = нов потребител () - компютър = нов компютър () - потребител computer = 0-computerscore = 0-numberofgames = 0-} public void startgame () {система.Навън.Println ("КАМЪК НОЖИЦА ХАРТИЯ!") - // Получаване на ход stermove = потребител.Getmove () - преместете computermove = компютър.Getmove () - система.Навън.Println ("Uta stroke " + Stermove + ".") -Система.Навън.Println ("Компютърно движение " + Computermove + ". Н") - // сравнение на движенията и дефиницията на събеседните сравнения = lovermove.Сравнения (сравнение) {СЛУЧАЙ 0: // Drawsystem.Навън.Println ("Вратовръзка!") - случай 1: // победи играчът.Навън.Println (stermove + " Удари " + Computermove + ". Ти спечели!") -УСЕСССССКОР ++ - Случай на прекъсване -1: // победи компютрите.Навън.Println (Computermove + " Удари " + Stermove + ". Ти загуби.") -Computerscore ++ - Break-} numberofgames ++ - // Ние предлагаме на потребителя отново (потребител.Playagain ()) {система.Навън.Println () - startgame () -} else {printgamestats () -}} / *** Заключение на статистиката. Привличането се вземат предвид като полу-дълбочини * при преброяване на процента победи.* / Частен void printgamestats ()% 13.2F %% Частни празнични печатащи (int numberofdashes) {за (int i = 0- i < numberOfDashes- i++) {System.out.print("-")-}}public static void main(String[] args) {RockPaperScissors game = new RockPaperScissors()-game.startGame()-}}