Cum să faci un joc de piatră, hârtie, foarfece în Java (cu imagini)

Cuprins:

Cum să faci un joc de piatră, hârtie, foarfece în Java (cu imagini)
Cum să faci un joc de piatră, hârtie, foarfece în Java (cu imagini)

Video: Cum să faci un joc de piatră, hârtie, foarfece în Java (cu imagini)

Video: Cum să faci un joc de piatră, hârtie, foarfece în Java (cu imagini)
Video: Tabele in Word: tot ce trebuie sa stii - Tutoriale Office 2024, Mai
Anonim

Rock, Paper, Scissors este un joc de mână jucat de două persoane. Ambii oameni spuneau „stâncă, hârtie, foarfece” și apoi formează simultan unul dintre cele trei obiecte (stâncă, hârtie sau foarfece) cu o mână întinsă. Câștigătorul este determinat de formațiile de mână. Foarfeca bate hârtia, hârtia bate rock, iar roca bate foarfeca. Dacă ambii jucători joacă aceeași formație de mână, este considerat egal. Vom scrie un joc simplu în Java pentru a simula Rock, Paper, foarfece unde un jucător este utilizatorul și celălalt jucător este computerul.

Pași

1585279 1 1
1585279 1 1

Pasul 1. Creați clasa principală și numiți-o

RockPaperScissors

.

Aceasta va fi clasa în care vom scrie jocul. Puteți alege să-l numiți altceva, cum ar fi

Joc

sau

Principal

. Scrieți în declarații de metodă pentru constructor și metoda principală.

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

1585279 2 1
1585279 2 1

Pasul 2. Creați o enumerare pentru gesturile mâinii (stâncă, hârtie sau foarfece)

Am putea folosi șiruri pentru a reprezenta stâncă, hârtie sau foarfece, dar o enumerare ne permite să ne predefinim constantele, ceea ce înseamnă că utilizarea enumerării este un design mai bun. Vom numi tipul nostru de enum

Mutare

cu valorile

ROCK

HÂRTIE

și

FOARFECE

private enum Move {ROCK, PAPER, SCISSORS}

1585279 3 1
1585279 3 1

Pasul 3. Creați două clase private

Utilizator

și

Calculator

.

Aceste clase vor reprezenta jucătorii noștri în joc. Puteți alege să faceți publice aceste cursuri. The

Utilizator

clasa va fi clasa care solicită utilizatorului fie piatră, hârtie sau foarfece, așa că va trebui să scriem un

getMove ()

metodă. The

Calculator

clasa va trebui, de asemenea, să aibă un

getMove ()

metodă, astfel încât computerul să poată face și o mișcare. Vom pune substituenți în aceste metode și le vom implementa mai târziu. The

Utilizator

clasa va necesita un constructor care să seteze

Scanner

obiect de luat în intrarea utilizatorului. Vom pune

Scanner

ca un câmp privat pentru utilizator și apoi inițiați-l în constructor. Deoarece folosim

Scanner

clasă, trebuie să scriem o declarație de import pentru aceasta în partea de sus a codului nostru. The

Calculator

clasa nu necesită un constructor, deci nu este necesar să scriem unul; când inițiem

Calculator

obiect, vom numi doar constructorul implicit. Iată ce este al nostru

RockPaperScissors

clasa arată acum:

import java.util. Scanner; public class RockPaperScissors {private enum Move {ROCK, PAPER, SCISSORS} private class User {private Scanner inputScanner; Utilizator public () {inputScanner = Scanner nou (System.in); } public Move getMove () {// TODO: Implementați această metodă return null; }} private class Computer {public Move getMove () {// TODO: Implementați această metodă return null; }} public RockPaperScissors () {} public static void main (String args) {}}

1585279 4 1
1585279 4 1

Pasul 4. Scrieți

getMove ()

metoda pentru

Calculator

clasă.

Această metodă va returna o întâmplare

Mutare

. Putem obține o serie de

Mutare

enumerări prin apelarea

valori ()

metodă:

Move.values ()

. Pentru a alege o întâmplare

Mutare

enumerarea în această matrice de valori, trebuie să generăm un indice aleatoriu care este un număr între 0 și lungimea matricei noastre de valori. Pentru a face acest lucru, putem folosi

nextInt ()

metoda

Aleatoriu

clasă din care trebuie să importăm

java.util

. După ce am obținut indicele aleatoriu, putem returna

Mutare

a acelui index din matricea noastră de valori.

public Move getMove () {Move moves = Move.values (); Random random = new Random (); int index = random.nextInt (moves.length); returnează mutări [index]; }

1585279 5 1
1585279 5 1

Pasul 5. Scrieți

getMove ()

metoda pentru

Utilizator

clasă.

Această metodă va returna un

Mutare

corespunzând celor introduse de utilizator. Ne vom aștepta ca utilizatorul să scrie fie „stâncă”, „hârtie”, fie „foarfecă”. Mai întâi, trebuie să solicităm utilizatorului o intrare:

System.out.print („Stâncă, hârtie sau foarfece?”)

. Apoi utilizați

nextLine ()

metoda

Scanner

obiect pentru a obține intrarea utilizatorului ca un șir. Acum trebuie să verificăm dacă utilizatorul a trimis o mutare validă, dar putem fi îngăduitori dacă utilizatorul a scris greșit un cuvânt. Deci, vom verifica doar dacă prima literă a datelor introduse de utilizator este fie „R” (pentru piatră), „P” (pentru hârtie) sau „S” (pentru foarfece) și nu ne va păsa de caz deoarece vom folosi mai întâi

toUpperCase ()

metoda

Şir

clasă pentru a face șirul de introducere al utilizatorului cu majuscule. Dacă utilizatorul nu a introdus o intrare corectă de la distanță, îl vom solicita din nou. Apoi, în funcție de ceea ce a introdus utilizatorul, vom returna o mișcare corespunzătoare.

public Move getMove () {// Solicitați utilizatorului System.out.print („Stâncă, hârtie sau foarfece?”); // Obțineți intrarea utilizatorului String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Utilizatorul a introdus un comutator de intrare valid (firstLetter) {case 'R': returnează Move. ROCK; cazul 'P': returnează Move. PAPER; cazul 'S': returnează Move. SCISSORS; }} // Utilizatorul nu a introdus o intrare validă. Solicitați din nou. returnează getMove (); }

1585279 6
1585279 6

Pasul 6. Scrieți un

joaca din nou()

metoda pentru

Utilizator

clasă.

Utilizatorul ar trebui să poată juca jocul din nou și din nou. Pentru a determina dacă utilizatorul dorește să joace din nou, trebuie să scriem un

joaca din nou()

metodă care returnează un boolean care spune jocului dacă utilizatorul a decis să joace din nou sau nu. În această metodă, folosim

Scanner

pe care am inițiat-o anterior în constructor pentru a obține un „Da” sau un „Nu” de la utilizator. Vom verifica doar dacă prima literă este „Y” pentru a determina dacă utilizatorul dorește să joace din nou. Orice altă intrare va însemna că utilizatorul nu vrea să redea din nou.

public boolean playAgain () {System.out.print ("Vrei să joci din nou?"); String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); return userInput.charAt (0) == 'Y'; }

1585279 7
1585279 7

Pasul 7. Conectați

Utilizator

și

Calculator

cursuri împreună în

RockPaperScissors

clasă.

Acum că am terminat de scris

Utilizator

și

Calculator

clase, ne putem concentra pe lucrul la jocul nostru real. Creați câmpuri private pentru

Utilizator

și

Calculator

cursuri în

RockPaperScissors

clasă. Va trebui să accesăm aceste câmpuri pentru a accesa

getMove ()

metode atunci când jucăm jocul. În constructorul pentru

RockPaperScissors

clasă, inițiați aceste câmpuri. De asemenea, va trebui să ținem evidența scorului

userScore

și

computerScore

câmpuri, pe care trebuie să le inițiem ca 0 în constructor. Trebuie să urmărim și numărul de jocuri, care va fi, de asemenea, un câmp inițiat ca 0.

utilizator de utilizator privat; computer computer privat; private int userScore; private int computerScore; private int numberOfGames; public RockPaperScissors () {user = new User (); computer = computer nou (); userScore = 0; computerScore = 0; numberOfGames = 0; }

1585279 8
1585279 8

Pasul 8. Extindeți

Mutare

enum pentru a include o metodă care ne spune care mutare câștigă în fiecare caz.

Trebuie să scriem un

compareMoves ()

metoda care returnează 0 dacă mișcările sunt aceleași, 1 dacă mișcarea curentă bate cealaltă mișcare și -1 dacă mișcarea curentă pierde față de cealaltă mișcare. Acest lucru va fi util pentru determinarea câștigătorului în joc. Pentru a implementa această metodă, vom returna mai întâi 0 dacă mișcările sunt aceleași și, prin urmare, avem o egalitate. Apoi scrieți o declarație de comutare pentru returnarea 1 sau -1.

private enum Move {ROCK, HARTIE, foarfece; / ** * Compară această mutare cu o altă mutare pentru a determina o egalitate, o victorie sau * o pierdere. * * @param otherMove * mutați pentru a compara cu * @return 1 dacă această mișcare bate cealaltă mișcare, -1 dacă această mișcare pierde la * cealaltă mișcare, 0 dacă aceste mișcări se leagă * / public int compareMoves (Mutați altulMutați) {/ / Tie if (this == otherMove) returnează 0; switch (this) {case ROCK: return (otherMove == foarfece? 1: -1); case PAPER: return (otherMove == ROCK? 1: -1); caz foarfece: return (otherMove == PAPER? 1: -1); } // Nu ar trebui să ajungi niciodată aici returnează 0; }}

1585279 9
1585279 9

Pasul 9. Creați un

incepe jocul()

metoda în

RockPaperScissors

clasă.

Această metodă va reprezenta jocul. Începeți prin a pune un simplu

System.out.println

în metodă.

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

1585279 10
1585279 10

Pasul 10. Obțineți mișcări de la utilizator și computer

În

incepe jocul()

metoda, utilizați

getMove ()

metode din

Utilizator

clasa și

Calculator

clasă pentru a obține mișcările utilizatorului și computerului.

Mutare userMove = user.getMove (); Muta computerMove = computer.getMove (); System.out.println ("\ nAți jucat" + userMove + "."); System.out.println ("Computer jucat" + computerMove + ". / N");

1585279 11
1585279 11

Pasul 11. Comparați cele două mișcări și stabiliți dacă utilizatorul a câștigat sau computerul a câștigat

Folosește

compareMoves ()

metoda din

Mutare

enum to pentru a determina dacă utilizatorul a câștigat sau nu. Dacă utilizatorul a câștigat, creșteți scorul utilizatorului cu 1. Dacă utilizatorul a pierdut, creșteți scorul computerului cu 1. Dacă a existat o egalitate, nu creșteți niciunul dintre scoruri. Apoi creșteți numărul de jocuri jucate de unul.

int compareMoves = userMove.compareMoves (computerMove); switch (compareMoves) {case 0: // Tie System.out.println ("Tie!"); pauză; cazul 1: // Utilizatorul câștigă System.out.println (userMove + "bate" + computerMove + ". Ai câștigat!"); userScore ++; pauză; caz -1: // Computer câștigă System.out.println (computerMove + "bate" + userMove + ". Ai pierdut."); computerScore ++; pauză; } numberOfGames ++;

1585279 12
1585279 12

Pasul 12. Întrebați dacă utilizatorul vrea să joace din nou

Dacă utilizatorul dorește să redea din nou, sunați

incepe jocul()

din nou. În caz contrar, sunați

printGameStats ()

care va imprima statisticile jocului. Vom scrie această metodă în pasul următor.

if (user.playAgain ()) {System.out.println (); incepe jocul(); } else {printGameStats (); }

1585279 13
1585279 13

Pasul 13. Scrieți

printGameStats ()

metodă.

Această metodă va afișa statisticile jocului: numărul de victorii, numărul de pierderi, numărul de egalități, numărul de jocuri jucate și procentul de jocuri câștigate de utilizator. Procentul de jocuri câștigate este calculat de (# victorii + (# egalități / 2)) / (# jocuri jucate). Această metodă folosește

System.out.printf

pentru a imprima text formatat.

private void printGameStats () {int wins = userScore; int loss = computerScore; int ties = numberOfGames - userScore - computerScore; procent dublu Câștigat = (câștigă + ((dublu) egalități) / 2) / numărOfGame; // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); // Tipărește titlurile System.out.printf ("|% 6s |% 6s |% 6s |% 12s |% 14s | / n", "CÂȘTIGĂRI", "PIERDERI", "LEGĂTURI", "JOCURI JOCATE", "PROCENTARE CASTIGAT"); // 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 ("|"); // Imprimați valorile System.out.printf ("|% 6d |% 6d |% 6d |% 12d |% 13.2f %% | / n", victorii, pierderi, egalități, numberOfGames, percentWon * 100); // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); }

1585279 14
1585279 14

Pasul 14. Începe jocul în clasa principală

În clasa principală, inițializați o instanță a

RockPaperScissors

clasa și sunați la

incepe jocul()

metodă.

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

1585279 15
1585279 15

Pasul 15. Testează-ți jocul

Acum, că am trecut prin tot efortul de a scrie jocul Rock, Paper, foarfece, este timpul să compilăm și să testăm totul!

Program de probă

import java.util. Random; import java.util. Scanner; clasă publică RockPaperScissors {utilizator utilizator privat; computer computer privat; private int userScore; private int computerScore; private int numberOfGames; private enum Move {ROCK, HARTIE, foarfece; / ** * Compară această mutare cu o altă mutare pentru a determina o egalitate, o victorie sau * o pierdere. * * @param otherMove * mutați pentru a compara cu * @return 1 dacă această mișcare bate cealaltă mișcare, -1 dacă această mișcare pierde la * cealaltă mișcare, 0 dacă aceste mișcări se leagă * / public int compareMoves (Mută altulMuți) {/ / Tie if (this == otherMove) returnează 0; switch (this) {case ROCK: return (otherMove == foarfece? 1: -1); case PAPER: return (otherMove == ROCK? 1: -1); caz foarfece: return (otherMove == PAPER? 1: -1); } // Nu ar trebui să ajungi niciodată aici returnează 0; }} private class User {private Scanner inputScanner; Utilizator public () {inputScanner = Scanner nou (System.in); } public Move getMove () {// Solicitați utilizatorului System.out.print („Stâncă, hârtie sau foarfece?”); // Obțineți intrarea utilizatorului String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); char firstLetter = userInput.charAt (0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// Utilizatorul a introdus un comutator de intrare valid (firstLetter) {case 'R': returnează Move. ROCK; cazul 'P': returnează Move. PAPER; cazul 'S': returnează Move. SCISSORS; }} // Utilizatorul nu a introdus o intrare validă. Solicitați din nou. returnează getMove (); } public boolean playAgain () {System.out.print ("Vrei să joci din nou?"); String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); return userInput.charAt (0) == 'Y'; }} private class Computer {public Move getMove () {Move moves = Move.values (); Random random = new Random (); int index = random.nextInt (moves.length); returnează mutări [index]; }} public RockPaperScissors () {user = new User (); computer = computer nou (); userScore = 0; computerScore = 0; numberOfGames = 0; } public void startGame () {System.out.println ("ROCK, PAPER, SCISSORS!"); // Obține mișcări Mută userMove = user.getMove (); Muta computerMove = computer.getMove (); System.out.println ("\ nAți jucat" + userMove + "."); System.out.println ("Computer jucat" + computerMove + ". / N"); // Comparați mișcările și determinați câștigătorul int compareMoves = userMove.compareMoves (computerMove); switch (compareMoves) {case 0: // Tie System.out.println ("Tie!"); pauză; cazul 1: // Utilizatorul câștigă System.out.println (userMove + "bate" + computerMove + ". Ai câștigat!"); userScore ++; pauză; case -1: // Computer câștigă System.out.println (computerMove + "bate" + userMove + ". Ai pierdut."); computerScore ++; pauză; } numberOfGames ++; // Solicitați utilizatorului să redea din nou dacă (user.playAgain ()) {System.out.println (); incepe jocul(); } else {printGameStats (); }} / ** * Tipărește statisticile jocului. Calculează egalități ca 1/2 o victorie în * procent câștigat. * / private void printGameStats () {int wins = userScore; int loss = computerScore; int ties = numberOfGames - userScore - computerScore; procent dublu Câștigat = (câștigă + ((dublu) egalități) / 2) / numărOfGame; // Line System.out.print ("+"); printDashes (68); System.out.println ("+"); // Tipărește titlurile System.out.printf ("|% 6s |% 6s |% 6s |% 12s |% 14s | / n", "CÂȘTIGĂRI", "PIERDERI", "LEGĂTURI", "JOCURI JOCATE", "PROCENTARE CASTIGAT"); // 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 ("|"); // Imprimați valorile System.out.printf ("|% 6d |% 6d |% 6d |% 12d |% 13.2f %% | / n", victorii, pierderi, egalități, numberOfGames, percentWon * 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) {joc RockPaperScissors = new RockPaperScissors (); game.startGame (); }}

Recomandat: