Comment faire un jeu de pierre, de papier et de ciseaux en Java (avec des images)

Table des matières:

Comment faire un jeu de pierre, de papier et de ciseaux en Java (avec des images)
Comment faire un jeu de pierre, de papier et de ciseaux en Java (avec des images)

Vidéo: Comment faire un jeu de pierre, de papier et de ciseaux en Java (avec des images)

Vidéo: Comment faire un jeu de pierre, de papier et de ciseaux en Java (avec des images)
Vidéo: Des textures GRATUITES pour SketchUp à l' INFINI ! 2024, Peut
Anonim

Rock, Paper, Scissors est un jeu de main joué par deux personnes. Les deux personnes diraient "pierre, papier, ciseaux", puis formeraient simultanément l'un des trois objets (pierre, papier ou ciseaux) avec une main tendue. Le gagnant est déterminé par les formations des mains. Les ciseaux battent le papier, le papier bat la pierre et la pierre bat les ciseaux. Si les deux joueurs jouent la même formation de main, cela est considéré comme une égalité. Nous allons écrire un jeu simple en Java pour simuler Roche, Papier, Ciseaux où un joueur est l'utilisateur et l'autre joueur est l'ordinateur.

Pas

1585279 1 1
1585279 1 1

Étape 1. Créez la classe principale et appelez-la

Pierre papier ciseaux

.

Ce sera la classe où nous écrirons le jeu. Vous pouvez choisir de le nommer autrement, par exemple

Jeu

ou

Principale

. Écrivez des déclarations de méthode pour le constructeur et la méthode principale.

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

1585279 2 1
1585279 2 1

Étape 2. Créez une énumération pour les gestes de la main (pierre, papier ou ciseaux)

Nous pourrions utiliser des chaînes pour représenter la pierre, le papier ou les ciseaux, mais une énumération nous permet de prédéfinir nos constantes, ce qui signifie que l'utilisation de l'énumération est une meilleure conception. Nous appellerons notre type enum

Se déplacer

avec les valeurs

ROCHE

PAPIER

et

LES CISEAUX

private enum Move { ROCHE, PAPIER, CISEAUX }

1585279 3 1
1585279 3 1

Étape 3. Créez deux cours privés

Utilisateur

et

Ordinateur

.

Ces classes représenteront nos joueurs dans le jeu. Vous pouvez choisir de rendre ces classes publiques. Les

Utilisateur

classe sera la classe qui invite l'utilisateur à utiliser une pierre, du papier ou des ciseaux, nous devrons donc écrire un

getMove()

méthode. Les

Ordinateur

la classe devra également avoir un

getMove()

méthode pour que l'ordinateur puisse également faire un mouvement. Nous mettrons des espaces réservés dans ces méthodes et les implémenterons plus tard. Les

Utilisateur

La classe nécessitera un constructeur qui configure le

Scanner

objet à prendre dans l'entrée de l'utilisateur. Nous mettrons le

Scanner

en tant que champ privé pour l'utilisateur, puis l'initier dans le constructeur. Puisque nous utilisons le

Scanner

class, nous devons écrire une instruction d'importation pour elle en haut de notre code. Les

Ordinateur

class ne nécessite pas de constructeur, nous n'avons donc pas besoin d'en écrire un; quand on lance le

Ordinateur

objet, nous appellerons simplement le constructeur par défaut. Voici ce que notre

Pierre papier ciseaux

la classe ressemble à maintenant:

importer java.util. Scanner; public class RockPaperScissors { private enum Move { ROCK, PAPER, CISEAUX } private class User { private Scanner inputScanner; public User() { inputScanner = new Scanner(System.in); } public Move getMove() { // TODO: Implémenter cette méthode return null; } } private class Computer { public Move getMove() { // TODO: Implémenter cette méthode return null; } } public RockPaperScissors() { } public static void main(String args) { } }

1585279 4 1
1585279 4 1

Étape 4. Écrivez le

getMove()

méthode pour le

Ordinateur

classer.

Cette méthode renverra un aléatoire

Se déplacer

. Nous pouvons obtenir un tableau de

Se déplacer

énumérations en appelant le

valeurs()

méthode:

Déplacer.values()

. Pour choisir au hasard

Se déplacer

énumération dans ce tableau de valeurs, nous devons générer un index aléatoire qui est un entier compris entre 0 et la longueur de notre tableau de valeurs. Pour ce faire, nous pouvons utiliser le

suivantEntier()

méthode de la

Aléatoire

classe à partir de laquelle nous devons importer

java.util

. Après avoir obtenu l'index aléatoire, nous pouvons retourner le

Se déplacer

de cet index de notre tableau de valeurs.

public Move getMove() { Move moves = Move.values(); Aléatoire aléatoire = nouveau Aléatoire(); int index = random.nextInt(moves.length); retour mouvements[index]; }

1585279 5 1
1585279 5 1

Étape 5. Écrivez le

getMove()

méthode pour le

Utilisateur

classer.

Cette méthode retournera un

Se déplacer

correspondant à ce que l'utilisateur a entré. Nous nous attendons à ce que l'utilisateur écrive soit "pierre", "papier" ou "ciseaux". Tout d'abord, nous devons demander à l'utilisateur une entrée:

System.out.print("Pierre, papier ou ciseaux ? ")

. Utilisez ensuite le

nextLine()

méthode de la

Scanner

objet pour obtenir l'entrée de l'utilisateur sous forme de chaîne. Nous devons maintenant vérifier si l'utilisateur a soumis un coup valide, mais nous pouvons être indulgents si l'utilisateur a mal orthographié un mot. Nous vérifierons donc uniquement si la première lettre de l'entrée utilisateur est soit "R" (pour pierre), "P" (pour papier) ou "S" (pour ciseaux), et nous ne nous soucierons pas de l'affaire car nous utiliserons d'abord le

en majuscule()

méthode de la

Chaîne de caractères

class pour que la chaîne de saisie de l'utilisateur soit entièrement en majuscules. Si l'utilisateur n'a pas saisi une entrée correcte à distance, nous l'inviterons à nouveau. Ensuite, en fonction de ce que l'utilisateur a mis, nous renverrons un coup correspondant.

public Move getMove() { // Invite l'utilisateur System.out.print("Pierre, papier ou ciseaux ? "); // Récupère l'entrée utilisateur String userInput = inputScanner.nextLine(); userInput = userInput.toUpperCase(); char firstLetter = userInput.charAt(0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') { // L'utilisateur a entré un commutateur d'entrée valide (firstLetter) { case 'R': return Move. ROCK; case 'P': return Move. PAPER; case 'S': return Move. SCISSORS; } } // L'utilisateur n'a pas entré une entrée valide. Demander à nouveau. return getMove(); }

1585279 6
1585279 6

Étape 6. Écrivez un

rejouer()

méthode pour le

Utilisateur

classer.

L'utilisateur doit pouvoir jouer au jeu encore et encore. Afin de déterminer si l'utilisateur veut rejouer, nous devons écrire un

rejouer()

méthode qui renvoie un booléen indiquant au jeu si l'utilisateur a décidé de rejouer ou non. Dans cette méthode, nous utilisons le

Scanner

que nous avions précédemment initié dans le constructeur pour obtenir un "Oui" ou un "Non" de l'utilisateur. Nous vérifierons uniquement si la première lettre est « Y » pour déterminer si l'utilisateur souhaite rejouer. Toute autre entrée signifie que l'utilisateur ne veut plus jouer.

public boolean playAgain() { System.out.print("Voulez-vous rejouer ? "); Chaîne userInput = inputScanner.nextLine(); userInput = userInput.toUpperCase(); return userInput.charAt(0) == 'Y'; }

1585279 7
1585279 7

Étape 7. Connectez le

Utilisateur

et

Ordinateur

cours ensemble dans le

Pierre papier ciseaux

classer.

Maintenant que nous avons fini d'écrire le

Utilisateur

et

Ordinateur

classes, nous pouvons nous concentrer sur le travail sur notre jeu réel. Créer des champs privés pour le

Utilisateur

et

Ordinateur

cours dans le

Pierre papier ciseaux

classer. Nous aurons besoin d'accéder à ces champs pour accéder au

getMove()

méthodes lorsque nous jouons au jeu. Dans le constructeur du

Pierre papier ciseaux

classe, initiez ces champs. Nous devrons également garder une trace du score dans

userScore

et

ordinateurScore

champs, que nous devons lancer en tant que 0 dans le constructeur. Nous devons également garder une trace du nombre de jeux, qui sera également un champ initié en tant que 0.

Utilisateur privé utilisateur; ordinateur privé; private int userScore; private int computerScore; private int numberOfGames; public RockPaperScissors() { utilisateur = nouvel utilisateur(); ordinateur = nouvel ordinateur(); scoreutilisateur = 0; ordinateurScore = 0; nombreDeJeux = 0; }

1585279 8
1585279 8

Étape 8. Étendre le

Se déplacer

enum pour inclure une méthode qui nous indique quel mouvement gagne dans chaque cas.

Nous devons écrire un

comparerMoves()

méthode qui renvoie 0 si les coups sont les mêmes, 1 si le coup courant bat l'autre coup, et -1 si le coup courant perd face à l'autre coup. Cela sera utile pour déterminer le gagnant du jeu. Pour implémenter cette méthode, nous renverrons d'abord 0 si les coups sont les mêmes et donc nous avons une égalité. Ensuite, écrivez une instruction switch pour renvoyer 1 ou -1.

private enum Move { ROCHE, PAPIER, CISEAUX; /** * Compare ce coup avec un autre coup pour déterminer une égalité, une victoire ou * une défaite. * * @param otherMove * mouvement à comparer à * @return 1 si ce mouvement bat l'autre mouvement, -1 si ce mouvement perd contre * l'autre mouvement, 0 si ces mouvements sont à égalité */ public int compareMoves(Move otherMove) { / / Tie if (this == otherMove) return 0; switch (this) { case ROCK: return (otherMove == CISEAUX ? 1: -1); case PAPIER: return (otherMove == ROCK ? 1: -1); case CISEAUX: return (otherMove == PAPER ? 1: -1); } // Ne devrait jamais atteindre ici return 0; } }

1585279 9
1585279 9

Étape 9. Créez un

démarrer jeu()

méthode dans le

Pierre papier ciseaux

classer.

Cette méthode sera le jeu du jeu. Commencez par mettre un simple

System.out.println

dans la méthode.

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

1585279 10
1585279 10

Étape 10. Obtenez des mouvements de l'utilisateur et de l'ordinateur

Dans le

démarrer jeu()

méthode, utilisez la

getMove()

méthodes de la

Utilisateur

classe et le

Ordinateur

classe pour obtenir les mouvements de l'utilisateur et de l'ordinateur.

Déplacer userMove = user.getMove(); Déplacer ordinateurMove = ordinateur.getMove(); System.out.println("\nVous avez joué à " + userMove + "."); System.out.println("Ordinateur lu " + computerMove + ".\n");

1585279 11
1585279 11

Étape 11. Comparez les deux mouvements et déterminez si l'utilisateur a gagné ou l'ordinateur a gagné

Utilisez le

comparerMoves()

méthode de la

Se déplacer

enum pour déterminer si l'utilisateur a gagné ou non. Si l'utilisateur a gagné, augmentez le score de l'utilisateur de 1. Si l'utilisateur a perdu, augmentez le score de l'ordinateur de 1. En cas d'égalité, n'incrémentez aucun des scores. Augmentez ensuite le nombre de parties jouées d'une unité.

int compareMoves = userMove.compareMoves(computerMove); switch (compareMoves) { case 0: // Attache System.out.println(" Attache !"); Pause; case 1: // L'utilisateur gagne System.out.println(userMove + " bat " + computerMove + ". Vous avez gagné !"); userScore++; Pause; case -1: // L'ordinateur gagne System.out.println(computerMove + " bat " + userMove + ". Vous avez perdu."); ordinateurScore++; Pause; } nombreDeJeux++;

1585279 12
1585279 12

Étape 12. Demandez si l'utilisateur souhaite rejouer

Si l'utilisateur souhaite rejouer, appelez

démarrer jeu()

de nouveau. Sinon, appelez

printGameStats()

qui imprimera les statistiques du jeu. Nous écrirons cette méthode dans la prochaine étape.

if (user.playAgain()) { System.out.println(); démarrer jeu(); } else { printGameStats(); }

1585279 13
1585279 13

Étape 13. Écrivez le

printGameStats()

méthode.

Cette méthode affichera les statistiques du jeu: nombre de victoires, nombre de défaites, nombre d'égalités, nombre de parties jouées et pourcentage de parties gagnées par l'utilisateur. Le pourcentage de parties gagnées est calculé par le (# victoires + (# égalités/2))/(# parties jouées). Cette méthode utilise

System.out.printf

pour imprimer du texte formaté.

private void printGameStats() { int wins = userScore; int pertes = computerScore; int ties = numberOfGames - userScore - computerScore; double pourcentageWon = (gagne + ((double) égalité) / 2) / numberOfGames; // Ligne System.out.print("+"); printtirets(68); System.out.println("+"); // Titres imprimés System.out.printf("| %6s | %6s | %6s | %12s | %14s |\n", "GAGNANTS", "PERDUS", "ÉGALITÉS", "JEUX JOUÉS", "POURCENTAGE A GAGNÉ"); // Ligne System.out.print("|"); printtirets(10); System.out.print("+"); printtirets(10); System.out.print("+"); printtirets(10); System.out.print("+"); printtirets(16); System.out.print("+"); printtirets(18); System.out.println("|"); // Affiche les valeurs System.out.printf("| %6d | %6d | %6d | %12d | %13.2f%% |\n", victoires, défaites, égalités, numberOfGames, pourcentageWon * 100); // Ligne System.out.print("+"); printtirets(68); System.out.println("+"); }

1585279 14
1585279 14

Étape 14. Démarrez le jeu dans la classe principale

Dans la classe principale, initialisez une instance de la

Pierre papier ciseaux

classe et appelez le

démarrer jeu()

méthode.

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

1585279 15
1585279 15

Étape 15. Testez votre jeu

Maintenant que nous avons fait tous les efforts pour écrire le jeu Roche, Papier, Ciseaux, il est temps de compiler et de tout tester !

Exemple de programme

importer java.util. Random; importer java.util. Scanner; public class RockPaperScissors { privé User user; ordinateur privé; private int userScore; private int computerScore; private int numberOfGames; private enum Move { ROCHE, PAPIER, CISEAUX; /** * Compare ce coup avec un autre coup pour déterminer une égalité, une victoire ou * une défaite. * * @param otherMove * mouvement à comparer à * @return 1 si ce mouvement bat l'autre mouvement, -1 si ce mouvement perd contre * l'autre mouvement, 0 si ces mouvements sont à égalité */ public int compareMoves(Move otherMove) { / / Tie if (this == otherMove) return 0; switch (this) { case ROCK: return (otherMove == CISEAUX ? 1: -1); case PAPIER: return (otherMove == ROCK ? 1: -1); case CISEAUX: return (otherMove == PAPER ? 1: -1); } // Ne devrait jamais atteindre ici return 0; } } classe privée User { private Scanner inputScanner; public User() { inputScanner = new Scanner(System.in); } public Move getMove() { // Invite l'utilisateur System.out.print("Pierre, papier ou ciseaux ? "); // Récupère l'entrée utilisateur String userInput = inputScanner.nextLine(); userInput = userInput.toUpperCase(); char firstLetter = userInput.charAt(0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') { // L'utilisateur a entré un commutateur d'entrée valide (firstLetter) { case 'R': return Move. ROCK; case 'P': return Move. PAPER; case 'S': return Move. SCISSORS; } } // L'utilisateur n'a pas entré une entrée valide. Demander à nouveau. return getMove(); } public boolean playAgain() { System.out.print("Voulez-vous rejouer ? "); Chaîne userInput = inputScanner.nextLine(); userInput = userInput.toUpperCase(); return userInput.charAt(0) == 'Y'; } } classe privée Ordinateur { public Move getMove() { Move moves = Move.values(); Aléatoire aléatoire = nouveau Aléatoire(); int index = random.nextInt(moves.length); retour mouvements[index]; } } public RockPaperScissors() { user = new User(); ordinateur = nouvel ordinateur(); scoreutilisateur = 0; ordinateurScore = 0; nombreDeJeux = 0; } public void startGame() { System.out.println("ROCK, PAPER, CISEAUX!"); // Obtenir les déplacements Déplacer userMove = user.getMove(); Déplacer ordinateurMove = ordinateur.getMove(); System.out.println("\nVous avez joué à " + userMove + "."); System.out.println("Ordinateur lu " + computerMove + ".\n"); // Comparez les mouvements et déterminez le gagnant int compareMoves = userMove.compareMoves(computerMove); switch (compareMoves) { case 0: // Attache System.out.println(" Attache !"); Pause; case 1: // L'utilisateur gagne System.out.println(userMove + " bat " + computerMove + ". Vous avez gagné !"); userScore++; Pause; case -1: // L'ordinateur gagne System.out.println(computerMove + " bat " + userMove + ". Vous avez perdu."); ordinateurScore++; Pause; } nombreDeJeux++; // Demande à l'utilisateur de rejouer if (user.playAgain()) { System.out.println(); démarrer jeu(); } else { printGameStats(); } } /** * Imprime les statistiques du jeu. Calcule les égalités comme 1/2 victoire en * pourcentage gagné. */ private void printGameStats() { int wins = userScore; int pertes = computerScore; liens int = numberOfGames - userScore - computerScore; double pourcentageWon = (gagne + ((double) égalité) / 2) / numberOfGames; // Ligne System.out.print("+"); printtirets(68); System.out.println("+"); // Titres imprimés System.out.printf("| %6s | %6s | %6s | %12s | %14s |\n", "GAGNANTS", "PERDUS", "ÉGALITÉS", "JEUX JOUÉS", "POURCENTAGE A GAGNÉ"); // Ligne System.out.print("|"); printtirets(10); System.out.print("+"); printtirets(10); System.out.print("+"); printtirets(10); System.out.print("+"); printtirets(16); System.out.print("+"); printtirets(18); System.out.println("|"); // Affiche les valeurs System.out.printf("| %6d | %6d | %6d | %12d | %13.2f%% |\n", victoires, défaites, égalités, numberOfGames, pourcentageWon * 100); // Ligne System.out.print("+"); printtirets(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(); } }

Conseillé: