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

From Coders.Bay Wiki
Jump to navigation Jump to search
Line 39: Line 39:
Lese die Daten ein und erstelle daraus die notwendigen Klassen.<br>
Lese die Daten ein und erstelle daraus die notwendigen Klassen.<br>
Jedes Pokémon soll zwei zufällige Attacken bekommen.
Jedes Pokémon soll zwei zufällige Attacken bekommen.
Achtung: Falls man beim Einlesen der CSV den Header (also die Spaltennamen) mitparsen möchte, muss man auf die Byte-Order-Mark aufpassen! Diese muss entweder überlesen werden oder mittels Replace ersetzt werden: (https://stackoverflow.com/questions/4897876/reading-utf-8-bom-marker)


=====Auswahl=====
=====Auswahl=====

Revision as of 09:16, 22 February 2024

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 oder alternativ ein Skript (in der main methode) erstellt wird um die Eingaben zu simulieren.
Dabei soll auf ungültige Inputs vernünftig reagiert werden, ohne dass das Programm abstürzt.

Requirements

InvalidPersonName-Exception

Wenn ein Nutzer eine Person anlegt, die eine Zahl im Namen hat, soll eine "InvalidPersonName-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.

Test

Option 1: Das Programm ist durch die Eingabe von ":q!" terminierbar.

Option 2: Du schreibst entsprechende Unittests, um zu prüfen, dass die richtige Exception geworfen wird.

File I/O

Aufgabe: Nutze die CSV-Dateien um ein Pokémon Arena Spiel zu erstellen

Mit den zur Verfügung gestellten Datensätzen soll der Arenakampf von Pokémon nachgebaut werden.
Der User soll ein Pokémon auswählen und mithilfe verschiedener Attacken ein gegnerisches Pokémon, welches vom Computer gesteuert wird, bekämpfen.

Requirements

CSV Einlesen

Importiere die Pokémon CSV und Attack CSV aus dem Kompetenzcenter in dein Projekt.
Lese die Daten ein und erstelle daraus die notwendigen Klassen.
Jedes Pokémon soll zwei zufällige Attacken bekommen.

Achtung: Falls man beim Einlesen der CSV den Header (also die Spaltennamen) mitparsen möchte, muss man auf die Byte-Order-Mark aufpassen! Diese muss entweder überlesen werden oder mittels Replace ersetzt werden: (https://stackoverflow.com/questions/4897876/reading-utf-8-bom-marker)

Auswahl

Der Nutzer kann zu Beginn des Spiels ein Pokémon durch Angabe der Index-Nummer oder dem Namen wählen, dieses wird für den Kampf ausgewählt.
Gib auf der Konsole aus, um welches Pokémon es sich handelt und welche Werte und mögliche Attacken es hat.
Das gegnerischen Pokémon wählt der Computer zufällig.

Kampf

Nach der Selektion soll der Kampf gestartet werden.

Dem Nutzer werden die zwei Attacken aufgelistet. Wählt der Nutzer einen Angriff aus der Liste, greift das Pokémon an.
Wenn die Attacke ausgeführt wird, dann beginnt die Schadensberechnung.

Schadensberechnung

Der Schaden berechnet sich wie folgt:

Schaden = (Atk_Pw) * (APk_A / DPk_D) * (1.0/25.0)

Atk_Pw = Power Wert der Attacke, die Ausgewählt wurde
APk_A = Attack Wert des angreifenden Pokémon
DPk_D = Defense Wert des verteidigenden Pokémon

Das Pokémon mit dem größeren Speed Wert greift zuerst an. Verliert das angegriffene Pokémon bevor es angegriffen hat, wird der Angriff übersprungen. Wenn die HP eines Pokémon auf 0 fallen, verliert der jeweilige Spieler

OPTIONAL Effektivität

Erweitere die Schadensberechnung und berücksichtige die Typen des Angriffs und des verteidigenden Pokémon.

Schaden = (Atk_Pw) * (APk_A / DPk_D) * (Lvl / 50) * Rnd * STAB * Eff1 * Eff2

Eff1 = Effektivität des Angriffs gegen Typ1 des verteidigenden Pokémon
Eff2 = Effektivität des Angriffs gegen Typ2 des verteidigenden Pokémon

Nutze die Effectiveness.csv Datei, um die Koeffizienten zu ermitteln.