Kā izveidot klints, papīra, šķēru spēli Java (ar attēliem)

Satura rādītājs:

Kā izveidot klints, papīra, šķēru spēli Java (ar attēliem)
Kā izveidot klints, papīra, šķēru spēli Java (ar attēliem)

Video: Kā izveidot klints, papīra, šķēru spēli Java (ar attēliem)

Video: Kā izveidot klints, papīra, šķēru spēli Java (ar attēliem)
Video: Написание 2D-игр на C с использованием SDL Томаса Лайвли 2024, Maijs
Anonim

Roks, papīrs, šķēres ir roku spēle, ko spēlē divi cilvēki. Abi cilvēki teiktu "akmens, papīrs, šķēres" un pēc tam ar izstieptu roku vienlaikus veidotu vienu no trim objektiem (iežu, papīru vai šķēres). Uzvarētāju nosaka roku veidojumi. Šķēres pārspēj papīru, papīrs - klinšu, bet akmens - šķēres. Ja abi spēlētāji spēlē vienu un to pašu kombināciju, tas tiek uzskatīts par neizšķirtu. Mēs rakstīsim vienkāršu spēli Java, lai simulētu iežu, papīru, šķēres, kur viens spēlētājs ir lietotājs, bet otrs - dators.

Soļi

1585279 1 1
1585279 1 1

Solis 1. Izveidojiet galveno klasi un izsauciet to

Akmens Šķēres Papīrīts

.

Šī būs klase, kurā mēs rakstīsim spēli. Jūs varat izvēlēties to nosaukt citādi, piemēram,

Spēle

vai

Galvenais

. Ierakstiet konstruktoru metožu deklarācijas un galveno metodi.

publiskas klases RockPaperScissors {public RockPaperScissors () {} public static void main (String args) {}}

1585279 2 1
1585279 2 1

2. solis. Izveidojiet roku žestu uzskaitījumu (akmens, papīrs vai šķēres)

Mēs varētu izmantot stīgas, lai attēlotu akmeni, papīru vai šķēres, taču uzskaitījums ļauj mums iepriekš noteikt mūsu konstantes, kas nozīmē, ka uzskaites izmantošana ir labāks dizains. Mēs sauksim savu enuma tipu

Pārvietot

ar vērtībām

AKMENS

PAPĪRS

un

ŠĶĒRES

private enum Pārvietot {ROCK, PAPER, SCISSORS}

1585279 3 1
1585279 3 1

3. Izveidojiet divas privātas nodarbības

Lietotājs

un

Dators

.

Šīs klases pārstāvēs mūsu spēlētājus spēlē. Jūs varat izvēlēties publiskot šīs nodarbības. The

Lietotājs

klase būs tā klase, kas liek lietotājam izvēlēties akmeni, papīru vai šķēres, tāpēc mums būs jāraksta

getMove ()

metode. The

Dators

klasei būs jābūt arī

getMove ()

metode, lai dators varētu arī pārvietoties. Šajās metodēs mēs ievietosim vietturus un vēlāk tos ieviesīsim. The

Lietotājs

klasei būs nepieciešams konstruktors, kas izveido

Skeneris

objekts, ko izmantot lietotāja ievadē. Mēs ieliksim

Skeneris

kā privātu lauku lietotājam un pēc tam iniciējiet to konstruktorā. Tā kā mēs izmantojam

Skeneris

klasē, mums ir jāraksta importa paziņojums par to mūsu koda augšpusē. The

Dators

klasei nav nepieciešams konstruktors, tāpēc mums tas nav jāraksta; kad mēs uzsākam

Dators

objektu, mēs vienkārši izsauksim noklusējuma konstruktoru. Lūk, kas ir mūsu

Akmens Šķēres Papīrīts

klase izskatās tagad:

importēt java.util. Scanner; publiskās klases RockPaperScissors {private enum Move {ROCK, PAPER, SCISSORS} privātā klase User {private Scanner inputScanner; publisks lietotājs () {inputScanner = jauns skeneris (System.in); } public Pārvietot getMove () {// TODO: Īstenot šo metodi return null; }} privātas klases dators {public Move getMove () {// TODO: Ieviest šo metodi return null; }} public RockPaperScissors () {} public static void main (String args) {}}

1585279 4 1
1585279 4 1

4. solis. Uzrakstiet

getMove ()

metode

Dators

klase.

Šī metode atgriezīs nejauši

Pārvietot

. Mēs varam iegūt masīvu

Pārvietot

uzskaitījumus, zvanot uz

vērtības ()

metode:

Move.values ()

. Lai izvēlētos nejauši

Pārvietot

uzskaitot šajā vērtību masīvā, mums jāģenerē nejaušs indekss, kas ir vesels skaitlis no 0 līdz mūsu vērtību masīva garumam. Lai to izdarītu, mēs varam izmantot

nextInt ()

metode

Nejauši

klase, no kuras mums jāimportē

java.util

. Kad esam ieguvuši izlases indeksu, mēs varam atgriezt

Pārvietot

no šī indeksa no mūsu vērtību masīva.

public Pārvietot getMove () {Pārvietot gājienus = Pārvietot.vērtības (); Random random = new Random (); int indekss = random.nextInt (pārvietojas.garums); atgriešanās gājieni [indekss]; }

1585279 5 1
1585279 5 1

Solis 5. Uzrakstiet

getMove ()

metode

Lietotājs

klase.

Šī metode atgriezīs a

Pārvietot

kas atbilst lietotāja ievadītajam. Mēs sagaidīsim, ka lietotājs rakstīs vai nu "klinšu", "papīra" vai "šķēres". Pirmkārt, mums ir jālūdz lietotājam ievadīt:

System.out.print ("Akmens, papīrs vai šķēres?")

. Pēc tam izmantojiet

nextLine ()

metode

Skeneris

objektu, lai iegūtu lietotāja ievadi kā virkni. Tagad mums jāpārbauda, vai lietotājs ir iesniedzis derīgu soli, taču varam būt iecietīgi, ja lietotājs ir uzrakstījis vārdu nepareizi. Tāpēc mēs pārbaudīsim tikai to, vai lietotāja ievadītās ievades pirmais burts ir vai nu "R" (akmens), "P" (papīrs) vai "S" (šķērēm), un mēs nerūpēsimies par lietu, jo vispirms izmantosim

līdz lielajiem burtiem ()

metode

Stīga

klasi, lai lietotāja ievades virkne būtu liela. Ja lietotājs nav ievadījis attālināti pareizu ievadi, mēs to vēlreiz pieprasīsim. Pēc tam, atkarībā no lietotāja ieliktā, mēs atgriezīsim atbilstošu gājienu.

public Move getMove () {// Lūgt lietotājam System.out.print ("Akmens, papīrs vai šķēres?"); // Iegūt lietotāja ievadi String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Lietotājs ir ievadījis derīgu ievades slēdzi (firstLetter) {case 'R': return Move. ROCK; gadījums 'P': atgriezties Move. PAPER; gadījums 'S': atgriezties Move. SCISSORS; }} // Lietotājs nav ievadījis derīgu ievadi. Atkal jautājiet. atgriezties getMove (); }

1585279 6
1585279 6

6. solis. Uzrakstiet a

spēlēt vēlreiz()

metode

Lietotājs

klase.

Lietotājam vajadzētu būt iespējai spēlēt spēli atkal un atkal. Lai noteiktu, vai lietotājs vēlas spēlēt vēlreiz, mums jāraksta a

spēlēt vēlreiz()

metode, kas atgriež Būla vērtību, norādot spēlei, vai lietotājs ir nolēmis spēlēt vēlreiz vai nē. Šajā metodē mēs izmantojam

Skeneris

ko mēs iepriekš konstruktorā bijām uzsākuši, lai no lietotāja saņemtu “jā” vai “nē”. Mēs pārbaudīsim tikai to, vai pirmais burts ir “Y”, lai noteiktu, vai lietotājs vēlas spēlēt vēlreiz. Jebkura cita ievade nozīmē, ka lietotājs nevēlas atskaņot vēlreiz.

public boolean playAgain () {System.out.print ("Vai vēlaties spēlēt vēlreiz?"); String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); atgriezt userInput.charAt (0) == 'Y'; }

1585279 7
1585279 7

7. solis. Pievienojiet

Lietotājs

un

Dators

klases kopā

Akmens Šķēres Papīrīts

klase.

Tagad, kad esam pabeiguši rakstīt

Lietotājs

un

Dators

klasēs, mēs varam koncentrēties uz savu faktisko spēli. Izveidojiet privātus laukus

Lietotājs

un

Dators

klasēs

Akmens Šķēres Papīrīts

klase. Mums būs jāpiekļūst šiem laukiem, lai piekļūtu

getMove ()

metodes, kad mēs spēlējam spēli. Konstruktorā

Akmens Šķēres Papīrīts

klasē, iniciējiet šos laukus. Mums būs arī jāseko līdzi rezultātam

userScore

un

computerScore

lauki, kas mums konstruktorā jāuzsāk kā 0. Mums ir jāseko arī spēļu skaitam, kas arī būs lauks, kas uzsākts kā 0.

privāts lietotājs; privāts datoru dators; private int userScore; privāts int computerScore; privāts int numursOfGames; public RockPaperScissors () {lietotājs = jauns lietotājs (); dators = jauns Dators (); userScore = 0; computerScore = 0; numberOfGames = 0; }

1585279 8
1585279 8

8. solis. Paplašiniet

Pārvietot

enum, lai iekļautu metodi, kas mums norāda, kurš gājiens uzvar katrā gadījumā.

Mums jāraksta a

compaMoves ()

metode, kas atgriež 0, ja gājieni ir vienādi, 1, ja pašreizējais gājiens pārspēj otru gājienu, un -1, ja pašreizējais gājiens zaudē otrai kustībai. Tas būs noderīgi, lai noteiktu uzvarētāju spēlē. Lai ieviestu šo metodi, mēs vispirms atgriezīsim 0, ja gājieni ir vienādi un tāpēc mums ir neizšķirts. Pēc tam uzrakstiet slēdzi, lai atgrieztos 1 vai -1.

private enum Pārvietot {ROCK, PAPER, SCISSORS; /** * Salīdzina šo gājienu ar citu gājienu, nosakot neizšķirtu, uzvaru vai * zaudējumu. * * @param otherMove * pārvietot, lai salīdzinātu ar * @return 1, ja šis gājiens pārspēj otru gājienu, -1, ja šis gājiens zaudē * otram gājienam, 0, ja šie gājieni ir neizšķirti * / public int compaMove (Move otherMove) { / / Tie, ja (šis == citsPārvietot) atgriežas 0; slēdzis (šis) {case ROCK: return (otherMove == SCISSORS? 1: -1); gadījums PAPER: return (otherMove == ROCK? 1: -1); gadījums šķēres: atgriešanās (otherMove == PAPER? 1: -1); } // Nekad nevajadzētu sasniegt šeit atgriezties 0; }}

1585279 9
1585279 9

9. solis. Izveidojiet a

sākt spēli()

metode sadaļā

Akmens Šķēres Papīrīts

klase.

Šī metode būs spēles spēlēšana. Sāciet, ievietojot vienkāršu

System.out.println

metodē.

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

1585279 10
1585279 10

10. solis. Saņemiet kustības no lietotāja un datora

Iekš

sākt spēli()

metodi, izmantojiet

getMove ()

metodes no

Lietotājs

klase un

Dators

klasē, lai iegūtu lietotāja un datora kustības.

Pārvietot userMove = user.getMove (); Pārvietot datoruMove = computer.getMove (); System.out.println ("\ nJūs spēlējāt" + userMove + "."); System.out.println ("Dators spēlēja" + computerMove + ". / N");

1585279 11
1585279 11

11. solis. Salīdziniet abus gājienus un nosakiet, vai uzvarēja lietotājs vai uzvarēja dators

Izmantojiet

compaMoves ()

metode no

Pārvietot

enum, lai noteiktu, vai lietotājs uzvarēja vai nē. Ja lietotājs uzvarēja, palieliniet lietotāja rezultātu par 1. Ja lietotājs zaudēja, palieliniet datora rezultātu par 1. Ja rezultāts bija neizšķirts, nevienu no punktiem nepalieliniet. Pēc tam palieliniet izspēlēto spēļu skaitu par vienu.

int compaMoves = userMove.compareMoves (computerMove); switch (salīdzinātMoves) {case 0: // Tie System.out.println ("Tie!"); pārtraukums; 1. gadījums: // Lietotājs uzvar System.out.println (userMove + "sitieni" + computerMove + ". Jūs uzvarējāt!"); userScore ++; pārtraukums; gadījums -1: // Dators uzvar System.out.println (computerMove + "sitieni" + userMove + ". Jūs zaudējāt."); computerScore ++; pārtraukums; } numberOfGames ++;

1585279 12
1585279 12

12. solis. Jautājiet, vai lietotājs vēlas spēlēt vēlreiz

Ja lietotājs vēlas spēlēt vēlreiz, zvaniet

sākt spēli()

vēlreiz. Pretējā gadījumā zvaniet

printGameStats ()

kas izdrukās spēles statistiku. Mēs uzrakstīsim šo metodi nākamajā solī.

ja (user.playAgain ()) {System.out.println (); sākt spēli(); } cits {printGameStats (); }

1585279 13
1585279 13

Solis 13. Uzrakstiet

printGameStats ()

metode.

Šī metode parādīs spēles statistiku: uzvaru skaitu, zaudējumu skaitu, neizšķirtu skaitu, aizvadīto spēļu skaitu un lietotāja uzvarēto spēļu procentuālo daļu. Uzvarēto spēļu procentu aprēķina pēc (# uzvaras + (# neizšķirti/2))/(# izspēlētās spēles). Šī metode izmanto

System.out.printf

lai izdrukātu formatētu tekstu.

private void printGameStats () {int uzvar = userScore; int zaudējumi = computerScore; int saites = numberOfGames - userScore - computerScore; dubultprocentsVinnēts = (uzvar + ((dubultā)) neizšķirts) / 2) / numberOfGames; // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); // Drukāt nosaukumus System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "WINS", "LOSSES", "TIES", "SPĒLĒTĀS SPĒLES", "PERCENTAGE UZVARĒTS "); // 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 ("|"); // Drukāt vērtības System.out.printf ("| %6d | %6d | %6d | %12d | %13.2f %% | / n", uzvaras, zaudējumi, neizšķirti, skaitsOfGames, procentiVinnēts * 100); // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); }

1585279 14
1585279 14

Solis 14. Sāciet spēli galvenajā klasē

Galvenajā klasē inicializējiet

Akmens Šķēres Papīrīts

klasē un zvaniet uz

sākt spēli()

metode.

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

1585279 15
1585279 15

Solis 15. Pārbaudiet savu spēli

Tagad, kad esam spējuši uzrakstīt spēli Rock, Paper, Scissors, ir pienācis laiks visu apkopot un pārbaudīt!

Programmas paraugs

importēt java.util. Random; importēt java.util. Scanner; publiskās klases RockPaperScissors {privāts lietotājs; privāts datoru dators; private int userScore; privāts int computerScore; privāts int numursOfGames; private enum Pārvietot {ROCK, PAPER, SCISSORS; /** * Salīdzina šo gājienu ar citu gājienu, nosakot neizšķirtu, uzvaru vai * zaudējumu. * * @param otherMove * pārvietot, lai salīdzinātu ar * @return 1, ja šis gājiens pārspēj otru gājienu, -1, ja šis gājiens zaudē * otram gājienam, 0, ja šie gājieni ir neizšķirti * / public int compaMove (Move otherMove) { / / Tie, ja (šis == citsPārvietot) atgriežas 0; slēdzis (šis) {case ROCK: return (otherMove == SCISSORS? 1: -1); gadījums PAPER: return (otherMove == ROCK? 1: -1); gadījums šķēres: atgriešanās (otherMove == PAPER? 1: -1); } // Nekad nevajadzētu sasniegt šeit atgriezties 0; }} privātas klases lietotājs {privāts skeneris inputScanner; publisks lietotājs () {inputScanner = jauns skeneris (System.in); } public Pārvietot getMove () {// Lūgt lietotājam System.out.print ("Akmens, papīrs vai šķēres?"); // Iegūt lietotāja ievadi String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Lietotājs ir ievadījis derīgu ievades slēdzi (firstLetter) {case 'R': return Move. ROCK; gadījums 'P': atgriezties Move. PAPER; gadījums 'S': atgriezties Move. SCISSORS; }} // Lietotājs nav ievadījis derīgu ievadi. Atkal jautājiet. atgriezties getMove (); } public boolean playAgain () {System.out.print ("Vai vēlaties spēlēt vēlreiz?"); String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); atgriezt userInput.charAt (0) == 'Y'; }} privāta klase Dators {public Move getMove () {Pārvietot pārceļas = Pārvietot.vērtības (); Random random = new Random (); int indekss = random.nextInt (pārvietojas.garums); atgriešanās gājieni [indekss]; }} publiskie RockPaperScissors () {user = new User (); dators = jauns Dators (); userScore = 0; computerScore = 0; numberOfGames = 0; } public void startGame () {System.out.println ("ROCK, PAPER, SCISSORS!"); // Saņemt gājienus Pārvietot userMove = user.getMove (); Pārvietot datoruMove = computer.getMove (); System.out.println ("\ nJūs spēlējāt" + userMove + "."); System.out.println ("Dators spēlēja" + computerMove + ". / N"); // Salīdzināt gājienus un noteikt uzvarētāju int compaMoves = userMove.compareMoves (computerMove); switch (salīdzinātMoves) {case 0: // Tie System.out.println ("Tie!"); pārtraukums; 1. gadījums: // Lietotājs uzvar System.out.println (userMove + "sitieni" + computerMove + ". Jūs uzvarējāt!"); userScore ++; pārtraukums; gadījums -1: // Dators uzvar System.out.println (computerMove + "sitieni" + userMove + ". Jūs zaudējāt."); computerScore ++; pārtraukums; } numberOfGames ++; // Palūdziet lietotājam spēlēt vēlreiz, ja (user.playAgain ()) {System.out.println (); sākt spēli(); } cits {printGameStats (); }} /*** Izdrukā spēles statistiku. Saiknes tiek aprēķinātas kā 1/2 uzvara * uzvarēto procentu apmērā. */ private void printGameStats () {int uzvar = userScore; int zaudējumi = computerScore; int saites = numberOfGames - userScore - computerScore; dubultprocentsVinnēts = (uzvar + ((dubultā)) neizšķirts) / 2) / numberOfGames; // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); // Drukāt nosaukumus System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "WINS", "LOSSES", "TIES", "SPĒLĒTĀS SPĒLES", "PERCENTAGE UZVARĒTS "); // 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 ("|"); // Drukāt vērtības System.out.printf ("| %6d | %6d | %6d | %12d | %13.2f %% | / n", uzvaras, zaudējumi, neizšķirti, skaitsOfGames, procentiVinnēts * 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 (); }}

Ieteicams: