Java -da tosh, qog'oz, qaychi o'yinini qanday qilish kerak (rasmlar bilan)

Mundarija:

Java -da tosh, qog'oz, qaychi o'yinini qanday qilish kerak (rasmlar bilan)
Java -da tosh, qog'oz, qaychi o'yinini qanday qilish kerak (rasmlar bilan)

Video: Java -da tosh, qog'oz, qaychi o'yinini qanday qilish kerak (rasmlar bilan)

Video: Java -da tosh, qog'oz, qaychi o'yinini qanday qilish kerak (rasmlar bilan)
Video: Webtoon art hack for #clipstudiopaint - #webtoon #art #artist #arttips #webcomics #arthacks #shorts 2024, May
Anonim

Qoya, qog'oz, qaychi - bu ikki kishi o'ynaydigan qo'l o'yini. Ikkala odam ham "tosh, qog'oz, qaychi" deyishadi va keyin bir vaqtning o'zida qo'llarini cho'zgan holda uchta narsadan birini (tosh, qog'oz yoki qaychi) hosil qiladilar. G'olib qo'llar yordamida aniqlanadi. Qaychi qog'ozni uradi, qog'oz toshni uradi va tosh qaychi bilan uriladi. Agar ikkala o'yinchi ham bir xil qo'lda o'ynasa, bu durang hisoblanadi. Biz Java, Rok, Qog'oz, Qaychi simulyatsiyasi uchun oddiy o'yin yozamiz, bunda bitta o'yinchi foydalanuvchi, ikkinchisi esa kompyuter.

Qadamlar

1585279 1 1
1585279 1 1

Qadam 1. Asosiy sinfni yarating va uni chaqiring

RockPaperScissors

.

Bu o'yinni yozadigan sinf bo'ladi. Siz boshqa nom berishni tanlashingiz mumkin, masalan

O'yin

yoki

Asosiy

. Konstruktor va asosiy usul uchun deklaratsiyalarni yozing.

ommaviy klass RockPaperScissors {public RockPaperScissors () {} public static void main (String args) {}}

1585279 2 1
1585279 2 1

2 -qadam. Qo'l imo -ishoralari uchun ro'yxat tuzing (tosh, qog'oz yoki qaychi)

Biz tosh, qog'oz yoki qaychini tasvirlash uchun satrlardan foydalanishimiz mumkin edi, lekin sanab o'tish bizga o'z turg'unligini oldindan belgilashga imkon beradi, demak, sanashdan foydalanish yaxshiroq dizayndir. Biz enum turini chaqiramiz

Ko'chirish

qadriyatlar bilan

ROCK

QOG'OZ

va

Qaychi

Maxsus raqamni ko'chirish {ROCK, PAPER, SCISSORS}

1585279 3 1
1585279 3 1

3 -qadam. Ikkita xususiy sinf yarating

Foydalanuvchi

va

Kompyuter

.

Bu darslar bizning o'yinchilarimizni o'yinda namoyish etadi. Siz ushbu darslarni hammaga ochiq qilishni tanlashingiz mumkin. The

Foydalanuvchi

class - bu foydalanuvchini tosh, qog'oz yoki qaychi talab qiladigan sinf bo'ladi, shuning uchun biz yozishimiz kerak bo'ladi.

getMove ()

usul. The

Kompyuter

sinf ham bo'lishi kerak

getMove ()

Kompyuter ham harakat qila oladigan usul. Biz bu usullarga joy egalarini qo'yamiz va keyinroq ularni amalga oshiramiz. The

Foydalanuvchi

class ga o'rnatadigan konstruktor kerak bo'ladi

Skaner

foydalanuvchi kiritadigan ob'ekt. Biz qo'yamiz

Skaner

foydalanuvchi uchun shaxsiy maydon sifatida va keyin uni konstruktorda ishga tushiring. Biz foydalanayotganimiz uchun

Skaner

class, biz kodning yuqori qismiga import bayonotini yozishimiz kerak. The

Kompyuter

sinfga konstruktor kerak emas, shuning uchun biz uni yozishimiz shart emas; biz boshlaganimizda

Kompyuter

ob'ekt, biz faqat standart konstruktorni chaqiramiz. Mana bizniki

RockPaperScissors

sinf hozir shunday ko'rinadi:

java.util. Scanner -ni import qilish; umumiy sinf RockPaperScissors {private enum Move {ROCK, PAPER, SCISSORS} private class User {private Scanner inputScanner; public User () {inputScanner = new Scanner (System.in); } public Move getMove () {// TODO: Bu usulni qaytarish null; }} shaxsiy sinfli kompyuter {public Move getMove () {// TODO: Bu usulni qaytaring null; }} umumiy RockPaperScissors () {} umumiy statik void main (String args) {}}

1585279 4 1
1585279 4 1

4 -qadam

getMove ()

uchun usul

Kompyuter

sinf

Bu usul tasodifiy qaytadi

Ko'chirish

. Biz qatorni olishimiz mumkin

Ko'chirish

raqamlarini chaqirish orqali

qiymatlar()

usul:

Move.values ()

. Tasodifiy tanlash uchun

Ko'chirish

bu qiymatlar majmuasida sanab o'tish uchun biz 0 va qiymatlar qatorimiz uzunligi orasidagi tamsayı bo'lgan tasodifiy indeksni yaratishimiz kerak. Buning uchun biz dan foydalanishimiz mumkin

nextInt ()

usuli

Tasodifiy

biz import qilishimiz kerak bo'lgan sinf

java.util

. Tasodifiy indeksni olgandan so'ng, biz uni qaytarishimiz mumkin

Ko'chirish

bu indeksni bizning qiymatlar qatoridan.

public Move getMove () {Move move = Move.values (); Tasodifiy tasodif = yangi tasodifiy (); int indeksi = random.nextInt (harakatlarning uzunligi); qaytish harakatlari [indeks]; }

1585279 5 1
1585279 5 1

5 -qadam

getMove ()

uchun usul

Foydalanuvchi

sinf

Bu usul qaytadi

Ko'chirish

foydalanuvchi kiritgan ma'lumotlarga mos keladi. Biz foydalanuvchidan "tosh", "qog'oz" yoki "qaychi" yozishini kutamiz. Birinchidan, biz foydalanuvchini kirishni so'rashimiz kerak:

System.out.print ("Tosh, qog'oz yoki qaychi?")

. Keyin dan foydalaning

nextLine ()

usuli

Skaner

foydalanuvchi kiritishni mag'lubiyat sifatida olish uchun ob'ekt. Endi biz foydalanuvchining to'g'ri harakat qilganligini tekshirishimiz kerak, lekin agar foydalanuvchi so'zni noto'g'ri yozgan bo'lsa, biz yumshoq bo'lishimiz mumkin. Shunday qilib, biz faqat foydalanuvchi kiritgan birinchi harf "R" (rok uchun), "P" (qog'oz uchun) yoki "S" (qaychi uchun) yoki yo'qligini tekshirib ko'ramiz va biz bu ishni qiziqtirmaymiz, chunki biz birinchi navbatda foydalanamiz

toUpperCase ()

usuli

Ip

Foydalanuvchi kirish satrini katta harflar bilan yozish uchun sinf. Agar foydalanuvchi masofadan turib to'g'ri kirishni kiritmagan bo'lsa, biz foydalanuvchini yana taklif qilamiz. Keyin, foydalanuvchi nima kiritganiga qarab, biz tegishli harakatni qaytaramiz.

public Move getMove () {// Foydalanuvchiga System.out.print ("Tosh, qog'oz yoki qaychi?") so'rovini yuborish; // String userInput = inputScanner.nextLine () foydalanuvchi kirishini oling; userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Foydalanuvchi to'g'ri kirish kalitini kiritdi (firstLetter) {case 'R': return Move. ROCK; case 'P': Move. PAPER -ni qaytarish; case 'S': Move. SCISSORS; }} // Foydalanuvchi to'g'ri kiritmagan. Yana taklif. getMove () ni qaytaring; }

1585279 6
1585279 6

6 -qadam

playAgain ()

uchun usul

Foydalanuvchi

sinf

Foydalanuvchi o'yinni qayta -qayta o'ynashi kerak. Foydalanuvchining qayta o'ynashni xohlashini aniqlash uchun biz a yozishimiz kerak

playAgain ()

Foydalanuvchi yana o'ynashga qaror qilganmi yoki yo'qmi, bu o'yinni mantiqiy tarzda qaytaradigan usul. Ushbu usulda biz

Skaner

biz ilgari konstruktorda foydalanuvchidan "Ha" yoki "Yo'q" olishni boshlaganmiz. Foydalanuvchining qayta o'ynashni xohlashini aniqlash uchun biz faqat birinchi harf "Y" ekanligini tekshiramiz. Boshqa har qanday kirish foydalanuvchi qayta o'ynashni xohlamasligini bildiradi.

public boolean playAgain () {System.out.print ("Qayta o'ynashni xohlaysizmi?"); String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); userInput.charAt (0) == 'Y' ni qaytarish; }

1585279 7
1585279 7

7 -qadam

Foydalanuvchi

va

Kompyuter

ichida birgalikda darslar

RockPaperScissors

sinf

Endi biz yozishni tugatdik

Foydalanuvchi

va

Kompyuter

darslar, biz o'z o'yinimiz ustida ishlashga e'tibor qaratishimiz mumkin. Shaxsiy maydonlarni yarating

Foydalanuvchi

va

Kompyuter

dagi sinflar

RockPaperScissors

sinf Biz kirish uchun bu maydonlarga kirishimiz kerak bo'ladi

getMove ()

O'yin o'ynayotganimizda usullar. Uchun konstruktorda

RockPaperScissors

sinf, bu maydonlarni boshlang. Shuningdek, biz hisobni kuzatib borishimiz kerak bo'ladi

userScore

va

computerScore

maydonlarda biz konstruktorda 0 deb boshlashimiz kerak. Biz o'yinlar sonini ham kuzatib borishimiz kerak, bu ham 0 deb boshlangan maydon bo'ladi.

shaxsiy foydalanuvchi; shaxsiy kompyuter; shaxsiy int userScore; shaxsiy int computerScore; shaxsiy int numberOfGames; ommaviy RockPaperScissors () {user = new User (); kompyuter = yangi kompyuter (); userScore = 0; computerScore = 0; numberOfGames = 0; }

1585279 8
1585279 8

8 -qadam

Ko'chirish

har bir holatda qaysi harakat g'alaba qozonishini aytadigan usulni o'z ichiga oladi.

Biz a yozishimiz kerak

solishtirishMoves ()

Harakatlar bir xil bo'lsa 0 qaytaradi, agar harakat boshqa harakatni mag'lub qilsa 1, joriy harakat boshqa harakatda yutqazsa -1 qaytaradi. Bu o'yinda g'olibni aniqlash uchun foydali bo'ladi. Bu usulni amalga oshirish uchun, avvalo 0 qaytaramiz, agar harakatlar bir xil bo'lsa va shuning uchun bizda durang bo'lsa. Keyin 1 yoki -1 ni qaytarish uchun kalit so'zini yozing.

xususiy enum Move {ROCK, PAPER, Scissor; /** * Bu harakatni durang, g'alaba yoki * mag'lubiyatni aniqlashning boshqa harakati bilan solishtiradi. * * @param otherMove *, agar bu harakat boshqa harakatni mag'lub qilsa * @Return 1 bilan taqqoslash uchun harakatlaning, agar bu harakat * boshqa harakatga yutqazsa -1, agar bu harakatlar teng bo'lsa * / public int solishtirishMoves (Move otherMove) { / / Bog'lang, agar (this == otherMove) 0 qaytarsa; switch (this) {case ROCK: return (otherMove == SCISSORS? 1: -1); case PAPER: return (otherMove == ROCK? 1: -1); ish qaychi: qaytish (otherMove == PAPER? 1: -1); } // Bu erga hech qachon etib bormaslik kerak 0; }}

1585279 9
1585279 9

Qadam 9. a yaratish

startGame ()

ichida usul

RockPaperScissors

sinf

Bu usul o'yinni o'ynashi bo'ladi. Oddiy so'z bilan boshlang

System.out.println

usulda.

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

1585279 10
1585279 10

Qadam 10. Foydalanuvchi va kompyuterdan harakatlarni oling

Ichida

startGame ()

usulidan foydalaning

getMove ()

dan olingan usullar

Foydalanuvchi

sinf va

Kompyuter

foydalanuvchi va kompyuter harakatlarini olish uchun sinf.

UserMove = user.getMove () ni ko'chiring; ComputerMove = computer.getMove () ni ko'chiring; System.out.println ("\ nSiz" + userMove + "o'ynadingiz."); System.out.println ("Kompyuter o'ynadi" + computerMove + ". / N");

1585279 11
1585279 11

Qadam 11. Ikkala harakatni solishtiring va foydalanuvchi yutganini yoki kompyuter yutganini aniqlang

Dan foydalaning

solishtiringMoves ()

dan olingan usul

Ko'chirish

enum, foydalanuvchi yutganmi yoki yo'qligini aniqlash uchun. Agar foydalanuvchi g'alaba qozongan bo'lsa, foydalanuvchi reytingini 1 ga oshiring. Agar foydalanuvchi yutqazsa, kompyuter hisobini 1 ga oshiring. Agar durang natija qayd etilgan bo'lsa, hech qanday ballni oshirmang. Keyin bitta o'ynagan o'yinlar sonini ko'paytiring.

int solishtirishMoves = userMove.compareMoves (computerMove); switch (comparMoves) {0 holat: // System.out.println bog'lang ("Bog'la!"); tanaffus; 1 -holat: // Foydalanuvchi System.out.printlnni yutadi (userMove + "beats" + computerMove + ". Siz yutdingiz!"); userScore ++; tanaffus; case -1: // Kompyuter System.out.printlnni yutadi (computerMove + "beats" + userMove + ". Siz yutqazdingiz."); computerScore ++; tanaffus; } numberOfGames ++;

1585279 12
1585279 12

Qadam 12. Foydalanuvchi yana o'ynashni xohlaydimi, deb so'rang

Agar foydalanuvchi yana o'ynamoqchi bo'lsa, qo'ng'iroq qiling

startGame ()

yana Aks holda, qo'ng'iroq qiling

printGameStats ()

bu o'yin statistikasini chop etadi. Bu usulni keyingi bosqichda yozamiz.

if (user.playAgain ()) {System.out.println (); startGame (); } boshqa {printGameStats (); }

1585279 13
1585279 13

13 -qadam

printGameStats ()

usul.

Bu usul o'yin statistikasini ko'rsatadi: yutuqlar soni, yo'qotishlar soni, bog'lanishlar soni, o'tkazilgan o'yinlar soni va foydalanuvchi yutgan o'yinlar foizi. G'alaba qozongan o'yinlar foizi (# g'alaba + (# durang/2))/(# o'yin o'tkazilgan) bilan hisoblanadi. Bu usuldan foydalaniladi

System.out.printf

formatlangan matnni chop etish uchun.

private void printGameStats () {int wins = userScore; int yo'qotishlar = computerScore; int tie = numberOfGames - userScore - computerScore; er -xotin foizWon = (g'alaba + ((dubli) galstuk) / 2) / numberOfGames; // Chiziq System.out.print ("+"); printDashes (68); System.out.println ("+"); // Bosib chiqarish sarlavhalari System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "G'ALABA", "YO'QOLISH", "BILGILAR", "O'YINLAR", "FOZI) YUTUQ"); // Chiziq 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 ("|"); // Bosib chiqarish qiymatlari System.out.printf ("| %6d | %6d | %6d | %12d | %13.2f %% | / n", g'alabalar, yo'qotishlar, bog'lanishlar, numberOfGames, foizWon * 100); // Chiziq System.out.print ("+"); printDashes (68); System.out.println ("+"); }

1585279 14
1585279 14

14 -qadam O'yinni asosiy sinfda boshlang

Asosiy sinfda, misolini ishga tushiring

RockPaperScissors

sinfga qo'ng'iroq qiling

startGame ()

usul.

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

1585279 15
1585279 15

15 -qadam. O'yiningizni sinab ko'ring

Endi biz "Rok, qog'oz, qaychi" o'yinini yozish uchun ko'p harakatlarni boshdan kechirdik, hamma narsani yig'ish va sinab ko'rish vaqti keldi!

Namuna dasturi

java.util. Random -ni import qilish; java.util. Scanner -ni import qilish; ommaviy sinf RockPaperScissors {Maxsus foydalanuvchi foydalanuvchisi; shaxsiy kompyuter; shaxsiy int userScore; shaxsiy int computerScore; shaxsiy int numberOfGames; xususiy enum Move {ROCK, PAPER, Scissor; /** * Bu harakatni durang, g'alaba yoki * mag'lubiyatni aniqlashning boshqa harakati bilan solishtiradi. * * @param otherMove *, agar bu harakat boshqa harakatni mag'lub qilsa * @Return 1 bilan taqqoslash uchun harakatlaning, agar bu harakat * boshqa harakatga yutqazsa -1, agar bu harakatlar teng bo'lsa * / public int müqayisəMoves (Move otherMove) { / / Bog'lang, agar (this == otherMove) 0 qaytarsa; switch (this) {case ROCK: return (otherMove == SCISSORS? 1: -1); case PAPER: return (otherMove == ROCK? 1: -1); ish qaychi: qaytish (otherMove == PAPER? 1: -1); } // Bu erga hech qachon etib bormaslik kerak 0; }} shaxsiy sinf User {private Scanner inputScanner; public User () {inputScanner = new Scanner (System.in); } public Move getMove () {// Foydalanuvchiga System.out.print ("Qoya, qog'oz yoki qaychi?") so'rovini yuborish; // String userInput = inputScanner.nextLine () foydalanuvchi kirishini oling; userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Foydalanuvchi to'g'ri kirish kalitini kiritdi (firstLetter) {case 'R': return Move. ROCK; case 'P': Move. PAPER -ni qaytarish; case 'S': Move. SCISSORS; }} // Foydalanuvchi to'g'ri kiritmagan. Yana taklif. getMove () ni qaytaring; } public boolean playAgain () {System.out.print ("Qayta o'ynashni xohlaysizmi?"); String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); userInput.charAt (0) == 'Y' ni qaytarish; }} shaxsiy sinf Kompyuter {public Move getMove () {Move move = Move.values (); Tasodifiy tasodif = yangi tasodifiy (); int indeksi = random.nextInt (harakatlarning uzunligi); qaytish harakatlari [indeks]; }} ommaviy RockPaperScissors () {user = new User (); kompyuter = yangi kompyuter (); userScore = 0; computerScore = 0; numberOfGames = 0; } public void startGame () {System.out.println ("ROCK, PAPER, SCISSORS!"); // Harakatlarni oling Move userMove = user.getMove (); ComputerMove = computer.getMove () ni ko'chiring; System.out.println ("\ nSiz" + userMove + "o'ynadingiz."); System.out.println ("Kompyuter o'ynadi" + computerMove + ". / N"); // Harakatlarni solishtiring va g'olibni aniqlang int comparMoves = userMove.compareMoves (computerMove); switch (solishtirishMoves) {0 holat: // System.out.println bog'lang ("bog'lang!"); tanaffus; 1 -holat: // Foydalanuvchi System.out.printlnni yutadi (userMove + "beats" + computerMove + ". Siz yutdingiz!"); userScore ++; tanaffus; ish -1: // Kompyuter System.out.printlnni yutadi (computerMove + "beats" + userMove + ". Siz yutqazdingiz."); computerScore ++; tanaffus; } numberOfGames ++; // Agar foydalanuvchi (user.playAgain ()) {System.out.println (); startGame (); } boshqa {printGameStats (); }} /*** O'yin statistikasini chop etadi. Bog'lanishlarni 1/2 yutuq * foizli yutuq deb hisoblaydi. */ private void printGameStats () {int wins = userScore; int yo'qotishlar = computerScore; int tie = numberOfGames - userScore - computerScore; er -xotin foizWon = (g'alaba + ((dubli) galstuk) / 2) / numberOfGames; // Chiziq System.out.print ("+"); printDashes (68); System.out.println ("+"); // Bosib chiqarish sarlavhalari System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "G'ALaba", "YO'QOLISH", "GALATLAR", "O'YINLAR", "FOZI) YUTUQ"); // Chiziq 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 ("|"); // Bosib chiqarish qiymatlari System.out.printf ("| %6d | %6d | %6d | %12d | %13.2f %% | / n", g'alabalar, yo'qotishlar, bog'lanishlar, numberOfGames, foizlarWon * 100); // Chiziq 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 (); }}

Tavsiya: