Ինչպես պատրաստել ժայռի, թղթի, մկրատի խաղ Java- ում (նկարներով)

Բովանդակություն:

Ինչպես պատրաստել ժայռի, թղթի, մկրատի խաղ Java- ում (նկարներով)
Ինչպես պատրաստել ժայռի, թղթի, մկրատի խաղ Java- ում (նկարներով)

Video: Ինչպես պատրաստել ժայռի, թղթի, մկրատի խաղ Java- ում (նկարներով)

Video: Ինչպես պատրաստել ժայռի, թղթի, մկրատի խաղ Java- ում (նկարներով)
Video: Windows Recovery Environment WinRE: Explained 2024, Մայիս
Anonim

Ռոքը, թուղթը, մկրատը ձեռքով խաղ է, որը խաղում են երկու հոգի: Երկուսն էլ կասեն «ժայռ, թուղթ, մկրատ», այնուհետև միաժամանակ երեք ձեռքերից մեկը (ժայռ, թուղթ կամ մկրատ) մեկնած ձեռքով կկազմեն մեկը: Հաղթողը որոշվում է ձեռքի կազմավորումներով: Մկրատը ծեծում է թուղթ, թուղթը `ռոք, իսկ ժայռը` մկրատ: Եթե երկու խաղացողներն էլ խաղում են նույն ձեռքի ձևավորմամբ, ապա դա համարվում է ոչ -ոքի: Մենք Java- ում կգրենք մի պարզ խաղ ՝ Rock, Paper, Scissors մոդելավորելու համար, որտեղ խաղացողներից մեկը օգտվող է, իսկ մյուս խաղացողը ՝ համակարգիչ:

Քայլեր

1585279 1 1
1585279 1 1

Քայլ 1. Ստեղծեք հիմնական դասարան և զանգահարեք այն

RockPaperScissors

.

Սա կլինի այն դասարանը, որտեղ մենք կգրենք խաղը: Դուք կարող եք ընտրել այն այլ անուն տալը, օրինակ

Խաղ

կամ

Հիմնական

. Մեթոդի հայտարարագրերում գրեք կոնստրուկտորի համար և հիմնական մեթոդը:

հանրային դաս RockPaperScissors {public RockPaperScissors () {} public static void main (String args) {}}

1585279 2 1
1585279 2 1

Քայլ 2. Ստեղծեք թվարկում ձեռքի շարժումների համար (ժայռ, թուղթ կամ մկրատ):

Մենք կարող ենք օգտագործել տողեր `քար, թուղթ կամ մկրատ ներկայացնելու համար, բայց թվարկումը թույլ է տալիս կանխորոշել մեր հաստատունները, ինչը նշանակում է, որ թվարկումը օգտագործելն ավելի լավ ձև է: Մենք կանվանենք մեր enum տիպը

Տեղափոխել

արժեքների հետ

ՌՈՔ

Թուղթ

և

Մկրատ

մասնավոր հաշվառում Տեղափոխել {ROCK, PAPER, SCISSORS}

1585279 3 1
1585279 3 1

Քայլ 3. Ստեղծեք երկու մասնավոր դասարան

Օգտվող

եւ

Համակարգիչ

.

Այս դասերը կներկայացնեն մեր խաղացողներին խաղի մեջ: Դուք կարող եք ընտրել, որ այս դասերը հրապարակվեն: The

Օգտվող

դասը կլինի այն դասը, որը օգտագործողին հուշում է ժայռ, թուղթ կամ մկրատ, ուստի մենք պետք է գրենք

getMove ()

մեթոդը: The

Համակարգիչ

դասը պետք է ունենա նաև ա

getMove ()

մեթոդ, որպեսզի համակարգիչը նույնպես կարողանա քայլ կատարել: Այս մեթոդների մեջ մենք կդնենք տեղապահներ և դրանք կիրականացնենք ավելի ուշ: The

Օգտվող

դասը կպահանջի կոնստրուկտոր, որը ստեղծում է

Սկաներ

օբյեկտ, որը պետք է ընդունի օգտվողի մուտքը: Մենք կդնենք

Սկաներ

որպես օգտագործողի մասնավոր դաշտ, այնուհետև այն նախաձեռնել կոնստրուկտորում: Քանի որ մենք օգտագործում ենք

Սկաներ

class, մենք պետք է դրա համար վերևում գրենք ներմուծման հայտարարություն: The

Համակարգիչ

դասը կոնստրուկտոր չի պահանջում, ուստի մեզ պետք չէ գրել: երբ մենք նախաձեռնում ենք

Համակարգիչ

օբյեկտ, մենք պարզապես կանչելու ենք կանխադրված կոնստրուկտոր: Ահա թե ինչ է մեր

RockPaperScissors

դասը այժմ նման է.

ներմուծել java.util. Scanner; հանրային դաս RockPaperScissors {private enum Move {ROCK, PAPER, SCISSORS} մասնավոր դաս User {private Scanner inputScanner; public User () {inputScanner = նոր սկաներ (System.in); } public Move getMove () {// TODO: Իրականացնել այս մեթոդը return null; }} մասնավոր դասի համակարգիչ {public Move getMove () {// TODO: Իրականացնել այս մեթոդը return null; }} public RockPaperScissors () {} public static void main (String args) {}}

1585279 4 1
1585279 4 1

Քայլ 4. Գրեք

getMove ()

մեթոդը ՝

Համակարգիչ

դասարան:

Այս մեթոդը կվերադառնա պատահական

Տեղափոխել

. Մենք կարող ենք ստանալ զանգված

Տեղափոխել

թվարկումները ՝ զանգահարելով

արժեքներ ()

մեթոդ:

Move.values ()

. Պատահական ընտրելու համար

Տեղափոխել

այս արժեքների զանգվածում հաշվելը, մենք պետք է գեներացնենք պատահական ինդեքս, որը ամբողջ թիվ է 0 -ի և մեր արժեքների զանգվածի միջև: Դա անելու համար մենք կարող ենք օգտագործել

nextInt ()

-ի մեթոդը

Պատահական

դաս, որից մենք պետք է ներմուծենք

java.util

. Պատահական ինդեքսը ստանալուց հետո կարող ենք վերադարձնել

Տեղափոխել

այդ ցուցանիշի մեր արժեքների զանգվածից:

հրապարակային Տեղափոխել getMove () {Տեղափոխել տեղափոխել = Տեղափոխել. արժեքներ (); Պատահական պատահական = նոր Պատահական (); int index = random.nextInt (moves.length); վերադարձի շարժումներ [ցուցիչ]; }

1585279 5 1
1585279 5 1

Քայլ 5. Գրեք

getMove ()

մեթոդը ՝

Օգտվող

դասարան:

Այս մեթոդը կվերադարձնի ա

Տեղափոխել

համապատասխանում է օգտագործողի մուտքին: Մենք ակնկալում ենք, որ օգտագործողը կգրի կամ «ռոք», «թուղթ», կամ «մկրատ»: Նախ, մենք պետք է օգտագործողին հուշենք մուտքագրման համար.

System.out.print («Rockայռ, թուղթ, թե՞ մկրատ»)

. Այնուհետեւ օգտագործեք

հաջորդ տող ()

-ի մեթոդը

Սկաներ

օբյեկտ ՝ օգտագործողի մուտքը որպես տող ստանալու համար: Այժմ մենք պետք է ստուգենք, արդյոք օգտվողը ներկայացրել է վավեր քայլ, բայց մենք կարող ենք մեղմ լինել, եթե օգտագործողը սխալ է գրել մի բառ: Այսպիսով, մենք միայն կստուգենք, արդյոք օգտվողի մուտքի առաջին տառը կա՞մ «R» (ռոքի համար), «P» (թղթի համար), կա՛մ «S» (մկրատի համար), և գործը մեզ չի մտահոգի, քանի որ մենք նախ կօգտագործենք

toUpperCase ()

-ի մեթոդը

Լարային

դաս ՝ օգտվողի մուտքագրման տողը մեծատառ դարձնելու համար: Եթե օգտվողը չի մուտքագրել հեռակա ճիշտ մուտքագրում, մենք նորից կհուշենք օգտվողին: Այնուհետեւ, կախված այն բանից, թե ինչ է դրել օգտվողը, մենք կվերադարձնենք համապատասխան քայլ:

public Move getMove () {// Տեղեկացրեք օգտվողին System.out.print («Rockայռ, թուղթ, թե՞ մկրատ»); // Ստացեք օգտվողի մուտքագրում String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); եթե (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Օգտվողը մուտքագրել է մուտքի վավեր անջատիչ (firstLetter) {case 'R': return Move. ROCK; դեպք 'P'. վերադարձ Move. PAPER; գործ 'S': վերադարձ Տեղափոխել. SCISSORS; }} // Օգտագործողը վավեր մուտքագրում չի մուտքագրել: Կրկին հուշեք: վերադարձ getMove (); }

1585279 6
1585279 6

Քայլ 6. Գրեք ա

կրկին խաղալ()

մեթոդը ՝

Օգտվող

դասարան:

Օգտագործողը պետք է կարողանա խաղը անընդհատ խաղալ: Որոշելու համար, արդյոք օգտագործողը ցանկանում է նորից խաղալ, մենք պետք է գրենք a

կրկին խաղալ()

մեթոդ, որը վերադարձնում է բուլյան ՝ խաղին պատմելով ՝ օգտվողը որոշել է նորից խաղալ, թե ոչ: Այս մեթոդով մենք օգտագործում ենք

Սկաներ

որ մենք նախապես նախաձեռնել էինք կոնստրուկտորում օգտվողից ստանալ «Այո» կամ «Ոչ»: Մենք միայն կստուգենք, արդյոք առաջին տառը «Y» է ՝ որոշելու, թե արդյոք օգտվողը ցանկանում է նորից խաղալ: Otherանկացած այլ մուտք կնշանակի, որ օգտվողը չի ցանկանում նորից խաղալ:

public boolean playAgain () {System.out.print («Ուզու՞մ ես նորից խաղալ»); String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); վերադարձնել userInput.charAt (0) == 'Y'; }

1585279 7
1585279 7

Քայլ 7. Միացրեք

Օգտվող

եւ

Համակարգիչ

դասերը միասին

RockPaperScissors

դասարան:

Հիմա, երբ մենք ավարտեցինք գրելը

Օգտվող

եւ

Համակարգիչ

դասեր, մենք կարող ենք կենտրոնանալ մեր իրական խաղի վրա աշխատելու վրա: Ստեղծեք մասնավոր դաշտեր

Օգտվող

եւ

Համակարգիչ

դասարաններում,

RockPaperScissors

դասարան: Մենք պետք է մուտք գործենք այս դաշտեր ՝ մուտք գործելու համար

getMove ()

մեթոդները, երբ մենք խաղում ենք խաղը: Համար կոնստրուկտորում

RockPaperScissors

դաս, նախաձեռնել այս դաշտերը: Մենք նաև պետք է հետևենք հաշվի մեջ հաշիվին

userScore

եւ

համակարգչային միավոր

դաշտեր, որոնք մենք պետք է սկսենք որպես 0 կոնստրուկտորում: Մենք պետք է հետևենք նաև խաղերի քանակին, որոնք նույնպես կլինեն 0 -ի նախաձեռնած դաշտ:

մասնավոր օգտագործող; մասնավոր համակարգչային համակարգիչ; մասնավոր int userScore; մասնավոր int computerScore; մասնավոր int numberOfGames; հանրային RockPaperScissors () {user = նոր օգտվող (); համակարգիչ = նոր Համակարգիչ (); userScore = 0; համակարգչային միավոր = 0; numberOfGames = 0; }

1585279 8
1585279 8

Քայլ 8. Երկարացրեք

Տեղափոխել

enum ներառել մի մեթոդ, որը մեզ ասում է, թե որ շարժումն է հաղթում յուրաքանչյուր դեպքում:

Մենք պետք է գրենք ա

համեմատելՇարժվում է ()

մեթոդը, որը վերադարձնում է 0 -ը, եթե շարժումները նույնն են, 1 -ը, եթե ընթացիկ շարժումը հաղթում է մյուսին, և -1, եթե ընթացիկ շարժումը պարտվում է մյուս քայլին: Սա օգտակար կլինի խաղի հաղթողին որոշելու համար: Այս մեթոդը կյանքի կոչելու համար մենք նախ կվերադարձնենք 0, եթե շարժումները նույնն են, և, հետևաբար, մենք ունենք ոչ -ոքի: Այնուհետև գրեք անջատիչ հայտարարություն 1 կամ -1 վերադարձնելու համար:

private enum Տեղափոխել {ROCK, PAPER, SCISSORS; /** * Այս քայլը համեմատում է ոչ -ոքի, հաղթանակ կամ * պարտություն որոշելու մեկ այլ քայլի հետ: * * @param otherMove * տեղափոխել ՝ համեմատելու * @վերադարձ 1 -ի հետ, եթե այս քայլը հաղթում է մյուս քայլին, -1, եթե այս քայլը պարտվում է * մյուս քայլին, 0, եթե այս շարժումները կապեն * / public int compareMoves (Տեղափոխել այլ շարժում) { / / Կապել, եթե (սա == otherMove) վերադարձնել 0; switch (this) {case ROCK: return (otherMove == SCISSORS 1: -1); պատյան Թուղթ. վերադարձ (այլՇարժել == ՌՈՔ? 1: -1); պատյան ՄԱՇԻՆՉԵՐ. վերադարձ (այլՇարժել == ԹԱՐԹ. 1: -1); } // Երբեք չպետք է հասնի այստեղ վերադարձ 0; }}

1585279 9
1585279 9

Քայլ 9. Ստեղծեք ա

սկսել խաղը()

մեթոդը մեջ

RockPaperScissors

դասարան:

Այս մեթոդը կլինի խաղի խաղը: Սկսեք ՝ պարզ բան դնելով

System.out.println

մեթոդի մեջ:

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

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. Համեմատեք երկու քայլերը և որոշեք ՝ շահեց օգտվողը, թե՞ համակարգիչը:

Օգտագործեք ՝

համեմատելՇարժվում է ()

մեթոդից ՝

Տեղափոխել

enum ՝ որոշելու ՝ օգտվողը շահե՞լ է, թե՞ ոչ: Եթե օգտվողը հաղթեց, ավելացրեք օգտվողի միավորը 1. Եթե օգտվողը պարտվեց, բարձրացրեք համակարգչի միավորը 1. Եթե ոչ -ոքի է եղել, մի ավելացրեք հաշիվներից որևէ մեկը: Այնուհետեւ ավելացրեք խաղերի քանակը մեկով:

int compareMoves = userMove.compareMoves (համակարգչային շարժում); անջատիչ (համեմատել շարժումները) {case 0: // Tie System.out.println («Կապել»); ընդմիջում; դեպք 1: // Օգտվողը շահում է System.out.println (userMove + "beats" + computerMove + ". Դուք հաղթել եք"); userScore ++; ընդմիջում; դեպք -1: // Համակարգիչը հաղթում է System.out.println (computerMove + "beats" + 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 հաղթում է = userScore; int կորուստներ = computerScore; int կապեր = numberOfGames - userScore - computerScore; կրկնակի տոկոս Հաղթեց = (հաղթում է + ((կրկնակի) ոչ -ոքի) / 2) / numberOfGames; // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); // Տիտղոսաթերթեր System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "WINS", "LOSSES", "TIES", "GAMES PLAYED", "PERCENTAGE ՀԱONԹԵ "»); // 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, տոկոսային Հաղթանակ * 100); // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); }

1585279 14
1585279 14

Քայլ 14. Խաղը սկսեք հիմնական դասից:

Հիմնական դասում նախաստորագրեք օրինակ

RockPaperScissors

դասարան և զանգահարեք

սկսել խաղը()

մեթոդը:

public static void main (String args) {RockPaperScissors խաղ = նոր RockPaperScissors (); game.startGame (); }

1585279 15
1585279 15

Քայլ 15. Փորձարկեք ձեր խաղը:

Այժմ, երբ մենք անցել ենք Rock, Paper, Scissors խաղը գրելու բոլոր ջանքերը, ժամանակն է կազմել և փորձարկել ամեն ինչ:

Նմուշի ծրագիր

ներմուծել java.util. Random; ներմուծել java.util. Scanner; հանրային դաս RockPaperScissors {մասնավոր օգտագործող; մասնավոր համակարգչային համակարգիչ; մասնավոր int userScore; մասնավոր int computerScore; մասնավոր int numberOfGames; private enum Տեղափոխել {ROCK, PAPER, SCISSORS; /** * Այս քայլը համեմատում է մեկ այլ քայլի հետ `ոչ -ոքի, հաղթանակ կամ * պարտություն որոշելու հետ: * * @param otherMove * տեղափոխել ՝ համեմատելու * @վերադարձ 1 -ի հետ, եթե այս քայլը հաղթում է մյուս քայլին, -1, եթե այս քայլը պարտվում է * մյուս քայլին, 0, եթե այս շարժումները կապեն * / public int compareMoves (Տեղափոխել այլ շարժում) { / / Կապել, եթե (սա == otherMove) վերադարձնի 0; switch (this) {case ROCK: return (otherMove == SCISSORS 1: -1); պատյան Թուղթ. վերադարձ (այլՇարժել == ՌՈՔ? 1: -1); պատյան ՄԱՇԻՆՉԵՐ. վերադարձ (այլՇարժել == ԹԱՐԹ. 1: -1); } // Երբեք չպետք է հասնի այստեղ վերադարձ 0; }} մասնավոր դաս User {private Scanner inputScanner; public User () {inputScanner = նոր սկան (System.in); } public Move getMove () {// Հարցրեք օգտվողին System.out.print («Rockայռ, թուղթ, թե՞ մկրատ»); // Ստացեք օգտվողի մուտքագրում String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); եթե (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Օգտվողը մուտքագրել է մուտքի վավեր անջատիչ (firstLetter) {case 'R': return Move. ROCK; գործ 'P'. վերադարձ Move. PAPER; գործ 'S': վերադարձ Տեղափոխել. SCISSORS; }} // Օգտվողը վավեր մուտքագրում չի մուտքագրել: Կրկին հուշեք: վերադարձ getMove (); } public boolean playAgain () {System.out.print («Ուզու՞մ ես նորից խաղալ»); String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); վերադարձնել userInput.charAt (0) == 'Y'; }} մասնավոր դաս համակարգիչ {public Move getMove () {Տեղափոխել move = Move.values (); Պատահական պատահական = նոր Պատահական (); int index = random.nextInt (moves.length); վերադարձի շարժումներ [ցուցիչ]; }} public RockPaperScissors () {user = new User (); համակարգիչ = նոր Համակարգիչ (); userScore = 0; համակարգչային միավոր = 0; numberOfGames = 0; } public void startGame () {System.out.println ("ROCK, PAPER, SCISSORS!"); // Տեղափոխել Տեղափոխել userMove = user.getMove (); Տեղափոխել computerMove = computer.getMove (); System.out.println ("\ n Դուք խաղացել եք" + userMove + "."); System.out.println ("Համակարգիչը խաղացել է" + computerMove + ". / N"); // Համեմատեք քայլերը և որոշեք հաղթողին int compareMoves = userMove.compareMoves (computerMove); switch (compareMoves) {case 0: // Tie System.out.println («Կապել»); ընդմիջում; դեպք 1: // Օգտվողը շահում է System.out.println (userMove + "beats" + computerMove + ". Դուք հաղթել եք"); userScore ++; ընդմիջում; դեպք -1: // Համակարգիչը հաղթում է System.out.println (computerMove + "beats" + userMove + ". Դուք պարտվել եք:"); computerScore ++; ընդմիջում; } numberOfGames ++; // Խնդրեք օգտվողին կրկին խաղալ, եթե (user.playAgain ()) {System.out.println (); սկսել խաղը(); } else {printGameStats (); }} /*** Տպում է խաղի վիճակագրությունը: Հաշվարկում է ոչ -ոքի արդյունքները 1/2 -ի հաշվով հաղթանակի * տոկոսով: */ private void printGameStats () {int հաղթում է = userScore; int կորուստներ = computerScore; int կապեր = numberOfGames - userScore - computerScore; կրկնակի տոկոս Հաղթեց = (հաղթում է + ((կրկնակի) ոչ -ոքի) / 2) / numberOfGames; // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); // Տիտղոսաթերթեր System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "WINS", "LOSSES", "TIES", "GAMES PLAYED", "PERCENTAGE ՀԱONԹԵ "»); // 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, տոկոսային Հաղթանակ * 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 խաղ = նոր RockPaperScissors (); game.startGame (); }}

Խորհուրդ ենք տալիս: