Java -da qaya, kağız, qayçı oyunu necə etmək olar (şəkillərlə)

Mündəricat:

Java -da qaya, kağız, qayçı oyunu necə etmək olar (şəkillərlə)
Java -da qaya, kağız, qayçı oyunu necə etmək olar (şəkillərlə)

Video: Java -da qaya, kağız, qayçı oyunu necə etmək olar (şəkillərlə)

Video: Java -da qaya, kağız, qayçı oyunu necə etmək olar (şəkillərlə)
Video: Autocad dərsləri 2 dəqiqədə. Line aləti necə tətbiq olunur? 2024, Aprel
Anonim

Qaya, Kağız, Qayçı iki nəfərin oynadığı əl oyunudur. Hər iki insan "qaya, kağız, qayçı" deyər və eyni zamanda uzanan əli ilə üç cisimdən birini (qaya, kağız və ya qayçı) əmələ gətirərdi. Qalib əl formaları ilə müəyyən edilir. Qayçı kağızı döyür, kağız qaya vurur, qaya qayçı döyür. Hər iki oyunçu eyni əl formasında oynayırsa, bu bərabərlik sayılır. Bir oyunçunun istifadəçi, digərinin isə kompüter olduğu Rock, Paper, Scissors simulyasiya etmək üçün Java -da sadə bir oyun yazacağıq.

Addımlar

1585279 1 1
1585279 1 1

Addım 1. Əsas sinif yaradın və ona zəng edin

RockPaperScissors

.

Oyunu yazacağımız sinif bu olacaq. Kimi başqa bir şey adlandırmağı seçə bilərsiniz

Oyun

və ya

Əsas

. Konstruktor və əsas metod üçün metod bəyannamələrini yazın.

ictimai sinif RockPaperScissors {public RockPaperScissors () {} public static void main (String args) {}}

1585279 2 1
1585279 2 1

Addım 2. Əl hərəkətləri (qaya, kağız və ya qayçı) üçün bir siyahı yaradın

Qaya, kağız və ya qayçı göstərmək üçün simlərdən istifadə edə bilərik, ancaq bir sayım sabitlərimizi əvvəlcədən təyin etməyə imkan verir ki, bu da sayımdan istifadə etmək daha yaxşı bir dizayndır. Enum növümüzə zəng edəcəyik

Hərəkət et

dəyərlərlə

ROCK

KAĞIT

QAYAÇ

şəxsi nömrəni köçür {ROCK, PAPER, SCISSORS}

1585279 3 1
1585279 3 1

Addım 3. İki xüsusi sinif yaradın

İstifadəçi

Kompüter

.

Bu dərslər oyunçularımızı oyunda təmsil edəcək. Bu dərsləri ictimaiyyətə açmağı seçə bilərsiniz. The

İstifadəçi

sinif, istifadəçini ya qaya, kağız və ya qayçı tələb edən bir sinif olacaq, buna görə bir şey yazmalıyıq.

getMove ()

üsul The

Kompüter

sinif də olmalıdır a

getMove ()

kompüterin də hərəkət edə biləcəyi üsul. Bu üsullara yer tutucuları qoyacağıq və sonra tətbiq edəcəyik. The

İstifadəçi

class quran bir konstruktor tələb edəcək

Skaner

istifadəçi girişini almaq üçün obyekt. Qoyacağıq

Skaner

istifadəçi üçün xüsusi bir sahə olaraq qurun və sonra onu konstruktorda başladın. -Dən istifadə etdiyimiz üçün

Skaner

class, kodumuzun üstündə bunun üçün bir idxal ifadəsi yazmalıyıq. The

Kompüter

sinif bir konstruktor tələb etmir, buna görə də yazmağa ehtiyac yoxdur; başladıqda

Kompüter

obyekt, yalnız standart konstruktoru çağıracağıq. Budur bizimki

RockPaperScissors

sinif indi belə görünür:

java.util. Scanner idxal edin; ictimai sinif RockPaperScissors {özəl hərəkət Move {ROCK, PAPER, SCISSORS} private class User {private Scanner inputScanner; public User () {inputScanner = new Scanner (System.in); } public Move getMove () {// TODO: Bu metodu tətbiq edin return null; }} xüsusi sinif Kompüter {public Move getMove () {// TODO: Bu metodu tətbiq edin null qaytar; }} ictimai RockPaperScissors () {} ümumi statik boşluq əsas (String args) {}}

1585279 4 1
1585279 4 1

Addım 4. Yazın

getMove ()

üçün metod

Kompüter

sinif

Bu üsul təsadüfi bir nəticə verəcəkdir

Hərəkət et

. Bir sıra ala bilərik

Hərəkət et

nömrələrinə zəng vuraraq nömrələr yaza bilərsiniz

dəyərlər ()

üsul:

Move.values ()

. Bir təsadüfi seçmək üçün

Hərəkət et

bu dəyərlər silsiləsində, 0 ilə dəyərlər dizimizin uzunluğu arasında bir tamsayı olan təsadüfi bir indeks yaratmalıyıq. Bunu etmək üçün

nextInt ()

metodu

Təsadüfi

idxal etməyimiz lazım olan sinif

java.util

. Təsadüfi indeksi əldə etdikdən sonra geri qaytara bilərik

Hərəkət et

dəyərlər dizimizdən o indeksi.

public Move getMove () {Move hamle = Move.values (); Random random = new Random (); int index = random.nextInt (moves.length); dönüş hərəkətləri [indeks]; }

1585279 5 1
1585279 5 1

Addım 5. Yazın

getMove ()

üçün metod

İstifadəçi

sinif

Bu üsul a qaytaracaq

Hərəkət et

istifadəçinin daxil etdiyi məlumatlara uyğun gəlir. İstifadəçinin "qaya", "kağız" və ya "qayçı" yazmasını gözləyəcəyik. Birincisi, istifadəçidən daxil olmağı istəməliyik:

System.out.print ("Qaya, kağız və ya qayçı?")

. Sonra istifadə edin

nextLine ()

metodu

Skaner

istifadəçi girişini simli olaraq almaq üçün obyekt. İstifadəçinin düzgün bir hərəkət təqdim edib etmədiyini indi yoxlamalıyıq, amma istifadəçinin bir sözü səhv yazması ilə yumşaq ola bilərik. İstifadəçi girişinin ilk hərfinin "R" (qaya üçün), "P" (kağız üçün) və ya "S" (qayçı üçün) olub olmadığını yalnız yoxlayacağıq və bu işlə maraqlanmayacağıq. ilk olaraq istifadə edəcəyik

toUpperCase ()

metodu

Simli

İstifadəçi giriş sətrini bütün böyük hərflərə çevirmək üçün sinif. İstifadəçi uzaqdan düzgün bir giriş etməyibsə, istifadəçiyə yenidən müraciət edəcəyik. Sonra, istifadəçinin nə qoyduğundan asılı olaraq, müvafiq bir hərəkəti qaytaracağıq.

public Move getMove () {// İstifadəçiyə bildirin System.out.print ("Qaya, kağız və ya qayçı?"); // İstifadəçi girişini alın String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// İstifadəçi etibarlı giriş açarı (firstLetter) daxil etdi {case 'R': return Move. ROCK; hal 'P': Move. PAPER qaytar; halda 'S': Move. SCISSORS; }} // İstifadəçi etibarlı giriş daxil etməyib. Yenə də soruş. getMove () qaytarın; }

1585279 6
1585279 6

Addım 6. a yazın

yenidən oynamaq()

üçün metod

İstifadəçi

sinif

İstifadəçi oyunu təkrar -təkrar oynamağı bacarmalıdır. İstifadəçinin yenidən oynamaq istədiyini müəyyən etmək üçün a yazmalıyıq

yenidən oynamaq()

İstifadəçinin yenidən oynamağa qərar verib -vermədiyini oyuna izah edən boolean metodu. Bu üsulda

Skaner

İstifadəçidən "Bəli" və ya "Xeyr" almaq üçün əvvəllər konstruktorda başladıq. İstifadəçinin yenidən oynamaq istədiyini müəyyən etmək üçün yalnız ilk hərfin 'Y' olub olmadığını yoxlayacağıq. Hər hansı digər giriş, istifadəçinin yenidən oynamaq istəməməsi deməkdir.

public boolean playAgain () {System.out.print ("Yenidən oynamaq istəyirsən?"); String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); userInput.charAt (0) == 'Y' qaytar; }

1585279 7
1585279 7

Addım 7. Bağlayın

İstifadəçi

Kompüter

siniflər birlikdə

RockPaperScissors

sinif

İndi yazmağı bitirdik

İstifadəçi

Kompüter

dərslərdə, həqiqi oyunumuz üzərində işləməyə diqqət edə bilərik. Şəxsi sahələr yaradın

İstifadəçi

Kompüter

siniflər

RockPaperScissors

sinif Daxil olmaq üçün bu sahələrə daxil olmalıyıq

getMove ()

oyun oynayarkən üsullar. Üçün konstruktorda

RockPaperScissors

sinif, bu sahələri başladın. Hesabdakı hesabı da izləməli olacağıq

userScore

kompüter skoru

sahələrdə, konstruktorda 0 olaraq başlamalıyıq. Oyunların sayını da izləməliyik, bu da 0 olaraq başlayan bir sahə olacaq.

şəxsi istifadəçi; fərdi kompüter; şəxsi int userScore; şəxsi int computerScore; şəxsi int numberOfGames; ictimai RockPaperScissors () {user = new User (); kompüter = yeni Kompüter (); userScore = 0; computerScore = 0; sayıOfGames = 0; }

1585279 8
1585279 8

Addım 8. Uzadın

Hərəkət et

hər vəziyyətdə hansı hərəkətin qalib gəldiyini bizə izah edən bir metodu daxil edin.

A yazmalıyıq

müqayisəMoves ()

hərəkətlər eyni olarsa 0, cari hərəkət digər hərəkəti məğlub edərsə 1, cari hərəkət digər hərəkətdə uduzarsa -1 qaytaran metoddur. Bu oyunda qalibin müəyyən edilməsi üçün faydalı olacaq. Bu metodu tətbiq etmək üçün, hərəkətlər eyni olsa və buna görə də bərabərliyimiz varsa, ilk olaraq 0 qaytaracağıq. Sonra 1 və ya -1 qaytarılması üçün bir keçid ifadəsi yazın.

şəxsi nömrəni hərəkət etdir {ROCK, PAPER, Scissor; /** * Bu hərəkəti bərabərlik, qələbə və ya * məğlubiyyət müəyyən etmək üçün başqa bir hərəkətlə müqayisə edir. * * @param otherMove *, bu hərəkət digər hərəkəti üstələyərsə, * @Return 1 ilə müqayisə etmək üçün hərəkət edin, bu hərəkət * digər hərəkətə məğlub olarsa -1, bu hərəkətlər bağlandıqda 0 * / public int müqayisəMoves (Move otherMove) { / / Bağla (bu == otherMove) 0 qaytararsa; keçid (bu) {halda ROCK: qayıt (otherMove == QAYA? 1: -1); case PAPER: return (otherMove == ROCK? 1: -1); hal QAYDASI: qayıt (otherMove == PAPER? 1: -1); } // Bura heç vaxt çatmamalıdır 0; }}

1585279 9
1585279 9

Addım 9. a yaradın

startGame ()

-də metod

RockPaperScissors

sinif

Bu üsul oyunun oynanılması olacaq. Sadə bir ifadə qoyaraq başlayın

System.out.println

metodda.

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

1585279 10
1585279 10

Addım 10. İstifadəçidən və kompüterdən hərəkətlər alın

İçində

startGame ()

metodundan istifadə edin

getMove ()

-dan gələn üsullar

İstifadəçi

sinif və

Kompüter

istifadəçi və kompüterin hərəkətlərini öyrənmək üçün sinif.

UserMove = user.getMove () hərəkət etdirin; ComputerMove = computer.getMove () hərəkət etdirin; System.out.println ("\ n" " + userMove +" oynadın. "); System.out.println ("Kompüter oynandı" + computerMove + ". / N");

1585279 11
1585279 11

Addım 11. İki hərəkəti müqayisə edin və istifadəçinin qazandığını və ya kompüterin qazandığını təyin edin

İstifadə edin

müqayisəMoves ()

metodu

Hərəkət et

istifadəçinin qalib olub olmadığını müəyyən etmək üçün enum. İstifadəçi qazanırsa, istifadəçi hesabını 1 artırın. İstifadəçi itirirsə, kompüter hesabını 1 artır. Sonra bir oynanan oyun sayını artırın.

int müqayisəMoves = userMove.compareMoves (computerMove); keçid (müqayisəMoves) {halda 0: // System.out.println bağlayın ("Bağla!"); fasilə; hal 1: // İstifadəçi System.out.println qazanır (userMove + "beats" + computerMove + ". Siz qazandınız!"); userScore ++; fasilə; dava -1: // Kompüter System.out.println qazanır (computerMove + "beats" + userMove + ". Siz uduzdunuz."); computerScore ++; fasilə; } numberOfGames ++;

1585279 12
1585279 12

Addım 12. İstifadəçinin yenidən oynamaq istəməsini soruşun

İstifadəçi yenidən oynamaq istəyirsə, zəng edin

startGame ()

yenidən. Əks təqdirdə zəng edin

printGameStats ()

oyunun statistikasını çap edəcək. Bu üsulu növbəti addımda yazacağıq.

if (user.playAgain ()) {System.out.println (); startGame (); } başqa {printGameStats (); }

1585279 13
1585279 13

Addım 13. Yazın

printGameStats ()

üsul

Bu üsul oyunun statistikasını göstərəcək: qalibiyyətlərin sayı, itkilərin sayı, əlaqələrin sayı, oynanan oyunların sayı və istifadəçinin qazandığı oyunların faizi. Qazanılan oyunların faizi (# qalibiyyət + (# bərabərlik/2))/(# oynanan oyun) ilə hesablanır. Bu metoddan istifadə olunur

System.out.printf

formatlaşdırılmış mətni çap etmək.

şəxsi boşluq printGameStats () {int wins = userScore; int zərərləri = computerScore; int əlaqələri = numberOfGames - userScore - computerScore; ikiqat faizWon = (qalib + ((ikiqat) bağlar) / 2) / numberOfGames; // Satır System.out.print ("+"); printDashes (68); System.out.println ("+"); // Çap başlıqları System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "QƏLƏBƏTLƏR", "İTİBARLAR", "QALAQLAR", "OYNANAN OYUNLAR", "YÜZDƏ") QALDI "); // Satır 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 ("|"); // Çap dəyərləri System.out.printf ("| %6d | %6d | %6d | %12d | %13.2f %% | / n", qalibiyyətlər, itkilər, əlaqələr, sayıOfGames, faizWon * 100); // Satır System.out.print ("+"); printDashes (68); System.out.println ("+"); }

1585279 14
1585279 14

Addım 14. Oyuna əsas sinifdən başlayın

Əsas sinifdə, bir nümunəsini başladın

RockPaperScissors

sinif və zəng edin

startGame ()

üsul

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

1585279 15
1585279 15

Addım 15. Oyununuzu sınayın

Qaya, Kağız, Qayçı oyunu yazmaq üçün bütün səyləri keçmişik, indi hər şeyi tərtib etməyin və sınamağın vaxtı gəldi!

Nümunə Proqramı

java.util. Random idxal edin; java.util. Scanner idxal edin; ictimai sinif RockPaperScissors {şəxsi istifadəçi; fərdi kompüter; şəxsi int userScore; şəxsi int computerScore; şəxsi int numberOfGames; şəxsi nömrəni hərəkət etdir {ROCK, PAPER, Scissor; /** * Bu hərəkəti bərabərlik, qalibiyyət və ya * məğlubiyyət müəyyən etmək üçün başqa bir hərəkətlə müqayisə edir. * * @param otherMove *, bu hərəkət digər hərəkəti üstələyərsə, * @Return 1 ilə müqayisə etmək üçün hərəkət edin, bu hərəkət * digər hərəkətə məğlub olarsa -1, bu hərəkətlər bağlandıqda 0 * / public int müqayisəMoves (Move otherMove) { / / Bağla (bu == otherMove) 0 qaytararsa; keçid (bu) {halda ROCK: qayıt (otherMove == QAYA? 1: -1); case PAPER: return (otherMove == ROCK? 1: -1); hal QAYDASI: qayıt (otherMove == PAPER? 1: -1); } // Bura heç vaxt çatmamalıdır 0; }} xüsusi sinif İstifadəçi {özəl Scanner inputScanner; public User () {inputScanner = new Scanner (System.in); } public Move getMove () {// İstifadəçiyə System.out.print bildirin ("Qaya, kağız və ya qayçı?"); // İstifadəçi girişini alın String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// İstifadəçi etibarlı giriş açarı (firstLetter) daxil etdi {case 'R': return Move. ROCK; hal 'P': Move. PAPER qaytar; halda 'S': Move. SCISSORS; }} // İstifadəçi etibarlı giriş daxil etməyib. Yenə də soruş. getMove () qaytarın; } public boolean playAgain () {System.out.print ("Yenidən oynamaq istəyirsən?"); String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); userInput.charAt (0) == 'Y' qaytar; }} xüsusi sinif Kompüteri {public Move getMove () {Move move = Move.values (); Random random = new Random (); int index = random.nextInt (moves.length); dönüş hərəkətləri [indeks]; }} ictimai RockPaperScissors () {user = new User (); kompüter = yeni Kompüter (); userScore = 0; computerScore = 0; sayıOfGames = 0; } public void startGame () {System.out.println ("ROCK, PAPER, SCISSORS!"); // Hərəkətlər alın Move userMove = user.getMove (); ComputerMove = computer.getMove () hərəkət etdirin; System.out.println ("\ n" " + userMove +" oynadın. "); System.out.println ("Kompüter oynandı" + computerMove + ". / N"); // Hərəkətləri müqayisə edin və qalibi müəyyən edin int comparMoves = userMove.compareMoves (computerMove); keçid (müqayisəMoves) {halda 0: // System.out.println bağlayın ("Bağla!"); fasilə; hal 1: // İstifadəçi System.out.println qazanır (userMove + "beats" + computerMove + ". Siz qazandınız!"); userScore ++; fasilə; halda -1: // Kompüter System.out.println qazanır (computerMove + "beats" + userMove + ". Məğlub oldunuz."); computerScore ++; fasilə; } numberOfGames ++; // İstifadəçidən yenidən oynamasını istəyin, əgər (user.playAgain ()) {System.out.println (); startGame (); } başqa {printGameStats (); }} /*** Oyunun statistikasını çap edir. Bağları * qazanılan faiz nisbətində 1/2 qalibiyyət olaraq hesablayır. */ private void printGameStats () {int wins = userScore; int zərərləri = computerScore; int əlaqələri = numberOfGames - userScore - computerScore; ikiqat faizWon = (qalib + ((ikiqat) bağlar) / 2) / numberOfGames; // Satır System.out.print ("+"); printDashes (68); System.out.println ("+"); // Çap başlıqları System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "QƏLƏBƏTLƏR", "İTİBARLAR", "QALAQLAR", "OYNANAN OYUNLAR", "YÜZDƏ") QALDI "); // Satır 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 ("|"); // Çap dəyərləri System.out.printf ("| %6d | %6d | %6d | %12d | %13.2f %% | / n", qalibiyyətlər, itkilər, əlaqələr, sayıOfGames, faizWon * 100); // Satır System.out.print ("+"); printDashes (68); System.out.println ("+"); } şəxsi boş printDashes (int numberOfDashes) {üçün (int i = 0; i <numberOfDashes; i ++) {System.out.print ("-"); }} public static void main (String args) {RockPaperScissors oyunu = yeni RockPaperScissors (); game.startGame (); }}

Tövsiyə: