Ich habe vor kurzem angefangen, Java zu studieren, also wollte ich etwas objektorientiertes machen.
① 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.)
①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