[JAVA] Objektorientierter

Einführung

Ich habe vor kurzem angefangen, Java zu studieren, also wollte ich etwas objektorientiertes machen.

fließen

① Geben Sie Ihren Namen ein. (Der Name der anderen Partei wird zufällig festgelegt.) ② Wählen Sie einen Zug. (Die Hand des Gegners wird zufällig entschieden.) ③ Geben Sie das Ergebnis aus. ④ Das Ende. (Dies ist ein einmaliges Spiel.)

Klassen

①Janken.java Dies ist die Hauptfunktion.

Janken.java


public class Janken {
    public static void main(String[] args) {
        Player you   = new You();
        Player enemy = new Enemy();

        System.out.print("Bitte geben Sie Ihren Namen ein. ::> ");
        you.setName();
        enemy.setName();
        String yourName  = you.getName();
        String enemyName = enemy.getName();
        System.out.println("Dein Name ist" + yourName);
        System.out.println("Der Name der anderen Partei ist" + enemyName);

        Hand yourHand  = you.nextHand();
        Hand enemyHand = enemy.nextHand();

        System.out.println(yourName   + "Ist" + yourHand  +  "Wurde ausgestellt.");
        System.out.println(enemyName  + "Ist" + enemyHand +  "Wurde ausgestellt.");

        if (yourHand.winTo(enemyHand)) {
            System.out.println(yourName + "Nokachi!");
        } else if (yourHand.loseTo(enemyHand)) {
            System.out.println(yourName + "Bonus ...");
        } else {
            System.out.println("Das ist Aiko.");
        }
    }
}

②Player.java Eine abstrakte Klasse mit groben Informationen über den Spieler. Erben Sie diese Klasse und erstellen Sie eine Klasse für Sie und Ihren Gegner.

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("Was zu löschen?Schmiere:0 choki:1 Abs: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("Eine Nummer außerhalb des Bereichs wurde eingegeben.");
                }
            } catch (NumberFormatException e) {
                System.err.println("Andere als Nummern wurden eingegeben");
            }
        }
    }
}

④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 Ich habe eine Aufzählungstypklasse verwendet.

Hand.java


public enum Hand {
    Rock,
    Scissors,
    Paper;

    @Override
    public String toString() {
        switch (this) {
            case Rock     : return "Schmiere";
            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); 
    }
    
}

das ist alles. Es scheint interessant, sich viele Feinde zu machen und Turnierschlachten zu spielen oder eine Strategieklasse zu bilden. Ich würde mich über Verbesserungen freuen.

Recommended Posts

Objektorientierter
Objektorientierte Zusammenfassung
Objekt orientierte Programmierung
Einfache Janken
Janken-Spiel
[Java] Objektorientiert
Java Janken
Objektorientiertes FizzBuzz (Java)
Janken in Java
Objektorientierter Programmierbegriff
[Java] Objektorientierte Syntax - Konstruktor
Objektorientierte (Java) Grundlagen
Objektorientierte numerische Berechnung
[Java] Objektorientierte Zusammenfassung_Teil 2
[Java] Objektorientierte Syntax --Paket