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

From Coders.Bay Wiki
Jump to navigation Jump to search
Line 29: Line 29:
Der User soll ein Pokemon auswählen und mit Hilfe verschiedener Attacken ein gegnerisches bekämpfen.
Der User soll ein Pokemon auswählen und mit Hilfe verschiedener Attacken ein gegnerisches bekämpfen.


<font size=3><strong>Requirements</strong></font>
=====CSV Einlesen=====
=====CSV Einlesen=====



Revision as of 09:49, 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 auswählen und mit Hilfe verschiedener Attacken ein gegnerisches bekämpfen.

Requirements

CSV Einlesen

Inkludiere 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 zufällig Attacken bekommen. Mindestens eine davon soll vom Typ Normal sein und mindestens eine Attacke soll dem Typ entsprechen.

Selektion

Der Spieler kann zu Beginn des Spiels ein Pokémon durch Angabe der Index-Nummer oder dem Namen des Pokémons wählen, dieses wird für den Kampf ausgewählt.

Gib auf der Konsole aus, um welches Pokemon es sich handelt und Das gegnerische Pokemon wählt der Computer zufällig.

Kampf

Zu Beginn des Kampfs, werden dem Spieler die Stats seines Pokémons ausgegeben. Das könnte z.B so aussehen:

Bulbasaur (80/100 ♥) Squirtle (100/100 ♥)
(1) Overgrow Torrent
(2) Chlorophyll Rain Dish

Bulbasaur ist dabei der Name des Pokémons. 80 seine aktuelle Gesundheit, 100 ist die maximale Gesundheit (HP google sheet) Overgrow und Chlorophyll sind dabei die beiden möglichen Attacken (abilities).

Der Benutzer kann dann durch Angabe einer Zahl spezifizieren welche Attacke ausgewählt werden soll (1 oder 2 in unserem Fall). Bei einer fehlerhaften Angabe, solltest du den Benuter auffordern eine existierende Attacke zu wählen.

Auf der Konsole solltest du dann ausgeben welche Attacke gewählt wurde:

Bulbasur attacks with Overgrow. Bulbasur deals X damage.


Dann sollte Squirtles health um X verringert werden.

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!"