Како да напишете игра "стоун, ножици, хартија" на јава
"Стоун, ножици, хартија" - ова е игра "на прстите" за двајца. Играчите велат дека "камен, ножици, хартија" и фрлени напред рака, формирајќи една од трите бројки (камен, ножици или хартија). Победникот се одредува на следниов начин: ножици победи хартија, хартија удира камен, камен победи ножици. Ако двата играчи ја покажуваат истата бројка, се смета за нерешено. Ние ќе напишеме едноставна игра на Java, која ќе игра "камен, ножици, хартија" со компјутер.
Чекори
Еден. Креирај основна класа и име
Rockpaperscissors
. Во оваа класа ќе ја опишеме играта. Можете да го повикате поинаку, на пример Игра
или Главна
. Напишете дизајнерски реклами и главен метод.Јавна класа rockpaperscissers {јавни rockpaperscissors () {} јавна наведуваат празнина главната (стринг [] args) {}}
2. Креирајте листа (ENUM) за да ги опишете можните потези (камен, ножици, хартија). Ние можеме да поставиме стрингови, но листата ни овозможува да предодредуваме константна, така што употребата на ENUM е подобра. Ајде да го наречеме написот
Премести
И постави значењаРок
, Хартија
и Ножици
.Приватни емисии потег {рок, хартија, ножици}
3. Креирајте две затворени класа (Клучни зборови приватни) класа
Корисник
и Компјутер
. Овие часови ќе ги претставуваат играчите. Можете исто така да ги направите овие часови отворени (јавен клучен збор). КласаКорисник
ќе побара од корисникот, што потег го прави - камен, ножици или хартија - така што треба да напишеме метод getmove ()
. КласаКомпјутер
исто така треба да има методgetmove ()
, За да можеме да добиеме компјутер. Досега едноставно ќе ги објавиме овие методи и ќе ја напишеме имплементацијата подоцна. Класа Корисник
Мора да има конструктор во кој објектот е иницијализиран Скенер
, кој ќе го прочита корисничкиот влез. ПрогласиСкенер
Затворено член на податоци од класа Корисник
и иницијализира во дизајнерот. Бидејќи ние ќе ја користиме класата Скенер
, Ние мора да го поврзете со помош на клучен збор Увоз
. Класа Компјутер
Дизајнер не е потребен, така што нема да го напишеме - кога иницијализацијата на објектот Компјутер
Ние едноставно ќе го повикаме стандардниот дизајнер. Тука е класата Rockpaperscissors
Изгледа сега:Увоз Јава.Util.Scanner-јавна класа Rockpaperscissers {Приватни емисии потег {Рок, хартија, ножици} Приватна класа Корисник {Приватен скенер EventScanner-јавен корисник () {exprscanner = нов скенер (систем.Во) -} јавен потег GetMove () {// TODO: Имплементација на Meturn Null -}} Приватна класа Компјутер () {јавен потег GetMove () {// todo: имплементација на метатурната нула -}} Јавни Rockpaperscersors () {} јавна статична празнина главната (стринг [] args) {}}
Четири. Напишете го спроведувањето на методот
getmove ()
За класа Компјутер
. Овој метод ќе ја врати случаен вредност Премести
.Можеме да добиеме низа вредности Премести
Повикувајќи метод Вредности ()
како ова: Премести.Вредности ()
. Да избере случајно значење Премести
Од оваа низа, треба да генерираме случаен индекс помеѓу 0 и бројот на елемент на низа. За да го направите ова, јавете се на методотNexint ()
КласаСлучајно
, Што го поврзуваме така:Увоз Јава.Util.Случајно
. По добија случаен индекс, ќе ја вратиме вредноста Премести
Со овој индекс во нашата низа.Јавно движење GetMove () {Move [] се движи = се движи.Вредности () - Случаен Случаен = Нов Случаен () - INT Индекс = Случаен.Следна (потези.Должина) -Резарно се движи [индекс] -}
Пет. Напишете го спроведувањето на методот
getmove ()
За класа Корисник
. Овој метод ќе ја врати вредноста Премести
Соодветен корисник внес. Корисникот може да влезе "карпа", "Ножици", или "хартија". Прво, повлечете порака: Систем.Надвор.Печати ("Камен, ножици или хартија?")
. Потоа користејќи го методот Следно ()
Објект Скенер
, Ние го добиваме корисничкиот влез во форма на низа. Сега треба да ја проверите точноста на внесувањето на корисникот. Сепак, ние нема да обрнеме внимание на типос, и едноставно да ја провериме првата буква "К", "N" или "Б". Ние исто така нема да обрнеме внимание на регистарот на писма, бидејќи однапред ќе го наречеме методот Touppercase ()
Класа Стринг
, Кога влегувате на корисникот во горниот регистар. Ако корисникот не влезе дури и приближно точен избор, го барам својот потег повторно. Потоа, во зависност од внесот на корисникот, нашиот метод ќе ја врати соодветната вредност Премести
.Јавно движење GetMove () {// го повлече барањето за внесување.Надвор.Печати ("Камен, ножици или хартија? ") - // Прочитајте го влезот на Userring Userininput = EventScanner.Следно () - userinput = userininput.Touppercase () - Char Firstletter = Userininput.Charat (0) -if (Firstleter == `K` | Firstter == `n` | | Firstleter == `b`) {// Внесување на choldswitch (Firsttertter) {Случај "К": Врати потег.Рок-случај "H": Премести за враќање.Хартија-случај "Б": Поместување за враќање.Ножици -}} // Неправилно. Донесете барање за повторно влегување.Врати GetMove () -}
6. Напишете го спроведувањето на методот
Играј повторно ()
Класа Корисник
. Корисникот мора да биде способен повторно и повторно. За да одредите дали корисникот сака повторно да игра, пишува метод Играј повторно ()
, што ќе ја врати вредноста на видот на Bool и, така, ќе ја каже играта дали корисникот сака повторно да игра. Во овој метод, го користиме објектот Скенер
, што го иницијализиравме во дизајнерот за да добиеме"Да" или"Не" Од корисникот. Ние само ја проверуваме првата буква, ако, тогаш корисникот сака повторно да игра, секое друго писмо ќе значи "Не".Јавна булова PlayAgain () {систем.Надвор.Печати ("Сакате повторно да играте? ") -Анг-userininput = eventScanner.Следно () - userinput = userininput.Touppercase () - Врати UserininPut.Charat (0) == `d`-}
7. Класа код
Корисник
и класа Компјутер
во класата Rockpaperscissors
. Пишување код за часови Корисник
и Компјутер
, Ние можеме самата игра. Објави часови Корисник
и Компјутер
Податоци за затворени класа Rockpaperscissors
. Ние ќе се однесуваме на нив, предизвикувајќи метод getmove ()
, да се добие играчи. Иницијализирајте ги во класниот дизајнер Rockpaperscissors
. Ние исто така треба да чуваме сметка. Прилагоди Корисници
и Компјутери
, Ливиција ги нула. И конечно, креирајте поле за податоци за складирање на бројот на игри, исто така иницијализирање со нула.Приватен корисник корисник-приватни компјутерски компјутер-приватни ИНТЕР корисници-приватни int Компјутери-приватни int numberfames-јавни rockpaperscersersers () {user = нов корисник () - Компјутер = Нов Компјутер () - Корисници = 0-Компјутери = 0-numberofgames = 0 -}
осум. Целосно листата
Премести
Метод кој ќе ги спореди потезите и ќе го одреди победникот. Ние рачно код за метод Споредмоли ()
кои ќе се вратат 0 ако потезите се исти, 1 - ако сегашниот трчање го победува другите и -1 - ако друг потег го победува струјата. Сегашниот рок е прикажан со овој покажувач, а другиот се пренесува во параметарот на другиот. Корисно е да се одреди победникот. Прво го напишуваме кодот дефинирање на нерешено и враќање 0, а потоа напишете ја инструкцијата за прекинувач за да го одредите победникот.ПРИВАТЕН ЕНЕМ Поместување {рок, хартија, ножици - / *** го споредува тековниот потег со пренесени во параметарот на другиот и одредува * победа, пораз или црта.** @param endermove * Курсот со кој сегашниот * @return 1 се споредува ако тековниот потег го победи другиот, -1 ако друг потег го победува струјата, * 0 во случај на нерешено / јавни инволви (потег Endermove) {// draw == endermove) Врати 0-прекинувач (ова) {случај карпа: Враќање (endermove == ножици ? 1: -1) хартија: Враќање (endermove == Рок ? 1: -1) ножици: Враќање (Другомове == Хартија ? 1: -1) -} // Овој код никогаш не мора да се изврши 0-}}
I. Објавете го методот
StartGame ()
во класата Rockpaperscissors
. Во овој метод ќе има игра. Започнете со повикување на методот Систем.Надвор.Println
.Јавна празнина Startgame () {System.Надвор.Println ("Рок хартија ножици!") -}
10. Земете компјутерски потези и корисник. Во методот
StartGame ()
Повик getmove ()
часови Корисник
и Компјутер
, да ги добијат своите потези.Поместете го Usermove = корисник.GetMove () - поместете го компјутерот = компјутер.GetMove () - систем.Надвор.Println (" Nuta мозочен удар" + Употреба + ".") -Систем.Надвор.Println ("Компјутерски работи" + Компјутер + ".EN")-
Единаесет. Споредете го текот на компјутерот и потег на играчот за да го одредите Кој победи. Повикајте го методот
Споредмоли ()
котација Премести
, За да се утврди дали корисникот победи. Ако е така, зголемете ја неговата сметка на 1. Ако не, зголемете ја сметката на компјутерот. Во случај на нерешено, законот останува ист. После тоа, зголемување на бројот на игри што ги игра 1.Int cardemoves = Userermove.Споредмоли (споредмоли) {случај 0: // drawsystem.Надвор.Println ("Подготви!")--Случај-случај 1: // го порази играчите на играчи.Надвор.Println (Userermove + " Отчукувања " + Компјутер + ". Ти Победи!") -Userserscore ++ - пауза-1: // го порази компјутеристот.Надвор.Println (cuttermermove + " Отчукувања " + Употреба + ". Ти губиш.") - Complycore ++ - Break-} броеви++-
12. Прашајте го корисникот дали тој сака повторно да игра. Ако одговорот е да, јавете се на методот
StartGame ()
Повторно. Ако не, повикајте го методот Printgamestats ()
, што ќе ја донесе статистиката на играта. Ние ќе ја напишеме нејзината имплементација во следниот чекор.Ако (корисник.PlayAgain ()) {систем.Надвор.PrintLN () - Startgame () -} друго {printgamestats () -}
13. Напишете го спроведувањето на методот
Printgamestats ()
. Овој метод ќе ја повлече статистиката на играта: бројот на победи, лезии, црта, бројот на играни игри и процентот на победите на играчот. Процентот на освоени игри се смета на што следува: (број на победи + (број на цртања / 2)) / (број на играни игри). Овој метод го користи Систем.Надвор.Printf
За форматиран текст излез.Приватни празнини printgamestats () ") -Primdashes (10) -Систем.Надвор.Печати ("+") -Primdashes (10) -Систем.Надвор.Печати ("+") -Primdashes (10) -Систем.Надвор.Печати ("+") -ПРЕДНОСТ (16) -Систем.Надвор.Печати ("+") -Печатени (18) -систем.Надвор.Println ("
Четиринаесет. Започнете игра. Главно класа иницијализира објектот
Rockpaperscissors
и го нарекуваме метод StartGame ()
.Јавна статична празнина Главна (Стринг [] args) {rockpaperscissors игра = Њу rockpaperscissors () - игра.StartGame () -}

петнаесет. Тестирајте ја играта. Сега, кога целата работа е зад, време е да ја компајлираме и тестираме нашата игра!
Пример програма
Увоз Јава.Util.Случаен увоз Јава.Util.Скенер-јавна класа Rockpaperscissors {Приватен корисник корисник-приватни компјутерски компјутер-приватни ИНТЕР корисници-приватни INT Компјутери-Приватни INT Броеви-Приватни enum Премести {Рок, хартија, Ножици - / *** Поместување на тековниот потег со пренесени во другиот параметар и одредува * победа, пораз или црта.** @param endermove * Курсот со кој сегашниот * @return 1 се споредува ако тековниот потег го победи другиот, -1 ако друг потег го победува струјата, * 0 во случај на нерешено / јавни инволви (потег Endermove) {// draw == endermove) Врати 0-прекинувач (ова) {случај карпа: Враќање (endermove == ножици ? 1: -1) хартија: Враќање (endermove == Рок ? 1: -1) ножици: Враќање (Другомове == Хартија ? 1: -1) -} // Овој код не мора да се изврши никогаш /}} корисник на приватна класа {Приватен скенер eventScanner-јавен корисник () {expresscanner = нов скенер (систем.Во) -} јавен потег GetMove () {/ / прикажува барање за внесување.Надвор.Печати ("Камен, ножици или хартија? ") - // Прочитајте го влезот на Userring Userininput = EventScanner.Следно () - userinput = userininput.Touppercase () - Char Firstletter = Userininput.Charat (0) -if (Firstleter == `K` | Firstter == `n` | | Firstleter == `b`) {// Внесување на choldswitch (Firsttertter) {Случај "К": Врати потег.Рок-случај "H": Премести за враќање.Хартија-случај "Б": Поместување за враќање.Ножици -}} // Неправилно. Донесете барање за повторно влегување.Врати GetMove () -} јавна булова PlayAgain () {систем.Надвор.Печати ("Сакате повторно да играте? ") -Анг-userininput = eventScanner.Следно () - userinput = userininput.Touppercase () - Врати UserininPut.CHARAT (0) == `y` -}} Компјутер за приватна класа {јавен потег GetMove () {Премести [] потези = се движи.Вредности () - Случаен Случаен = Нов Случаен () - INT Индекс = Случаен.Следна (потези.Должина) - ИНТЕРНУР НА ПРОДАВАЊЕ [Индекс] -}} Јавни Rockpaperscissors () {user = нов корисник () - Компјутер = Нов компјутер () - Корисници = 0-Компјутери = 0-} Јавна празнина Startgame () {system.Надвор.Println ("Рок хартија ножици!") - // добивање на движење usermove = корисник.GetMove () - поместете го компјутерот = компјутер.GetMove () - систем.Надвор.Println (" Nuta мозочен удар " + Употреба + ".") -Систем.Надвор.Println ("Компјутерски работи " + Компјутер + ".EN") - // Споредба на потезите и дефиницијата на подемните подеми = USERMOVE.Споредмоли (споредмоли) {случај 0: // drawsystem.Надвор.Println ("Врска!")--Случај-случај 1: // го порази играчите на играчи.Надвор.Println (Userermove + " Отчукувања " + Компјутер + ". Ти Победи!") -Userserscore ++ - пауза-1: // го порази компјутеристот.Надвор.Println (cuttermermove + " Отчукувања " + Употреба + ". Ти губиш.") -компјутери КУЛТУРСКор + + - Break-} БРОБАФАМИ ++ - // Ние нудиме на корисникот повторно да игра (корисник.PlayAgain ()) {систем.Надвор.PrintLN () - Startgame () -} друго {printgamestats () -}} / *** Склучување на статистиката. Црта се земени во предвид како полу-длабочини * при броењето на процентот на победи.* / Приватни празнини printgamestats ()% 13.2f %% Private Void PrintDashes (Int Numberfashes) {за (int i = 0- i < БРОЈОФДАШ - I ++) {систем.Надвор.Печати ("-") -}} Јавна стационарна празнина Главна (Стринг [].Startgame () -}}