[JAVA] Orienté objet

introduction

J'ai récemment commencé à étudier Java, donc je voulais faire quelque chose orienté objet.

couler

① 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.)

Des classes

①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

Orienté objet
Résumé orienté objet
Programmation orientée objet
Janken simple
Jeu de Janken
[Java] Orienté objet
java Janken
FizzBuzz orienté objet (Java)
Janken à Java
Terme de programmation orienté objet
[Java] Syntaxe orientée objet --Constructeur
Notions de base orientées objet (Java)
Calcul numérique orienté objet
[Java] Résumé orienté objet_Partie 2
[Java] Syntaxe orientée objet --Package