Difference between revisions of "Java - I/O und Exceptions"

From Coders.Bay Wiki
Jump to navigation Jump to search
Line 36: Line 36:
Jedes Pokemon soll vier zufällige Attacken bekommen. Mindestens eine davon soll vom Typ Normal sein und mindestens eine Attacke soll dem Typ des Pokemon entsprechen.
Jedes Pokemon soll vier zufällige Attacken bekommen. Mindestens eine davon soll vom Typ Normal sein und mindestens eine Attacke soll dem Typ des Pokemon entsprechen.


=====Selektion=====
=====Auswahl=====


Beide Spieler sollen sechs Pokemon erhalten. Das gleiche Pokemon kann mehrfach vorkommen.<br>
Beide Spieler sollen sechs Pokemon erhalten. Das gleiche Pokemon kann mehrfach vorkommen.<br>

Revision as of 12:00, 14 March 2023

Exceptions

Aufgabe: Erweitere die Personenverwaltung um Exceptions

Die, in der früheren Aufgabe erstellte, Personenverwaltung, soll nun etwas sicherer für Fehler gemacht werden.
Erweitere den Code so, dass der User die Personen mit Hilfe eines Scanners erstellt.
Dabei soll auf ungültige Inputs vernünftig reagiert werden, ohne dass das Programm abstürzt.

Requirements

InvaldName-Exception

Wenn ein Nutzer eine Person anlegt, die eine Zahl im Namen hat, soll eine "InvalidName-Exception" geworfen werden.
Die Anlegung des Objektes soll abgebrochen werden und der Nutzer informiert, dass dieser Name ungültig ist.
Das Programm soll nicht terminieren, sondern den Nutzer erneut bitten einen Namen einzugeben.

NullpointerException

Der Nutzer soll Personen durch ihren Namen finden können.
Wird ein Name eingegeben, der nicht existiert, soll eine NullpointerException in der Personalverwaltung geworfen werden.
Der Stacktrace dieser Exception soll in der Main ausgegeben werden.
Das Programm soll nicht terminieren und weitere Inputs erhalten.

Terminierung

Das Programm soll nur durch die Eingabe von ":q!" terminierbar sein.

File I/O

Aufgabe: Nutze die CSV-Dateien um ein Pokemon Arena Spiel zu erstellen

Mit den zur Verfügung gestellten Datensätzen soll der Arena Kampf von Pokemon approximiert rekonstruiert werden.
Der User soll ein Pokemon Team auswählen und mit Hilfe verschiedener Attacken ein gegnerisches Pokemon Team, welches vom Computer gesteuert wird bekämpfen.

Requirements

CSV Einlesen

Importiere die Pokemon CSV und Attack CSV aus dem Kompetenzcenter in dein Projekt.
Lese die Daten ein und Erstelle daraus die notwendigen Klassen.
Jedes Pokemon soll vier zufällige Attacken bekommen. Mindestens eine davon soll vom Typ Normal sein und mindestens eine Attacke soll dem Typ des Pokemon entsprechen.

Auswahl

Beide Spieler sollen sechs Pokemon erhalten. Das gleiche Pokemon kann mehrfach vorkommen.
Wenn ein Pokemon selektiert wird, wird sein Level zufällig von 10-100 ausgewürfelt. Die Werte des Pokemon skalieren mit dem Level.
Für jedes Level erhöhen sich die HP um 1/25 pro Level, die Att/Def/Sp.Att/Sp.Def um 1/50 pro Level und die Speed um 1/100 pro Level.
Der Nutzer kann zu Beginn des Spiels das erste Pokémon durch Angabe der Index-Nummer oder dem Namen wählen, dieses wird für den Kampf ausgewählt.
Anschließend werden fünf zufällige weitere hinzugefügt.
Gib auf der Konsole aus, um welche Pokemon es sich handelt und welche Werte und mögliche Attacken es hat.
Die gegnerischen Pokemon wählt der Computer zufällig.

Kampf

Nach der Selektion soll der Kampf gestartet werden.
Zu Beginn des Kampfs, werden dem Nutzer die Werte all seiner Pokemon ausgegeben.
Der Nutzer kann eines der Pokemon auswählen. Diese kommt in den Kampf gegen ein zufälliges des gegnerischen Teams.
Wenn beide Spieler ein Pokemon ausgewählt haben beginnt der Kampf.

Dem Nutzer werden die vier Attacken aufgelistet. Zusätzlich noch die Möglichkeit ein neues Pokemon zu wählen und die Möglichkeit den Kampfverlauf automatisch zu beenden.
Wählt der Nutzer einen Angriff aus der Liste, versucht das Pokemon anzugreifen.
Wenn die gewählte Attacke keine Powerpoints (PP) hat, kann sie nicht ausgeführt werden.
Wenn die Attacke ausgeführt wird, dann beginnt die Schadensberechnung.

Schadensberechnung

Der Schaden den das Pokemon anrichtet errechnet sich aus dem `attack` Wert des angreifendes Pokemons multipliziert mit einem zufälligen Modifikator (zwischen 0 und 1). Natürlich verteidigt sich das gegnerische Pokemon aus - der Verteidigungswert errechnet sich aus dem `defense` Wert des verteidigendes Pokemons multipliziert mit einem zufälligen Modifikator (zwischen 0 und 0.5).

Wenn nun der Angriffswert - Verteidigungswert positiv ist, wird dieser Wert von den HP jenes Pokemons abgezogen, dass angegriffen wird.

Beispiel: Bulbasurs hat einen Angriffswert von 48. Squirtle eine verteidigung von 65. Der zufällige Angriffsmodifikator ist 0.7, der Verteidigungsmodifikator 0.1.

0.7*48 - 0.1*65 = 27.1

Also wird bei dieser Attacke Squirtle 27 HP verlieren.

Das gegnerische Pokemon wählt seine Attacke zufällig.

Das Pokemon dass zu erst 0 oder weniger HP erreicht verliert.

Zusatzaufgabe (sehr empfohlen 😜)

Ein Pokemon ist 1 - bis 2 Typen zugehörig -- siehe git. Persistiere diese zusätzlich in unserem Datenmodell. Ein Pokemon hat zusätzliche Modifikatoren für den Angriff/die Verteidigung gegen Pokemons von bestimmten Typen - Spalten against_bug, against_grass, .. (siehe git).

Bulbasur ist ein grass und poison Pokemon. Squirtle ist ein water Pokemon. Bulbasur hat einen Wert von 0.5 für against_water. Dieser Modifikator muss auf die base attack angewandt werden d.h. bei unserem vorigen Beispiel würde sich der Angriffswert folgendermaßen ändern:

0.7*0.5*48 - 0.1*65 = 10.3

Das heißt Squirtle würde nur 10 HP verlieren.

English

Exceptions

Task: Add exceptions to the person management

The person administration, that was created in the previous task, should now be made more resilient to errors.
Extend the code so the user can create the people through a scanner.
React properly to invalid inputs by using Exceptions to change Control Flow.

Requirements

InvaldName-Exception

When a user creates a person that has a number in the name, an "InvalidName-Exception" should be thrown.
The creation of the object shall be aborted and the user should be informed that this name is invalid.
The program should not terminate, but ask the user to enter a new name.

NullpointerException

The user should be able to find people by name.
If a name is entered that does not exist, a NullpointerException should be thrown in the person management.
The stacktrace of this exception should be printed in the main method.
The program shall not terminate and receive new inputs from the user.

Termination

The execution of the program shall only stop for the user input ":q!"