Difference between revisions of "Java - I/O und Exceptions"
Line 33: | Line 33: | ||
Die Pokémon sollen aus einer CSV Datei importiert werden (händisches Erfassen ist nicht notwendig). | Die Pokémon sollen aus einer CSV Datei importiert werden (händisches Erfassen ist nicht notwendig). | ||
Mögliche Quelle: | Mögliche Quelle: Pokemon CSV und Attack CSV im Kompetenzcenter | ||
=====Kampf===== | =====Kampf===== |
Revision as of 13:59, 13 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: Pokemon
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 seine ASCII-Art Repräsentierung - falls es keine gibt, kannst du ein Fallback ASCII art einfügen ;) Das gegnerische Pokemon wählt der Computer zufällig.
Die Pokémon sollen aus einer CSV Datei importiert werden (händisches Erfassen ist nicht notwendig). Mögliche Quelle: Pokemon CSV und Attack CSV im Kompetenzcenter
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!"