Kuinka tehdä kivi, paperi, sakset peli Javalla (kuvilla)

Sisällysluettelo:

Kuinka tehdä kivi, paperi, sakset peli Javalla (kuvilla)
Kuinka tehdä kivi, paperi, sakset peli Javalla (kuvilla)

Video: Kuinka tehdä kivi, paperi, sakset peli Javalla (kuvilla)

Video: Kuinka tehdä kivi, paperi, sakset peli Javalla (kuvilla)
Video: 30 Ultimate Windows 10 -vinkkejä ja -vinkkejä vuodelle 2020 2024, Saattaa
Anonim

Rock, Paper, Scissors on käsipeli, jota pelaavat kaksi henkilöä. Molemmat ihmiset sanoisivat "kivi, paperi, sakset" ja muodostavat sitten samanaikaisesti yhden kolmesta esineestä (kivi, paperi tai sakset) ojennetulla kädellä. Voittaja määräytyy käsirakenteiden perusteella. Sakset lyövät paperia, paperi lyö kiveä ja rock voittaa sakset. Jos molemmat pelaajat pelaavat samaa käden muodostusta, sitä pidetään tasapelinä. Kirjoitamme yksinkertaisen Java -pelin, joka simuloi kalliota, paperia ja saksia, jossa yksi pelaaja on käyttäjä ja toinen tietokone.

Askeleet

1585279 1 1
1585279 1 1

Vaihe 1. Luo pääluokka ja kutsu se

Kivi paperi sakset

.

Tämä on luokka, jossa kirjoitamme pelin. Voit halutessasi nimetä sen muuksi, kuten

Peli

tai

Pääasiallinen

. Kirjoita rakenteen ja päämenetelmän menetelmäilmoitukset.

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

1585279 2 1
1585279 2 1

Vaihe 2. Luo käsieleiden luettelo (kivi, paperi tai sakset)

Voisimme käyttää merkkijonoja edustamaan kiveä, paperia tai saksia, mutta luetteloinnin avulla voimme ennalta määritellä vakiomme, mikä tarkoittaa, että luetteloinnin käyttäminen on parempi muotoilu. Me kutsumme enum -tyyppiämme

Liikkua

arvojen kanssa

ROCK

PAPERI

ja

SAKSET

private enum Siirrä {ROCK, PAPER, SCISSORS}

1585279 3 1
1585279 3 1

Vaihe 3. Luo kaksi yksityistä luokkaa

Käyttäjä

ja

Tietokone

.

Nämä luokat edustavat pelaajiamme pelissä. Voit halutessasi julkistaa nämä luokat. The

Käyttäjä

luokka on luokka, joka kehottaa käyttäjää joko kiven, paperin tai saksien saamiseen, joten meidän on kirjoitettava

getMove ()

menetelmä. The

Tietokone

luokalla on oltava myös

getMove ()

menetelmä, jotta tietokone voi myös tehdä siirron. Laitamme paikkamerkit näihin menetelmiin ja otamme ne käyttöön myöhemmin. The

Käyttäjä

luokka vaatii konstruktorin, joka määrittää

Skanneri

kohde, joka ottaa vastaan käyttäjän syötteen. Laitamme

Skanneri

yksityisenä kentänä käyttäjälle ja käynnistä se sitten konstruktorissa. Koska käytämme

Skanneri

luokka, meidän on kirjoitettava tuontilausunto sille koodimme yläreunaan. The

Tietokone

luokka ei vaadi konstruktoria, joten meidän ei tarvitse kirjoittaa sitä; kun aloitamme

Tietokone

objekti, soitamme vain oletusrakentajaksi. Tässä on meidän

Kivi paperi sakset

luokka näyttää nyt tältä:

tuoda java.util. Scanner; public class RockPaperScissors {private enum Move {ROCK, PAPER, SCISSORS} yksityinen luokka User {private Scanner inputScanner; julkinen käyttäjä () {inputScanner = uusi skanneri (System.in); } public Siirrä getMove () {// TODO: Toteuta tämä menetelmä return null; }} yksityisluokka Tietokone {public Move getMove () {// TODO: Toteuta tämä menetelmä return null; }} public RockPaperScissors () {} public static void main (String args) {}}

1585279 4 1
1585279 4 1

Vaihe 4. Kirjoita

getMove ()

menetelmä

Tietokone

luokka.

Tämä menetelmä palauttaa satunnaisen

Liikkua

. Voimme saada joukon

Liikkua

numerot soittamalla

arvot ()

menetelmä:

Siirrä.arvot ()

. Valitse satunnainen

Liikkua

Tämän arvotaulukon luetteloinnissa meidän on luotava satunnainen indeksi, joka on kokonaisluku välillä 0 ja arvotaulukon pituus. Tätä varten voimme käyttää

nextInt ()

menetelmä

Satunnainen

luokka, josta meidän on tuotava

java.util

. Kun olemme saaneet satunnaisindeksin, voimme palauttaa

Liikkua

tästä indeksistä arvotaulukostamme.

public Siirrä getMove () {Siirrä liikkuu = Siirrä.arvot (); Satunnainen satunnainen = uusi Satunnainen (); int -indeksi = satunnainen.seuraavaInt (siirtyy.pituus); paluuliikkeet [hakemisto]; }

1585279 5 1
1585279 5 1

Vaihe 5. Kirjoita

getMove ()

menetelmä

Käyttäjä

luokka.

Tämä menetelmä palauttaa a

Liikkua

vastaa mitä käyttäjä on syöttänyt. Odotamme käyttäjän kirjoittavan joko "rock", "paperi" tai "sakset". Ensin meidän on pyydettävä käyttäjää syöttämään:

System.out.print ("Kivi, paperi tai sakset?")

. Käytä sitten

nextLine ()

menetelmä

Skanneri

objekti saadaksesi käyttäjän syötteen merkkijonona. Meidän on nyt tarkistettava, onko käyttäjä lähettänyt kelvollisen siirron, mutta voimme olla lempeitä, jos käyttäjä on kirjoittanut sanan väärin. Joten tarkistamme vain, onko käyttäjän syötteen ensimmäinen kirjain joko "R" (kallio), "P" (paperi) tai "S" (sakset), emmekä välitä tapauksesta, koska käytämme ensin

toUpperCase ()

menetelmä

Jousisoitin

luokka, jos haluat, että käyttäjän syöttöjono on iso. Jos käyttäjä ei ole syöttänyt kauko -oikeaa tuloa, kehotamme käyttäjää uudelleen. Sen jälkeen palautamme vastaavan siirron sen mukaan, mitä käyttäjä on asettanut.

public Move getMove () {// Kehota käyttäjää System.out.print ("Kivi, paperi tai sakset?"); // Hae käyttäjän syöttö Jono userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Käyttäjä on syöttänyt kelvollisen tulokytkimen (firstLetter) {case 'R': return Move. ROCK; kirjain 'P': palauta Move. PAPER; tapaus 'S': palauta siirto. SAKSIT; }} // Käyttäjä ei ole syöttänyt kelvollista syöttöä. Kysy uudelleen. return getMove (); }

1585279 6
1585279 6

Vaihe 6. Kirjoita a

pelaa uudestaan()

menetelmä

Käyttäjä

luokka.

Käyttäjän pitäisi pystyä pelaamaan peliä uudestaan ja uudestaan. Jotta voimme päättää, haluaako käyttäjä pelata uudelleen, meidän on kirjoitettava a

pelaa uudestaan()

menetelmä, joka palauttaa boolen kertomalla pelille, onko käyttäjä päättänyt pelata uudelleen vai ei. Tässä menetelmässä käytämme

Skanneri

että olimme aiemmin aloittaneet rakentamisessa saadaksesi "Kyllä" tai "Ei" käyttäjältä. Tarkistamme vain, onko ensimmäinen kirjain Y, jotta voimme päättää, haluaako käyttäjä pelata uudelleen. Mikä tahansa muu tulo tarkoittaa, että käyttäjä ei halua pelata uudelleen.

public boolean playAgain () {System.out.print ("Haluatko pelata uudelleen?"); Jono userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); return userInput.charAt (0) == 'Y'; }

1585279 7
1585279 7

Vaihe 7. Liitä

Käyttäjä

ja

Tietokone

luokat yhdessä

Kivi paperi sakset

luokka.

Nyt kun olemme kirjoittaneet

Käyttäjä

ja

Tietokone

luokat, voimme keskittyä työskentelemään todellisen pelimme parissa. Luo yksityisiä kenttiä

Käyttäjä

ja

Tietokone

luokat

Kivi paperi sakset

luokka. Meidän on päästävä näihin kenttiin päästäksesi

getMove ()

menetelmiä, kun pelaamme peliä. Rakentaja varten

Kivi paperi sakset

luokka, aloita nämä kentät. Meidän on myös seurattava pisteitä

userScore

ja

computerScore

kentät, jotka meidän on aloitettava 0: na konstruktorissa. Meidän on myös seurattava pelien lukumäärää, joka on myös 0 -aloitus.

yksityinen käyttäjä; yksityinen Tietokone tietokone; yksityinen int userScore; yksityinen int computerScore; yksityinen int numeroOfGames; julkinen RockPaperScissors () {user = new User (); tietokone = uusi tietokone (); userScore = 0; computerScore = 0; numberOfGames = 0; }

1585279 8
1585279 8

Vaihe 8. Laajenna

Liikkua

enum sisällyttää menetelmän, joka kertoo, mikä siirto voittaa kussakin tapauksessa.

Meidän on kirjoitettava a

compaMoves ()

menetelmä, joka palauttaa 0, jos liikkeet ovat samat, 1, jos nykyinen liike voittaa toisen liikkeen, ja -1, jos nykyinen siirto häviää toiselle liikkeelle. Tästä on hyötyä voittajan määrittämisessä pelissä. Tämän menetelmän toteuttamiseksi palautamme ensin 0, jos liikkeet ovat samat ja siksi meillä on tasapeli. Kirjoita sitten kytkinlauseke 1: n tai -1: n palauttamiseksi.

yksityinen enum Siirrä {ROCK, PAPER, SCISSORS; /** * Vertaa tätä siirtoa toiseen siirtoon tasapelin, voiton tai * tappion määrittämiseen. * * @param otherMove * siirrä vertaillaksesi arvoon * @return 1, jos tämä liike voittaa toisen siirron, -1, jos tämä siirto häviää * toiselle siirrolle, 0, jos nämä liikkeet sitovat * / public int compaMoves (Siirrä otherMove) { / / Tasapeli, jos (tämä == muuMove) palauttaa 0; kytkin (tämä) {case ROCK: return (otherMove == SCISSORS? 1: -1); tapaus PAPER: return (otherMove == ROCK? 1: -1); tapauksessa sakset: return (otherMove == PAPER? 1: -1); } // Ei pitäisi koskaan päästä tänne palaa 0; }}

1585279 9
1585279 9

Vaihe 9. Luo a

Aloita peli()

menetelmä

Kivi paperi sakset

luokka.

Tämä menetelmä on pelin pelaaminen. Aloita asettamalla yksinkertainen

System.out.println

menetelmässä.

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

1585279 10
1585279 10

Vaihe 10. Hanki liikkeet käyttäjältä ja tietokoneelta

Kohteessa

Aloita peli()

menetelmä, käytä

getMove ()

menetelmiä

Käyttäjä

luokka ja

Tietokone

luokka saadakseen käyttäjän ja tietokoneen liikkeet.

Siirrä userMove = user.getMove (); Siirrä tietokoneMove = computer.getMove (); System.out.println ("\ nPelasit" + userMove + "."); System.out.println ("Tietokonetta toistettu" + computerMove + ". / N");

1585279 11
1585279 11

Vaihe 11. Vertaa kahta liikettä ja määritä, voittaako käyttäjä vai tietokone

Käytä

compaMoves ()

menetelmä

Liikkua

enum selvittääkseen voittiko käyttäjä vai ei. Jos käyttäjä voitti, lisää käyttäjäpistettä yhdellä. Jos käyttäjä häviää, lisää tietokoneen pistettä yhdellä. Jos tulos oli tasan, älä lisää mitään pisteistä. Lisää sitten pelattujen pelien määrää yhdellä.

int compaMoves = userMove.compareMoves (computerMove); switch (compaMoves) {case 0: // Tie System.out.println ("Tie!"); tauko; tapaus 1: // Käyttäjä voittaa System.out.println (userMove + "lyö" + computerMove + ". Voitit!"); userScore ++; tauko; case -1: // Tietokone voittaa System.out.println (computerMove + "lyö" + userMove + ". Hävisit."); computerScore ++; tauko; } numberOfGames ++;

1585279 12
1585279 12

Vaihe 12. Kysy, haluaako käyttäjä pelata uudelleen

Jos käyttäjä haluaa pelata uudelleen, soita

Aloita peli()

uudelleen. Muussa tapauksessa soita

printGameStats ()

joka tulostaa pelin tilastot. Kirjoitamme tämän menetelmän seuraavassa vaiheessa.

if (user.playAgain ()) {System.out.println (); Aloita peli(); } else {printGameStats (); }

1585279 13
1585279 13

Vaihe 13. Kirjoita

printGameStats ()

menetelmä.

Tämä menetelmä näyttää pelin tilastot: voittojen, tappioiden, tasapelien, pelattujen pelien ja käyttäjän voittamien pelien määrän. Voitettujen pelien prosenttiosuus lasketaan (# voittoa + (# tie/2))/(# pelattua peliä) perusteella. Tämä menetelmä käyttää

System.out.printf

tulostaa muotoiltua tekstiä.

private void printGameStats () {int voitot = userScore; int tappiot = computerScore; int site = numberOfGames - userScore - computerScore; kaksinkertainen prosenttivoitto = (voittaa + ((kaksinkertainen)) tasapeli) / 2) / numberOfGames; // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); // Tulosta otsikot System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "WINS", "LOSSES", "TIES", "PELATUT PELIT", "PERCENTAGE VOITTI"); // 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 ("|"); // Tulosta arvot System.out.printf ("| %6d | %6d | %6d | %12d | %13.2f %% | / n", voitot, tappiot, tasapelit, lukumääräOfGames, prosenttivoitto * 100); // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); }

1585279 14
1585279 14

Vaihe 14. Aloita peli pääluokassa

Alusta pääluokassa

Kivi paperi sakset

luokka ja soita

Aloita peli()

menetelmä.

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

1585279 15
1585279 15

Vaihe 15. Testaa peliäsi

Nyt kun olemme käyneet läpi kaikki ponnistelut Rock, Paper, Scissors -pelin kirjoittamiseksi, on aika koota ja testata kaikki!

Esimerkkiohjelma

tuonti java.util. Random; tuoda java.util. Scanner; public class RockPaperScissors {yksityinen käyttäjä; yksityinen Tietokone tietokone; yksityinen int userScore; yksityinen int computerScore; yksityinen int numeroOfGames; yksityinen enum Siirrä {ROCK, PAPER, SCISSORS; /** * Vertaa tätä siirtoa toiseen siirtoon tasapelin, voiton tai * tappion määrittämiseen. * * @param otherMove * siirrä vertaillaksesi arvoon * @return 1, jos tämä liike voittaa toisen siirron, -1, jos tämä siirto häviää * toiselle siirrolle, 0, jos nämä liikkeet sitovat * / public int compaMoves (Siirrä otherMove) { / / Tasapeli, jos (tämä == muuMove) palauttaa 0; kytkin (tämä) {case ROCK: return (otherMove == SCISSORS? 1: -1); tapaus PAPER: return (otherMove == ROCK? 1: -1); tapaus sakset: return (otherMove == PAPER? 1: -1); } // Ei pitäisi koskaan päästä tänne palaa 0; }} yksityinen luokka Käyttäjä {yksityinen skanneri inputScanner; julkinen käyttäjä () {inputScanner = uusi skanneri (System.in); } public Move getMove () {// Kehota käyttäjää System.out.print ("Kivi, paperi tai sakset?"); // Hae käyttäjän syöttö Jono userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Käyttäjä on syöttänyt kelvollisen tulokytkimen (firstLetter) {case 'R': return Move. ROCK; kirjain P: palauta Move. PAPER; tapaus 'S': palauta siirto. SAKSIT; }} // Käyttäjä ei ole syöttänyt kelvollista syöttöä. Kysy uudelleen. return getMove (); } public boolean playAgain () {System.out.print ("Haluatko pelata uudelleen?"); Jono userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); return userInput.charAt (0) == 'Y'; }} yksityinen luokka Tietokone {public Move getMove () {Move move = Move.values (); Satunnainen satunnainen = uusi Satunnainen (); int -indeksi = satunnainen.seuraavaInt (siirtyy.pituus); paluuliikkeet [hakemisto]; }} public RockPaperScissors () {user = new User (); tietokone = uusi tietokone (); userScore = 0; computerScore = 0; numberOfGames = 0; } public void startGame () {System.out.println ("ROCK, PAPER, SCISSORS!"); // Hae liikkeet Siirrä userMove = user.getMove (); Siirrä tietokoneMove = computer.getMove (); System.out.println ("\ nPelasit" + userMove + "."); System.out.println ("Tietokonetta toistettu" + computerMove + ". / N"); // Vertaa liikkeitä ja määritä voittaja int compaMoves = userMove.compareMoves (computerMove); switch (compaMoves) {case 0: // Tie System.out.println ("Tie!"); tauko; tapaus 1: // Käyttäjä voittaa System.out.println (userMove + "lyö" + computerMove + ". Voitit!"); userScore ++; tauko; case -1: // Tietokone voittaa System.out.println (computerMove + "lyö" + userMove + ". Hävisit."); computerScore ++; tauko; } numberOfGames ++; // Pyydä käyttäjää toistamaan, jos (user.playAgain ()) {System.out.println (); Aloita peli(); } else {printGameStats (); }} /*** Tulostaa pelin tilastot. Laskee tasat 1/2 voittoon * voittoprosentissa. */ private void printGameStats () {int voitot = userScore; int tappiot = computerScore; int site = numberOfGames - userScore - computerScore; kaksinkertainen prosenttivoitto = (voittaa + ((kaksinkertainen)) tasapeli) / 2) / numberOfGames; // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); // Tulosta otsikot System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "WINS", "LOSSES", "TIES", "PELATUT PELIT", "PERCENTAGE VOITTI"); // 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 ("|"); // Tulosta arvot System.out.printf ("| %6d | %6d | %6d | %12d | %13.2f %% | / n", voitot, tappiot, tasapelit, lukumääräOfGames, prosenttivoitto * 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 staattinen void main (String args) {RockPaperScissors game = new RockPaperScissors (); game.startGame (); }}

Suositeltava: