Javaда рок, кагаз, кайчы оюнун кантип жасоо керек (сүрөттөр менен)

Мазмуну:

Javaда рок, кагаз, кайчы оюнун кантип жасоо керек (сүрөттөр менен)
Javaда рок, кагаз, кайчы оюнун кантип жасоо керек (сүрөттөр менен)

Video: Javaда рок, кагаз, кайчы оюнун кантип жасоо керек (сүрөттөр менен)

Video: Javaда рок, кагаз, кайчы оюнун кантип жасоо керек (сүрөттөр менен)
Video: СИМУЛЯТОР БОМЖА | СИМУЛЯТОР СВИДАНИЙ | СИМУЛЯТОР РОССИИ ► 1 ИГРОШЛЯПА 2024, Май
Anonim

Рок, кагаз, кайчы - бул эки адам ойногон кол оюну. Эки адам тең "таш, кагаз, кайчы" деп айтышат, анан бир убакта колу сунулган үч нерсенин бирин (таш, кагаз же кайчы) түзүшөт. Жеңүүчү колдун түзүлүшү менен аныкталат. Кайчы кагазды, кагаз ташты, таш кайчыны урат. Эгерде эки оюнчу тең бирдей кол ойнотушса, анда бул тең чыгуу деп эсептелет. Биз Javaда жөнөкөй оюн жазабыз, анда Rock, Paper, Scissors окшоштурулат, анда бир оюнчу колдонуучу, ал эми экинчи оюнчу компьютер.

Кадамдар

1585279 1 1
1585279 1 1

Кадам 1. Негизги классты түзүп, аны чакырыңыз

Таш кагаз кайчы

.

Бул биз оюнду жаза турган класс болот. Сиз башка бир нерсени атоону тандай аласыз

Оюн

же

Негизги

. Конструктор жана негизги метод үчүн декларацияны жазыңыз.

коомдук класс RockPaperScissors {public RockPaperScissors () {} public static void main (String args) {}}

1585279 2 1
1585279 2 1

Кадам 2. Кол жаңсоолору үчүн санак түзүңүз (таш, кагаз же кайчы)

Биз рокту, кагазды же кайчыны көрсөтүү үчүн саптарды колдоно алмакпыз, бирок саноо бизге константаларыбызды алдын ала аныктоого мүмкүндүк берет, бул саноону колдонуу жакшыраак дизайн экенин билдирет. Биз енумин типини чагырярыс

Жылдыруу

баалуулуктар менен

ROCK

КАГАЗ

жана

КАЙЧА

жеке номерди жылдыруу {ROCK, PAPER, SCISSORS}

1585279 3 1
1585279 3 1

Кадам 3. Эки жеке классты түзүңүз

Колдонуучу

жана

Компьютер

.

Бул класстар биздин оюнчуларды оюнда көрсөтөт. Сиз бул класстарды жалпыга ачык кылууну тандай аласыз. The

Колдонуучу

класс колдонуучуну ташка, кагазга же кайчыга үндөгөн класс болот, ошондуктан биз жазышыбыз керек

getMove ()

ыкма. The

Компьютер

класс да болушу керек

getMove ()

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

Колдонуучу

класс орнотуучу конструкторду талап кылат

Сканер

колдонуучу киргизген объект. Биз койобуз

Сканер

колдонуучу үчүн жеке талаа катары жана андан кийин аны конструктордо баштаңыз. Биз колдонуп жаткандыктан

Сканер

class, биздин коддун башына импорттук билдирүү жазышыбыз керек. The

Компьютер

класс конструкторду талап кылбайт, андыктан бирин жазуунун кажети жок; биз баштаганда

Компьютер

объект, биз жөн гана демейки конструкторду чакырабыз. Мына биздики

Таш кагаз кайчы

класс азыр окшош:

java.util. Scanner импорттоо; коомдук класс RockPaperScissors {private enum Move {ROCK, PAPER, SCISSORS} private class User {private Scanner inputScanner; public User () {inputScanner = new Scanner (System.in); } public Move getMove () {// TODO: Бул ыкманы ишке ашыруу null кайтаруу; }} жеке класстагы компьютер {public Move getMove () {// TODO: Бул ыкманы ишке ашыруу null кайтаруу; }} коомдук RockPaperScissors () {} жалпыга ачык статикалык боштук (String args) {}}

1585279 4 1
1585279 4 1

4 -кадам

getMove ()

үчүн ыкма

Компьютер

класс.

Бул ыкма кокусунан кайтып келет

Жылдыруу

. Биз бир катар ала алабыз

Жылдыруу

номерлерине чалуу аркылуу

баалуулуктар ()

ыкма:

Move.values ()

. Туш келди тандоо

Жылдыруу

бул баалуулуктар массивинде саноо, биз 0 менен биздин баалуулуктар массивинин узундугунун ортосундагы бүтүн сан болгон туш келди индексти түзүүбүз керек. Бул үчүн, биз

nextInt ()

ыкмасы

Random

биз импорттошубуз керек болгон класс

java.util

. Кокус индексти алгандан кийин, биз аны кайтарып алабыз

Жылдыруу

бул индексти биздин баалуулуктар массивинен.

public Move getMove () {Move move = Move.values (); Random random = new Random (); int index = random.nextInt (moves.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': return Move. PAPER; case 'S': return Move. SCISSORS; }} // Колдонуучу жарактуу киргизүүнү киргизе элек. Кайра чакыруу. getMove () кайтаруу; }

1585279 6
1585279 6

6 -кадам

playAgain ()

үчүн ыкма

Колдонуучу

класс.

Колдонуучу оюнду кайра -кайра ойной алышы керек. Колдонуучу кайра ойногусу келгенин аныктоо үчүн, а жазышыбыз керек

playAgain ()

колдонуучу кайра ойноону чечтиби же жокпу оюнга логиканы кайтарган ыкма. Бул методдо биз

Сканер

биз мурда конструктордо колдонуучудан "Ооба" же "Жок" алуу үчүн баштаганбыз. Колдонуучу кайра ойногусу келгенин аныктоо үчүн биз биринчи тамга 'Y' экенин текшеребиз. Башка ар кандай киргизүү колдонуучу кайра ойногусу келбейт дегенди билдирет.

public boolean playAgain () {System.out.print ("Кайра ойногуңуз келеби?"); Сап userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); return userInput.charAt (0) == 'Y'; }

1585279 7
1585279 7

7 -кадам

Колдонуучу

жана

Компьютер

класстар чогуу

Таш кагаз кайчы

класс.

Эми биз жазууну бүтүрдүк

Колдонуучу

жана

Компьютер

класстар, биз чыныгы оюнубуздун үстүндө иштөөгө басым жасай алабыз. Үчүн жеке талааларды түзүү

Колдонуучу

жана

Компьютер

ичиндеги класстар

Таш кагаз кайчы

класс. Биз кирүү үчүн бул талааларга киришибиз керек

getMove ()

оюндарды ойноп жатканда ыкмалары. Үчүн конструктордо

Таш кагаз кайчы

класс, бул талааларды баштаңыз. Биз дагы упайдын эсебин жүргүзүшүбүз керек

userScore

жана

computerScore

талааларды, биз конструктордо 0 катары башташыбыз керек. Биз оюндардын санын да көзөмөлдөп турушубуз керек, бул дагы 0 катары башталган талаа болот.

жеке колдонуучу; жеке компьютердик компьютер; жеке int userScore; жеке int computerScore; жеке int numberOfGames; коомдук RockPaperScissors () {user = new User (); компьютер = жаңы Компьютер (); userScore = 0; computerScore = 0; numberOfGames = 0; }

1585279 8
1585279 8

8 -кадам

Жылдыруу

enum ар бир учурда кайсы кыймыл жеңип чыкканын айткан ыкманы камтыйт.

Биз а жазышыбыз керек

салыштырууMoves ()

ыкма 0 кайтарып берет, эгер кыймылдар бирдей болсо, 1 учурдагы кыймыл башка кыймылды жеңсе, 1 жана учурдагы кыймыл башка кыймылга уттурса -1. Бул оюнда жеңүүчү аныктоо үчүн пайдалуу болот. Бул ыкманы ишке ашыруу үчүн, адегенде 0 кайтарабыз, эгерде кыймылдар бирдей болсо, демек бизде галстук бар. Андан кийин 1 же -1 кайтаруу үчүн которуу арызын жазыңыз.

жеке enum Move {ROCK, PAPER, Scissor; /** * Бул кадамды тең чыгуу, жеңиш же * утулушту аныктоо үчүн башка кадам менен салыштырат. * * @param otherMove * салыштыруу үчүн * @return 1 менен салыштыруу үчүн көчүү, эгерде бул кыймыл башка кыймылды жеңсе, -1 эгерде бул кыймыл * башка кыймылга уттурса, 0, эгерде бул кыймылдар байланса * / public int comparMoves (Move otherMove) { / / Tie if (this == otherMove) 0 кайтаруу; switch (this) {case ROCK: return (otherMove == SCISSORS? 1: -1); case PAPER: return (otherMove == ROCK? 1: -1); case SCISSORS: return (otherMove == PAPER? 1: -1); } // Бул жерге эч качан жетпеш керек 0; }}

1585279 9
1585279 9

Step 9. a түзүү

оюнду баштоо()

ичиндеги ыкма

Таш кагаз кайчы

класс.

Бул ыкма оюнду ойноо болот. Жөнөкөй сөз менен баштаңыз

System.out.println

ыкмада.

public void startGame () {System.out.println ("ROCK, PAPER, Scissor!"); }

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. Эки кадамды салыштырып, колдонуучу утуп алганын же компьютер утканын аныктаңыз

Колдонуу

салыштырууMoves ()

ыкмасы

Жылдыруу

enum колдонуучу утуп же утпаганын аныктоо үчүн. Эгерде колдонуучу утса, колдонуучунун упайын 1ге көбөйтүңүз. Колдонуучу утулуп калса, компьютердин упайын 1ге көбөйтүңүз. Эгерде тең чыгуу болгон болсо, анда эч кандай упайларды көбөйтпөңүз. Андан кийин бир ойногон оюндун санын көбөйтүңүз.

int салыштырууMoves = userMove.compareMoves (computerMove); switch (салыштырууMoves) {мисал 0: // Tie System.out.println ("Байла!"); тыныгуу; 1 -абал: // Колдонуучу System.out.println утуп алат (userMove + "сабайт" + computerMove + ". Сиз уттуңуз!"); userScore ++; тыныгуу; case -1: // Компьютер System.out.println утуп алат (computerMove + "сабайт" + 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 loss = computerScore; int tie = numberOfGames - userScore - computerScore; кош процентWon = (утуп + ((кош) байлоо) / 2) / numberOfGames; // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); // Басылмалардын аталышы System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "УТУП КЕТТИ", "ЖОГОТУУЛАР", "БАЙЛАНЫШТАР", "ОЮНДАР ОЮНДАЛДЫ", "ПРОЦЕНТИ") ЖЕНДИ "); // 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. Оюнду негизги класстан баштаңыз

Негизги класста

Таш кагаз кайчы

класс жана чалуу

оюнду баштоо()

ыкма.

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

1585279 15
1585279 15

15 -кадам. Оюнуңузду сынап көрүңүз

Эми биз Rock, Paper, Scissors оюнун жазуу үчүн болгон күч -аракетибизди жумшадык, баарын чогултууга жана сынап көрүүгө убакыт келди!

Үлгү программасы

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

Сунушталууда: