Kaip sukurti uolienų, popieriaus, žirklių žaidimą „Java“(su paveikslėliais)

Turinys:

Kaip sukurti uolienų, popieriaus, žirklių žaidimą „Java“(su paveikslėliais)
Kaip sukurti uolienų, popieriaus, žirklių žaidimą „Java“(su paveikslėliais)

Video: Kaip sukurti uolienų, popieriaus, žirklių žaidimą „Java“(su paveikslėliais)

Video: Kaip sukurti uolienų, popieriaus, žirklių žaidimą „Java“(su paveikslėliais)
Video: Importing Images as Textures in Your SketchUp Model - SketchUp Quick Tips 2024, Balandis
Anonim

Rokas, popierius, žirklės yra rankų žaidimas, kurį žaidžia du žmonės. Abu žmonės sakytų „uola, popierius, žirklės“, o tada ištiesta ranka vienu metu sudarytų vieną iš trijų objektų (uolieną, popierių ar žirkles). Laimėtojas nustatomas rankiniu būdu. Žirklės muša popierių, popierius muša uolą, o uolos - žirkles. Jei abu žaidėjai žaidžia tą pačią ranką, tai laikoma lygiosiomis. Mes parašysime paprastą žaidimą „Java“, kad imituotume akmenį, popierių, žirkles, kur vienas žaidėjas yra vartotojas, o kitas žaidėjas yra kompiuteris.

Žingsniai

1585279 1 1
1585279 1 1

Žingsnis 1. Sukurkite pagrindinę klasę ir ją pavadinkite

Akmuo popierius žirklės

.

Tai bus klasė, kurioje rašysime žaidimą. Galite pasirinkti pavadinti jį kitu, pvz

Žaidimas

arba

Pagrindinis

. Įrašykite konstruktoriaus metodo deklaracijas ir pagrindinį metodą.

public class RockPaperScissors {public RockPaperScissors () {} public static void main (String args) {}}

1585279 2 1
1585279 2 1

Žingsnis 2. Sukurkite rankų gestų (uolienų, popieriaus ar žirklių) sąrašą

Stygas galėtume panaudoti akmeniui, popieriui ar žirklėms pavaizduoti, tačiau išvardijimas leidžia iš anksto apibrėžti savo konstantas, o tai reiškia, kad išvardijimas yra geresnis dizainas. Mes vadinsime savo enumo tipą

Perkelti

su vertybėmis

ROKAS

POPIERIS

ir

ŽIRKLĖS

private enum Perkelti {ROCK, PAPER, SCISSORS}

1585279 3 1
1585279 3 1

Žingsnis 3. Sukurkite dvi privačias klases

Vartotojas

ir

Kompiuteris

.

Šios klasės atstovaus mūsų žaidėjus žaidime. Galite pasirinkti viešinti šias klases. The

Vartotojas

klasė bus klasė, raginanti vartotoją pasirinkti akmenį, popierių ar žirkles, todėl turėsime parašyti

getMove ()

metodas. The

Kompiuteris

klasėje taip pat reikės turėti

getMove ()

metodas, kad kompiuteris taip pat galėtų judėti. Į šiuos metodus įdėsime vietos rezervavimo ženklų ir juos įgyvendinsime vėliau. The

Vartotojas

klasei reikės konstruktoriaus, kuris nustatys

Skaitytuvas

objektą, kad įvestumėte vartotojo įvestį. Mes įdėsime

Skaitytuvas

kaip privatų lauką vartotojui ir tada inicijuokite jį konstruktoriuje. Kadangi mes naudojame

Skaitytuvas

klasę, mes turime parašyti importo pareiškimą jo kodo viršuje. The

Kompiuteris

klasė nereikalauja konstruktoriaus, todėl mums nereikia jo rašyti; kai mes inicijuojame

Kompiuteris

objektą, mes tiesiog skambinsime numatytuoju konstruktoriumi. Štai ką mūsų

Akmuo popierius žirklės

klasė atrodo taip:

importuoti java.util. Scanner; public class RockPaperScissors {private enum Move {ROCK, PAPER, SCISSORS} privati klasė Vartotojas {private Scanner inputScanner; viešas vartotojas () {inputScanner = naujas skaitytuvas (System.in); } public Move getMove () {// TODO: Įdiekite šį metodą return null; }} privačios klasės kompiuteris {public Move getMove () {// TODO: Įdiekite šį metodą return null; }} public RockPaperScissors () {} public static void main (String args) {}}

1585279 4 1
1585279 4 1

Žingsnis 4. Parašykite

getMove ()

metodas, skirtas

Kompiuteris

klasė.

Šis metodas grąžins atsitiktinį

Perkelti

. Galime gauti masyvą

Perkelti

išvardijimai skambinant

vertės ()

metodas:

Perkelti.values ()

. Norėdami pasirinkti atsitiktinį

Perkelti

suskaičiavus šį reikšmių masyvą, turime sugeneruoti atsitiktinį indeksą, kuris yra sveikasis skaičius nuo 0 iki mūsų reikšmių masyvo ilgio. Norėdami tai padaryti, galime naudoti

nextInt ()

metodas

Atsitiktinis

klasę, iš kurios turime importuoti

java.util

. Gavę atsitiktinį indeksą, galime grąžinti

Perkelti

to indekso iš mūsų verčių masyvo.

public Perkelti getMove () {Perkelti juda = Perkelti.values (); Atsitiktinis atsitiktinis = naujas Atsitiktinis (); int indeksas = atsitiktinis.nextInt (juda.ilgis); grįžimo judesiai [indeksas]; }

1585279 5 1
1585279 5 1

Žingsnis 5. Parašykite

getMove ()

metodas, skirtas

Vartotojas

klasė.

Šis metodas grąžins a

Perkelti

atitinka tai, ką vartotojas įvedė. Tikimės, kad vartotojas parašys „uolą“, „popierių“arba „žirkles“. Pirmiausia turime paprašyti vartotojo įvesti:

System.out.print („Uola, popierius ar žirklės?“)

. Tada naudokite

nextLine ()

metodas

Skaitytuvas

objektą, kad gautumėte vartotojo įvestį kaip eilutę. Dabar turime patikrinti, ar vartotojas pateikė teisingą žingsnį, tačiau galime būti atlaidūs, jei vartotojas neteisingai parašė žodį. Taigi mes tikriname, ar pirmoji vartotojo įvesties raidė yra „R“(akmeniui), „P“(popieriui) ar „S“(žirklėms), ir mums nerūpi atvejis, nes pirmiausia naudosime

iki didžiųjų raidžių ()

metodas

Styginė

klasę, kad vartotojo įvesties eilutė būtų didžioji. Jei vartotojas neįvedė nuotoliniu būdu teisingos įvesties, mes dar kartą paraginsime vartotoją. Tada, priklausomai nuo to, ką vartotojas įdėjo, mes grąžinsime atitinkamą žingsnį.

public Move getMove () {// Paraginti vartotoją System.out.print ("Uola, popierius ar žirklės?"); // Gauti vartotojo įvestį String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Vartotojas įvedė tinkamą įvesties jungiklį (firstLetter) {case 'R': return Move. ROCK; atvejis „P“: grįžti Move. PAPER; atvejis „S“: grįžti Perkelti. ŽIRŽLĖS; }} // Vartotojas neįvedė tinkamos įvesties. Vėl paraginkite. return getMove (); }

1585279 6
1585279 6

Žingsnis 6. Parašykite a

žaisti vėl()

metodas, skirtas

Vartotojas

klasė.

Vartotojas turėtų sugebėti žaisti žaidimą vėl ir vėl. Norėdami nustatyti, ar vartotojas nori žaisti dar kartą, turime parašyti a

žaisti vėl()

metodas, kuris grąžina loginę vertę, nurodančią žaidimui, ar vartotojas nusprendė vėl žaisti, ar ne. Šiuo metodu mes naudojame

Skaitytuvas

kad mes anksčiau konstruktoriuje inicijavome iš vartotojo gauti „taip“arba „ne“. Tikrinsime, ar pirmoji raidė yra „Y“, kad nustatytume, ar vartotojas nori žaisti dar kartą. Bet koks kitas įvestis reiškia, kad vartotojas nenori žaisti dar kartą.

public boolean playAgain () {System.out.print ("Ar norite žaisti dar kartą?"); Eilutė userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); return userInput.charAt (0) == 'Y'; }

1585279 7
1585279 7

Žingsnis 7. Prijunkite

Vartotojas

ir

Kompiuteris

klasės kartu

Akmuo popierius žirklės

klasė.

Dabar, kai baigėme rašyti

Vartotojas

ir

Kompiuteris

klasėse, galime sutelkti dėmesį į savo tikrojo žaidimo darbą. Sukurkite privačius laukus

Vartotojas

ir

Kompiuteris

klasėse

Akmuo popierius žirklės

klasė. Norėdami pasiekti, turėsime pasiekti šiuos laukus

getMove ()

metodus, kai žaidžiame žaidimą. Konstruktoriuje

Akmuo popierius žirklės

klasė, inicijuokite šiuos laukus. Taip pat turėsime sekti rezultatą

userScore

ir

computerScore

laukus, kuriuos turime inicijuoti kaip 0 konstruktoriuje. Turime sekti ir žaidimų skaičių, kuris taip pat bus laukas, inicijuotas kaip 0.

privatus vartotojas; asmeninis kompiuteris; private int userScore; privatus int computerScore; privatus int numerisOfGames; public RockPaperScissors () {user = new User (); kompiuteris = naujas Kompiuteris (); userScore = 0; computerScore = 0; numberOfGames = 0; }

1585279 8
1585279 8

Žingsnis 8. Išplėskite

Perkelti

enum įtraukti metodą, kuris mums nurodo, kuris žingsnis kiekvienu atveju laimi.

Turime parašyti a

palygintiMove ()

metodas, kuris grąžina 0, jei judesiai yra vienodi, 1, jei dabartinis ėjimas pranoksta kitą ėjimą, ir -1, jei dabartinis žingsnis praranda kitą ėjimą. Tai bus naudinga nustatant žaidimo nugalėtoją. Norėdami įgyvendinti šį metodą, pirmiausia grąžinsime 0, jei judesiai yra vienodi, todėl turime lygiąsias. Tada parašykite jungiklio teiginį, kad grąžintumėte 1 arba -1.

private enum Perkelti {ROCK, PAPER, SCISSORS; /** * Palygina šį žingsnį su kitu žingsniu, kai nustatomas lygus rezultatas, pergalė arba * pralaimėjimas. * * @param otherMove * perkelkite, kad palygintumėte su * @return 1, jei šis žingsnis įveikia kitą ėjimą, -1, jei šis žingsnis pralaimi * kitam ėjimui, 0, jei šie judesiai yra lygus * / public int palygintiMoves (Move otherMove) { / / Kaklaraištis if (this == otherMove) return 0; jungiklis (šis) {atvejis ROCK: return (otherMove == SCISSORS? 1: -1); atvejis POPIERIS: return (otherMove == ROCK? 1: -1); atvejis ŽIRKLIAI: return (otherMove == PAPER? 1: -1); } // Niekada neturėtumėte čia grįžti 0; }}

1585279 9
1585279 9

Žingsnis 9. Sukurkite a

pradėti žaidimą()

metodas

Akmuo popierius žirklės

klasė.

Šis metodas bus žaidimo žaidimas. Pradėkite dėdami paprastą

System.out.println

metodu.

public void startGame () {System.out.println ("ROKAS, POPIERIS, ŽIRKLĖS!"); }

1585279 10
1585279 10

10. Žingsnis iš vartotojo ir kompiuterio

Viduje konors

pradėti žaidimą()

metodas, naudokite

getMove ()

metodai iš

Vartotojas

klasė ir

Kompiuteris

klasę, kad gautumėte vartotojo ir kompiuterio judesius.

Perkelti userMove = user.getMove (); Perkelti kompiuterįMove = computer.getMove (); System.out.println ("\ nŽaidėte" + userMove + "."); System.out.println ("Kompiuteris paleistas" + computerMove + ". / N");

1585279 11
1585279 11

Žingsnis 11. Palyginkite du veiksmus ir nustatykite, ar laimėjo vartotojas, ar laimėjo kompiuteris

Naudoti

palygintiMove ()

metodas iš

Perkelti

enum, siekiant nustatyti, ar vartotojas laimėjo, ar ne. Jei vartotojas laimėjo, padidinkite naudotojo balą 1. Jei vartotojas pralaimėjo, padidinkite kompiuterio rezultatą 1. Jei rezultatas buvo lygus, nedidinkite nė vieno balo. Tada padidinkite žaidimų skaičių vienu.

int palygintiMoves = userMove.compareMoves (computerMove); switch (palygintiMoves) {case 0: // Tie System.out.println ("Tie!"); pertrauka; 1 atvejis: // Vartotojas laimi System.out.println (userMove + "muša" + computerMove + ". Jūs laimėjote!"); userScore ++; pertrauka; atvejis -1: // Kompiuteris laimi System.out.println (computerMove + "muša" + userMove + ". Jūs pralaimėjote."); computerScore ++; pertrauka; } numberOfGames ++;

1585279 12
1585279 12

Žingsnis 12. Paklauskite, ar vartotojas nori žaisti dar kartą

Jei vartotojas nori žaisti dar kartą, skambinkite

pradėti žaidimą()

vėl. Priešingu atveju skambinkite

printGameStats ()

kuris išspausdins žaidimo statistiką. Mes parašysime šį metodą kitame žingsnyje.

if (user.playAgain ()) {System.out.println (); pradėti žaidimą(); } else {printGameStats (); }

1585279 13
1585279 13

Žingsnis 13. Parašykite

printGameStats ()

metodas.

Šis metodas parodys žaidimo statistiką: laimėjimų, pralaimėjimų, lygiosios, žaidžiamų žaidimų skaičius ir žaidėjo laimėtų žaidimų procentas. Laimėtų žaidimų procentas apskaičiuojamas pagal (# laimėjimų + (# lygiosios/2))/(# sužaistų žaidimų). Šis metodas naudojamas

System.out.printf

spausdinti suformatuotą tekstą.

private void printGameStats () {int win = userScore; int nuostoliai = computerScore; int tie = numberOfGames - userScore - computerScore; dvigubas procentas Laimėtas = (laimi + ((dvigubas)) ryšys) / 2) / numberOfGames; // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); // Spausdinti pavadinimus System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "WINS", "LOSSES", "TIES", "ŽAIDIMAI", "PERCENTAGE LAIMĖJO"); // 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 ("|"); // Spausdinti reikšmes System.out.printf ("| %6d | %6d | %6d | %12d | %13.2f %% | / n", laimėjimai, pralaimėjimai, kaklaraiščiai, skaičiusOfGames, procentasWon * 100); // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); }

1585279 14
1585279 14

Žingsnis 14. Pradėkite žaidimą pagrindinėje klasėje

Pagrindinėje klasėje inicijuokite

Akmuo popierius žirklės

klasę ir paskambinkite

pradėti žaidimą()

metodas.

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

1585279 15
1585279 15

Žingsnis 15. Išbandykite savo žaidimą

Dabar, kai mes įdėjome visas pastangas rašydami žaidimą „Rokas, popierius, žirklės“, atėjo laikas viską surinkti ir išbandyti!

Pavyzdinė programa

importuoti java.util. Random; importuoti java.util. Scanner; public class RockPaperScissors {privatus vartotojas; asmeninis kompiuteris; private int userScore; privatus int computerScore; privatus int numerisOfGames; private enum Perkelti {ROCK, PAPER, SCISSORS; /** * Palygina šį žingsnį su kitu žingsniu nustatant lygiąsias, pergalę arba * pralaimėjimą. * * @param otherMove * perkelkite, kad palygintumėte su * @return 1, jei šis žingsnis įveikia kitą ėjimą, -1, jei šis žingsnis pralaimi * kitam ėjimui, 0, jei šie ėjimai lygus * / public int palygintiMoves (Move otherMove) { / / Kaklaraištis if (this == otherMove) return 0; jungiklis (šis) {atvejis ROCK: return (otherMove == SCISSORS? 1: -1); atvejis POPIERIS: return (otherMove == ROCK? 1: -1); atvejis ŽIRKLIAI: return (otherMove == PAPER? 1: -1); } // Niekada neturėtumėte čia grįžti 0; }} privačios klasės vartotojas {privatus skaitytuvas inputScanner; viešas vartotojas () {inputScanner = naujas skaitytuvas (System.in); } public Perkelti getMove () {// Paraginti vartotoją System.out.print ("Uola, popierius ar žirklės?"); // Gauti vartotojo įvestį String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Vartotojas įvedė tinkamą įvesties jungiklį (firstLetter) {case 'R': return Move. ROCK; atvejis „P“: grįžti Move. PAPER; atvejis „S“: grįžti Perkelti. ŽIRŽLĖS; }} // Vartotojas neįvedė tinkamos įvesties. Vėl paraginkite. return getMove (); } public boolean playAgain () {System.out.print ("Ar norite žaisti dar kartą?"); Eilutė userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); return userInput.charAt (0) == 'Y'; }} privačios klasės kompiuteris {public Move getMove () {Perkelti juda = Perkelti.values (); Atsitiktinis atsitiktinis = naujas Atsitiktinis (); int indeksas = atsitiktinis.nextInt (juda.ilgis); grįžimo judesiai [indeksas]; }} public RockPaperScissors () {user = new User (); kompiuteris = naujas Kompiuteris (); userScore = 0; computerScore = 0; numberOfGames = 0; } public void startGame () {System.out.println ("ROKAS, POPIERIS, ŽIRKLĖS!"); // Gauti judesius Perkelti userMove = user.getMove (); Perkelti kompiuterįMove = computer.getMove (); System.out.println ("\ nŽaidėte" + userMove + "."); System.out.println ("Kompiuteris paleistas" + computerMove + ". / N"); // Palyginti judesius ir nustatyti nugalėtoją int compaMoves = userMove.compareMoves (computerMove); switch (palygintiMoves) {case 0: // Tie System.out.println ("Tie!"); pertrauka; 1 atvejis: // Vartotojas laimi System.out.println (userMove + "muša" + computerMove + ". Jūs laimėjote!"); userScore ++; pertrauka; atvejis -1: // Kompiuteris laimi System.out.println (computerMove + "muša" + userMove + ". Jūs pralaimėjote."); computerScore ++; pertrauka; } numberOfGames ++; // Paprašykite vartotojo vėl žaisti, jei (user.playAgain ()) {System.out.println (); pradėti žaidimą(); } else {printGameStats (); }} /*** Spausdina žaidimo statistiką. Skaičiuoja lygiąsias 1/2 pergalės * laimėtų procentų. */ private void printGameStats () {int win = userScore; int nuostoliai = computerScore; int tie = numberOfGames - userScore - computerScore; dvigubas procentas laimėtas = (laimi + ((dvigubas)) ryšys) / 2) / numberOfGames; // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); // Spausdinti pavadinimus System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "WINS", "LOSSES", "TIES", "ŽAIDIMAI", "PERCENTAGE LAIMĖJO"); // 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 ("|"); // Spausdinti reikšmes System.out.printf ("| %6d | %6d | %6d | %12d | %13.2f %% | / n", laimėjimai, pralaimėjimai, kaklaraiščiai, skaičiusOfGames, procentasWon * 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 (); }}

Rekomenduojamas: