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