J'ai récemment commencé à étudier Java, donc je voulais faire quelque chose orienté objet.
① Entrez votre nom. (Le nom de l'autre partie est décidé au hasard.) ② Choisissez un mouvement. (La main de l'adversaire est décidée au hasard.) ③ Sortez le résultat. ④ La fin. (Il s'agit d'un match unique.)
①Janken.java C'est la fonction principale.
Janken.java
public class Janken {
public static void main(String[] args) {
Player you = new You();
Player enemy = new Enemy();
System.out.print("S'il vous plaît entrez votre nom. :> ");
you.setName();
enemy.setName();
String yourName = you.getName();
String enemyName = enemy.getName();
System.out.println("Ton nom est" + yourName);
System.out.println("Le nom de l'autre partie est" + enemyName);
Hand yourHand = you.nextHand();
Hand enemyHand = enemy.nextHand();
System.out.println(yourName + "Est" + yourHand + "A été publiée.");
System.out.println(enemyName + "Est" + enemyHand + "A été publiée.");
if (yourHand.winTo(enemyHand)) {
System.out.println(yourName + "Nokachi!");
} else if (yourHand.loseTo(enemyHand)) {
System.out.println(yourName + "Prime ...");
} else {
System.out.println("C'est Aiko.");
}
}
}
②Player.java Une classe abstraite avec des informations approximatives sur le joueur. Héritez de cette classe et créez une classe pour vous et votre adversaire.
Player.java
public abstract class Player {
protected String name;
public String getName(){
return this.name;
}
public abstract void setName();
public abstract Hand nextHand();
}
③you.java
You.java
import java.util.*;
public class You extends Player {
@Override
public void setName() {
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
this.name = name;
}
@Override
public Hand nextHand() {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("Quoi sortir?Goo:0 choki:1 par:2 > ");
try {
int hand_number = Integer.parseInt(scanner.nextLine());
if (0 <= hand_number && hand_number <= 2) {
return Hand.fromInt(hand_number);
} else {
System.err.println("Un nombre en dehors de la plage a été entré.");
}
} catch (NumberFormatException e) {
System.err.println("D'autres que des nombres ont été saisis");
}
}
}
}
④Enemy.java
Enemy.java
public class Enemy extends Player {
private final String[] names = {"Abe", "Koizumi", "Aso", "Suga"};
@Override
public void setName() {
String enemyName = names[(int) (Math.random() * names.length)];
this.name = enemyName;
}
@Override
public Hand nextHand() {
return Hand.fromInt((int) (Math.random() * 3));
}
}
⑤Hand.java J'ai utilisé une classe de type énumération.
Hand.java
public enum Hand {
Rock,
Scissors,
Paper;
@Override
public String toString() {
switch (this) {
case Rock : return "Goo";
case Scissors : return "Choki";
case Paper : return "Par";
}
throw new IllegalStateException();
}
public static Hand fromInt(int n) {
switch (n) {
case 0 : return Rock;
case 1 : return Scissors;
case 2 : return Paper;
}
throw new IllegalArgumentException(Integer.toString(n));
}
public boolean winTo(Hand hand) {
switch (this) {
case Rock : return hand == Scissors;
case Scissors : return hand == Paper;
case Paper : return hand == Rock;
}
throw new IllegalStateException();
}
public boolean loseTo(Hand hand) {
return this != hand && !this.winTo(hand);
}
}
c'est tout. Il semble intéressant de se faire beaucoup d'ennemis et de jouer à des batailles de tournoi, ou de faire un cours de stratégie. J'apprécierais toute amélioration.
Recommended Posts