diff --git a/.gamification.json b/.gamification.json index b7035af..1db9ac9 100644 --- a/.gamification.json +++ b/.gamification.json @@ -10,5 +10,5 @@ "streak_tage": 1, "letzter_aktiver_tag": "2026-08-29", "historie": [], - "zuletzt_aktualisiert": "2026-08-29T14:53:37.686061" + "zuletzt_aktualisiert": "2026-08-29T15:07:09.451191" } \ No newline at end of file diff --git a/README.md b/README.md index 69523ba..9e34636 100644 --- a/README.md +++ b/README.md @@ -35,47 +35,47 @@ Das Lernportal besitzt ein wissenschaftlich fundiertes Gamification-System (Self ### 🛣️ Lehrpfad 1: Grundlagen der Programmierung (Prozedural & Datenstrukturen) | Modul | Titel | Themenschwerpunkte | | :--- | :--- | :--- | -| **[G01. Taschenrechner](./g01_erste_schritte_taschenrechner/)** | **Python als Rechner** | Zahlenarten (`int`, `float`), Grundrechenarten, `//`, `%`, `**`, Rangfolge & `print()` | -| **[G02. Variablen & Typen](./g02_variablen_und_datentypen/)** | **Datentypen** | Speicherboxen, `int`, `float`, `str`, `bool`, Type Casting & Type Hints | -| **[G03. Ein- & Ausgabe](./g03_ein_und_ausgabe/)** | **Interaktion** | Tastatureingaben mit `input()`, f-Strings mit Formatierungs-Codes (`{preis:.2f} €`) | -| **[G04. Bedingungen](./g04_verzweigungen_und_bedingungen/)** | **Entscheidungen** | `if`, `elif`, `else`, Vergleichsoperatoren & Logik (`and`, `or`, `not`) | -| **[G05. Schleifen](./g05_schleifen_und_wiederholungen/)** | **Wiederholungen** | Zählschleifen mit `for in range()`, Bedingungsschleifen mit `while`, `break`/`continue` | -| **[G06. Funktionen](./g06_funktionen_und_module/)** | **Modularität** | `def`, `return`, Parameter, Scope & Module (`math`, `random`) | -| **[G07. Listen & Sequenzen](./g07_listen_und_sequenzen/)** | **Datenstrukturen 1** | Listen erstellen, Indexing, Slicing `[1:4]`, Methoden (`append`, `pop`) & `sum/min/max` | -| **[G08. Textverarbeitung](./g08_textverarbeitung_und_strings/)** | **String-Methoden** | Unveränderlichkeit, `.strip()`, `.replace()`, `.split()`, `", ".join()` & Textanalyse | -| **[G09. Dictionaries & Sets](./g09_dictionaries_und_sets/)** | **Datenstrukturen 2** | Key-Value Paare (`{key: val}`), sicheres `.get()`, Mengen (`set`) ohne Duplikate | -| **[G10. Comprehensions & Datum](./g10_comprehensions_datum_algorithmen/)** | **Vertiefung** | List Comprehensions `[x for x in ...]`, `datetime` & Such-/Sortier-Algorithmen | +| **[G01. Taschenrechner](./lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner/)** | **Python als Rechner** | Zahlenarten (`int`, `float`), Grundrechenarten, `//`, `%`, `**`, Rangfolge & `print()` | +| **[G02. Variablen & Typen](./lehrpfad_1_grundlagen/02_variablen_und_datentypen/)** | **Datentypen** | Speicherboxen, `int`, `float`, `str`, `bool`, Type Casting & Type Hints | +| **[G03. Ein- & Ausgabe](./lehrpfad_1_grundlagen/03_ein_und_ausgabe/)** | **Interaktion** | Tastatureingaben mit `input()`, f-Strings mit Formatierungs-Codes (`{preis:.2f} €`) | +| **[G04. Bedingungen](./lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen/)** | **Entscheidungen** | `if`, `elif`, `else`, Vergleichsoperatoren & Logik (`and`, `or`, `not`) | +| **[G05. Schleifen](./lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen/)** | **Wiederholungen** | Zählschleifen mit `for in range()`, Bedingungsschleifen mit `while`, `break`/`continue` | +| **[G06. Funktionen](./lehrpfad_1_grundlagen/06_funktionen_und_module/)** | **Modularität** | `def`, `return`, Parameter, Scope & Module (`math`, `random`) | +| **[G07. Listen & Sequenzen](./lehrpfad_1_grundlagen/07_listen_und_sequenzen/)** | **Datenstrukturen 1** | Listen erstellen, Indexing, Slicing `[1:4]`, Methoden (`append`, `pop`) & `sum/min/max` | +| **[G08. Textverarbeitung](./lehrpfad_1_grundlagen/08_textverarbeitung_und_strings/)** | **String-Methoden** | Unveränderlichkeit, `.strip()`, `.replace()`, `.split()`, `", ".join()` & Textanalyse | +| **[G09. Dictionaries & Sets](./lehrpfad_1_grundlagen/09_dictionaries_und_sets/)** | **Datenstrukturen 2** | Key-Value Paare (`{key: val}`), sicheres `.get()`, Mengen (`set`) ohne Duplikate | +| **[G10. Comprehensions & Datum](./lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen/)** | **Vertiefung** | List Comprehensions `[x for x in ...]`, `datetime` & Such-/Sortier-Algorithmen | --- ### 🛣️ Lehrpfad 2: Einstieg in die Objektorientierung (OOP) & Entwickler-Tools | Modul | Titel | Themenschwerpunkte | | :--- | :--- | :--- | -| **[00. Fehlersuche](./00_fehlersuche_und_grundlagen/)** | **Warm-up & Debugging** | Tracebacks von unten lesen, `IndentationError`, `SyntaxError`, `TypeError` | -| **[01. Einstieg in Klassen](./01_einstieg_klassen/)** | **Bauplan vs. Objekt** | Klassen definieren, Instanziierung, Punktnotation & Type Hints (`Fahrrad`) | -| **[02. Konstruktor & self](./02_init_und_self/)** | **Initialisierung & UML** | `__init__`, `self`, Startwerte & UML-Klassendiagramme (`Bankkonto`, `Smartphone`) | -| **[03. Methoden & Verhalten](./03_methoden_und_verhalten/)** | **Objekt-Interaktion** | Methoden definieren, Rückgabewerte & Duell zweier Objekte (`Rennauto`) | -| **[04. Schöne Textausgabe](./04_str_und_darstellung/)** | **`__str__` Dunder** | Lesbare `print()`-Ausgabe von Objekten, Kassenzettel (`Warenkorb`) | -| **[04b. VS Code Installation](./04b_umstieg_vscode/)** | **IDE-Setup** | Installation (Win/Mac/Linux), Plugins (Error Lens, Python), Shortcuts | -| **[04c. Git & Versionskontrolle](./04c_git_und_versionskontrolle/)** | **Git-Tooling** | Spielstände (Commits) sichern, VS Code Git-Tab, Terminal & Remote Push | -| **[05. Objekte kombinieren](./05_objekte_kombinieren/)** | **Komposition** | 1:1 und 1:n Beziehungen zwischen Objekten (`Spotify Playlist-Manager`) | -| **[06. Mini-Projekt OOP 1](./06_abschlussprojekt_tamagotchi/)** | **Tamagotchi Game** | Voll spielbares, interaktives Haustierspiel im Terminal | +| **[00. Fehlersuche](./lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen/)** | **Warm-up & Debugging** | Tracebacks von unten lesen, `IndentationError`, `SyntaxError`, `TypeError` | +| **[01. Einstieg in Klassen](./lehrpfad_2_oop_einstieg/01_einstieg_klassen/)** | **Bauplan vs. Objekt** | Klassen definieren, Instanziierung, Punktnotation & Type Hints (`Fahrrad`) | +| **[02. Konstruktor & self](./lehrpfad_2_oop_einstieg/02_init_und_self/)** | **Initialisierung & UML** | `__init__`, `self`, Startwerte & UML-Klassendiagramme (`Bankkonto`, `Smartphone`) | +| **[03. Methoden & Verhalten](./lehrpfad_2_oop_einstieg/03_methoden_und_verhalten/)** | **Objekt-Interaktion** | Methoden definieren, Rückgabewerte & Duell zweier Objekte (`Rennauto`) | +| **[04. Schöne Textausgabe](./lehrpfad_2_oop_einstieg/04_str_und_darstellung/)** | **`__str__` Dunder** | Lesbare `print()`-Ausgabe von Objekten, Kassenzettel (`Warenkorb`) | +| **[04b. VS Code Installation](./lehrpfad_2_oop_einstieg/04b_umstieg_vscode/)** | **IDE-Setup** | Installation (Win/Mac/Linux), Plugins (Error Lens, Python), Shortcuts | +| **[04c. Git & Versionskontrolle](./lehrpfad_2_oop_einstieg/04c_git_und_versionskontrolle/)** | **Git-Tooling** | Spielstände (Commits) sichern, VS Code Git-Tab, Terminal & Remote Push | +| **[05. Objekte kombinieren](./lehrpfad_2_oop_einstieg/05_objekte_kombinieren/)** | **Komposition** | 1:1 und 1:n Beziehungen zwischen Objekten (`Spotify Playlist-Manager`) | +| **[06. Mini-Projekt OOP 1](./lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi/)** | **Tamagotchi Game** | Voll spielbares, interaktives Haustierspiel im Terminal | --- ### 🛣️ Lehrpfad 3: Fortgeschrittenes OOP, Softwarequalität & Desktop-GUIs | Modul | Titel | Themenschwerpunkte | | :--- | :--- | :--- | -| **[07. Referenzen & Speicher](./07_referenzen_und_speicher/)** | **RAM & Zeiger** | Referenzen im RAM, Aliasing (`b = a`), `is` vs. `==` & Familienstammbaum (`Person`) | -| **[08. Operator Overloading](./08_operator_overloading_dunder/)** | **Dunder-Methoden** | Eigene Klassen rechenbar machen mit `__add__`, `__mul__`, `__eq__` (2D-Vektoren) | -| **[09. Eigene Unit Tests & TDD](./09_eigene_unit_tests_schreiben/)** | **Softwarequalität** | Testsuiten schreiben mit `unittest`, `assertEqual`, `assertRaises` & TDD | -| **[10. Vererbung & `super()`](./10_vererbung_und_super/)** | **Inheritance** | Basis- & Kindklassen, DRY-Prinzip, `super().__init__()` & Fahrzeugflotte | -| **[11. Polymorphie & Interfaces](./11_polymorphie_und_interfaces/)** | **Polymorphism** | Duck Typing, abstrakte Basisklassen (`ABC`) & Geometrie-Engine | -| **[12. Exceptions & Fehler](./12_exceptions_und_fehlerbehandlung/)** | **Robustes Coding** | `try-except-else-finally`, `raise`, eigene Exception-Klassen im Banking | -| **[13. Datei-Persistenz](./13_persistenz_json_und_csv/)** | **JSON & CSV** | Dauerhaftes Speichern & Laden: Savegames & Tabellen-Export | -| **[14. Desktop-GUIs mit Tkinter](./14_gui_mit_tkinter/)** | **Tkinter Desktop-Apps** | Echte Fenster, Buttons, Labels, Grid-Layout & MVC-Architektur | -| **[15. Parameter & Container](./15_parameter_und_container/)** | **Dunder-Container** | Variable Argumente (`*args`, `**kwargs`), Unpacking & Container (`len`, `[]`, `in`, `iter`) | -| **[16. Master-Abschlussprojekt](./16_master_abschlussprojekt/)** | **🏆 Meisterstück: PetCare** | Vollständige Desktop-App: MVC, Vererbung, Polymorphie, JSON-Savegames & Tkinter GUI | +| **[07. Referenzen & Speicher](./lehrpfad_3_fortgeschrittenes_oop/07_referenzen_und_speicher/)** | **RAM & Zeiger** | Referenzen im RAM, Aliasing (`b = a`), `is` vs. `==` & Familienstammbaum (`Person`) | +| **[08. Operator Overloading](./lehrpfad_3_fortgeschrittenes_oop/08_operator_overloading_dunder/)** | **Dunder-Methoden** | Eigene Klassen rechenbar machen mit `__add__`, `__mul__`, `__eq__` (2D-Vektoren) | +| **[09. Eigene Unit Tests & TDD](./lehrpfad_3_fortgeschrittenes_oop/09_eigene_unit_tests_schreiben/)** | **Softwarequalität** | Testsuiten schreiben mit `unittest`, `assertEqual`, `assertRaises` & TDD | +| **[10. Vererbung & `super()`](./lehrpfad_3_fortgeschrittenes_oop/10_vererbung_und_super/)** | **Inheritance** | Basis- & Kindklassen, DRY-Prinzip, `super().__init__()` & Fahrzeugflotte | +| **[11. Polymorphie & Interfaces](./lehrpfad_3_fortgeschrittenes_oop/11_polymorphie_und_interfaces/)** | **Polymorphism** | Duck Typing, abstrakte Basisklassen (`ABC`) & Geometrie-Engine | +| **[12. Exceptions & Fehler](./lehrpfad_3_fortgeschrittenes_oop/12_exceptions_und_fehlerbehandlung/)** | **Robustes Coding** | `try-except-else-finally`, `raise`, eigene Exception-Klassen im Banking | +| **[13. Datei-Persistenz](./lehrpfad_3_fortgeschrittenes_oop/13_persistenz_json_und_csv/)** | **JSON & CSV** | Dauerhaftes Speichern & Laden: Savegames & Tabellen-Export | +| **[14. Desktop-GUIs mit Tkinter](./lehrpfad_3_fortgeschrittenes_oop/14_gui_mit_tkinter/)** | **Tkinter Desktop-Apps** | Echte Fenster, Buttons, Labels, Grid-Layout & MVC-Architektur | +| **[15. Parameter & Container](./lehrpfad_3_fortgeschrittenes_oop/15_parameter_und_container/)** | **Dunder-Container** | Variable Argumente (`*args`, `**kwargs`), Unpacking & Container (`len`, `[]`, `in`, `iter`) | +| **[16. Master-Abschlussprojekt](./lehrpfad_3_fortgeschrittenes_oop/16_master_abschlussprojekt/)** | **🏆 Meisterstück: PetCare** | Vollständige Desktop-App: MVC, Vererbung, Polymorphie, JSON-Savegames & Tkinter GUI | --- diff --git a/assets/gamification_data.js b/assets/gamification_data.js index 819dd2a..fb17f95 100644 --- a/assets/gamification_data.js +++ b/assets/gamification_data.js @@ -11,80 +11,80 @@ window.GAMIFICATION_DATA = { "streak_tage": 1, "letzter_aktiver_tag": "2026-08-29", "historie": [], - "zuletzt_aktualisiert": "2026-08-29T14:53:37.686061" + "zuletzt_aktualisiert": "2026-08-29T15:07:09.451191" }; window.GAMIFICATION_BADGES_KATALOG = { "rechenkonegin": { "id": "rechenkonegin", "icon": "🧮", "name": "Rechenkönigin", - "desc": "Grundlagen G01 & G02 abgeschlossen (Zahlen, Operatoren & Typen gemeistert).", + "desc": "Grundlagen 01 & 02 abgeschlossen (Zahlen, Operatoren & Typen gemeistert).", "xp_bonus": 100, "kriterium": [ - "g01_erste_schritte_taschenrechner", - "g02_variablen_und_datentypen" + "lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner", + "lehrpfad_1_grundlagen/02_variablen_und_datentypen" ] }, "dialog_profi": { "id": "dialog_profi", "icon": "💬", "name": "Dialog-Profi", - "desc": "Grundlagen G03 abgeschlossen (Interaktive Ein-/Ausgabe mit f-Strings).", + "desc": "Grundlagen 03 abgeschlossen (Interaktive Ein-/Ausgabe mit f-Strings).", "xp_bonus": 75, "kriterium": [ - "g03_ein_und_ausgabe" + "lehrpfad_1_grundlagen/03_ein_und_ausgabe" ] }, "weichenstellerin": { "id": "weichenstellerin", "icon": "🚦", "name": "Weichenstellerin", - "desc": "Grundlagen G04 abgeschlossen (Bedingungslogik & Schaltjahre gemeistert).", + "desc": "Grundlagen 04 abgeschlossen (Bedingungslogik & Schaltjahre gemeistert).", "xp_bonus": 75, "kriterium": [ - "g04_verzweigungen_und_bedingungen" + "lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen" ] }, "schleifen_dompteurin": { "id": "schleifen_dompteurin", "icon": "🎡", "name": "Schleifen-Dompteurin", - "desc": "Grundlagen G05 abgeschlossen (While- & For-Schleifen gebändigt).", + "desc": "Grundlagen 05 abgeschlossen (While- & For-Schleifen gebändigt).", "xp_bonus": 100, "kriterium": [ - "g05_schleifen_und_wiederholungen" + "lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen" ] }, "funktions_zauberin": { "id": "funktions_zauberin", "icon": "🪄", "name": "Funktions-Zauberin", - "desc": "Grundlagen G06 abgeschlossen (Eigene Funktionen & Module gebaut).", + "desc": "Grundlagen 06 abgeschlossen (Eigene Funktionen & Module gebaut).", "xp_bonus": 100, "kriterium": [ - "g06_funktionen_und_module" + "lehrpfad_1_grundlagen/06_funktionen_und_module" ] }, "listen_archivarin": { "id": "listen_archivarin", "icon": "📋", "name": "Listen-Archivarin", - "desc": "Grundlagen G07 & G08 abgeschlossen (Sequenzen & Strings analysiert).", + "desc": "Grundlagen 07 & 08 abgeschlossen (Sequenzen & Strings analysiert).", "xp_bonus": 120, "kriterium": [ - "g07_listen_und_sequenzen", - "g08_textverarbeitung_und_strings" + "lehrpfad_1_grundlagen/07_listen_und_sequenzen", + "lehrpfad_1_grundlagen/08_textverarbeitung_und_strings" ] }, "daten_strategin": { "id": "daten_strategin", "icon": "🗃️", "name": "Daten-Strategin", - "desc": "Grundlagen G09 & G10 abgeschlossen (Dicts, Sets & Comprehensions gemeistert).", + "desc": "Grundlagen 09 & 10 abgeschlossen (Dicts, Sets & Comprehensions gemeistert).", "xp_bonus": 150, "kriterium": [ - "g09_dictionaries_und_sets", - "g10_comprehensions_datum_algorithmen" + "lehrpfad_1_grundlagen/09_dictionaries_und_sets", + "lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen" ] }, "bug_jaegerin": { @@ -94,7 +94,7 @@ window.GAMIFICATION_BADGES_KATALOG = { "desc": "Kapitel 00 gelöst (Alle Fehler-Bugs im Warm-up aufgespürt).", "xp_bonus": 100, "kriterium": [ - "00_fehlersuche_und_grundlagen" + "lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen" ] }, "erste_architektin": { @@ -104,9 +104,9 @@ window.GAMIFICATION_BADGES_KATALOG = { "desc": "Kapitel 01 bis 03 gelöst (Erste OOP-Klassen, Konstruktoren & Methoden).", "xp_bonus": 200, "kriterium": [ - "01_einstieg_klassen", - "02_init_und_self", - "03_methoden_und_verhalten" + "lehrpfad_2_oop_einstieg/01_einstieg_klassen", + "lehrpfad_2_oop_einstieg/02_init_und_self", + "lehrpfad_2_oop_einstieg/03_methoden_und_verhalten" ] }, "tamagotchi_mama": { @@ -116,7 +116,7 @@ window.GAMIFICATION_BADGES_KATALOG = { "desc": "Kapitel 06 Mini-Projekt abgeschlossen (Ein lebendiges Haustier gebaut).", "xp_bonus": 250, "kriterium": [ - "06_abschlussprojekt_tamagotchi" + "lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi" ] }, "zeit_reisende": { @@ -126,7 +126,7 @@ window.GAMIFICATION_BADGES_KATALOG = { "desc": "Kapitel 04c Git-Versionskontrolle verstanden & Spielstände gesichert.", "xp_bonus": 100, "kriterium": [ - "04_str_und_darstellung" + "lehrpfad_2_oop_einstieg/04_str_und_darstellung" ] }, "qualitaets_garantin": { @@ -136,7 +136,7 @@ window.GAMIFICATION_BADGES_KATALOG = { "desc": "Kapitel 09 abgeschlossen (Eigene professionelle Unit Tests geschrieben).", "xp_bonus": 200, "kriterium": [ - "09_eigene_unit_tests_schreiben" + "lehrpfad_3_fortgeschrittenes_oop/09_eigene_unit_tests_schreiben" ] }, "oop_grossmeisterin": { @@ -146,9 +146,9 @@ window.GAMIFICATION_BADGES_KATALOG = { "desc": "Kapitel 10 bis 12 abgeschlossen (Vererbung, Polymorphie & Exceptions).", "xp_bonus": 300, "kriterium": [ - "10_vererbung_und_super", - "11_polymorphie_und_interfaces", - "12_exceptions_und_fehlerbehandlung" + "lehrpfad_3_fortgeschrittenes_oop/10_vererbung_und_super", + "lehrpfad_3_fortgeschrittenes_oop/11_polymorphie_und_interfaces", + "lehrpfad_3_fortgeschrittenes_oop/12_exceptions_und_fehlerbehandlung" ] }, "software_architektin": { @@ -158,7 +158,7 @@ window.GAMIFICATION_BADGES_KATALOG = { "desc": "Kapitel 16 Master-Projekt abgeschlossen & vollwertige Desktop-App gebaut!", "xp_bonus": 500, "kriterium": [ - "16_master_abschlussprojekt" + "lehrpfad_3_fortgeschrittenes_oop/16_master_abschlussprojekt" ] } }; diff --git a/gamification.py b/gamification.py index 637be44..a39002a 100644 --- a/gamification.py +++ b/gamification.py @@ -35,63 +35,72 @@ LEVEL_STUFEN = [ {"level": 10, "min_xp": 6801, "max_xp": 99999, "titel": "Software-Architektin 🏆", "rang": "Großmeisterin"}, ] -# 14 freischaltbare Trophäen mit didaktischen Kriterien +# 14 freischaltbare Trophäen mit didaktischen Kriterien (abgestimmt auf neue Lehrpfad-Pfade) BADGES_KATALOG = { "rechenkonegin": { "id": "rechenkonegin", "icon": "🧮", "name": "Rechenkönigin", - "desc": "Grundlagen G01 & G02 abgeschlossen (Zahlen, Operatoren & Typen gemeistert).", + "desc": "Grundlagen 01 & 02 abgeschlossen (Zahlen, Operatoren & Typen gemeistert).", "xp_bonus": 100, - "kriterium": ["g01_erste_schritte_taschenrechner", "g02_variablen_und_datentypen"] + "kriterium": [ + "lehrpfad_1_grundlagen/01_erste_schritte_taschenrechner", + "lehrpfad_1_grundlagen/02_variablen_und_datentypen" + ] }, "dialog_profi": { "id": "dialog_profi", "icon": "💬", "name": "Dialog-Profi", - "desc": "Grundlagen G03 abgeschlossen (Interaktive Ein-/Ausgabe mit f-Strings).", + "desc": "Grundlagen 03 abgeschlossen (Interaktive Ein-/Ausgabe mit f-Strings).", "xp_bonus": 75, - "kriterium": ["g03_ein_und_ausgabe"] + "kriterium": ["lehrpfad_1_grundlagen/03_ein_und_ausgabe"] }, "weichenstellerin": { "id": "weichenstellerin", "icon": "🚦", "name": "Weichenstellerin", - "desc": "Grundlagen G04 abgeschlossen (Bedingungslogik & Schaltjahre gemeistert).", + "desc": "Grundlagen 04 abgeschlossen (Bedingungslogik & Schaltjahre gemeistert).", "xp_bonus": 75, - "kriterium": ["g04_verzweigungen_und_bedingungen"] + "kriterium": ["lehrpfad_1_grundlagen/04_verzweigungen_und_bedingungen"] }, "schleifen_dompteurin": { "id": "schleifen_dompteurin", "icon": "🎡", "name": "Schleifen-Dompteurin", - "desc": "Grundlagen G05 abgeschlossen (While- & For-Schleifen gebändigt).", + "desc": "Grundlagen 05 abgeschlossen (While- & For-Schleifen gebändigt).", "xp_bonus": 100, - "kriterium": ["g05_schleifen_und_wiederholungen"] + "kriterium": ["lehrpfad_1_grundlagen/05_schleifen_und_wiederholungen"] }, "funktions_zauberin": { "id": "funktions_zauberin", "icon": "🪄", "name": "Funktions-Zauberin", - "desc": "Grundlagen G06 abgeschlossen (Eigene Funktionen & Module gebaut).", + "desc": "Grundlagen 06 abgeschlossen (Eigene Funktionen & Module gebaut).", "xp_bonus": 100, - "kriterium": ["g06_funktionen_und_module"] + "kriterium": ["lehrpfad_1_grundlagen/06_funktionen_und_module"] }, "listen_archivarin": { "id": "listen_archivarin", "icon": "📋", "name": "Listen-Archivarin", - "desc": "Grundlagen G07 & G08 abgeschlossen (Sequenzen & Strings analysiert).", + "desc": "Grundlagen 07 & 08 abgeschlossen (Sequenzen & Strings analysiert).", "xp_bonus": 120, - "kriterium": ["g07_listen_und_sequenzen", "g08_textverarbeitung_und_strings"] + "kriterium": [ + "lehrpfad_1_grundlagen/07_listen_und_sequenzen", + "lehrpfad_1_grundlagen/08_textverarbeitung_und_strings" + ] }, "daten_strategin": { "id": "daten_strategin", "icon": "🗃️", "name": "Daten-Strategin", - "desc": "Grundlagen G09 & G10 abgeschlossen (Dicts, Sets & Comprehensions gemeistert).", + "desc": "Grundlagen 09 & 10 abgeschlossen (Dicts, Sets & Comprehensions gemeistert).", "xp_bonus": 150, - "kriterium": ["g09_dictionaries_und_sets", "g10_comprehensions_datum_algorithmen"] + "kriterium": [ + "lehrpfad_1_grundlagen/09_dictionaries_und_sets", + "lehrpfad_1_grundlagen/10_comprehensions_datum_algorithmen" + ] }, "bug_jaegerin": { "id": "bug_jaegerin", @@ -99,7 +108,7 @@ BADGES_KATALOG = { "name": "Bug-Jägerin", "desc": "Kapitel 00 gelöst (Alle Fehler-Bugs im Warm-up aufgespürt).", "xp_bonus": 100, - "kriterium": ["00_fehlersuche_und_grundlagen"] + "kriterium": ["lehrpfad_2_oop_einstieg/00_fehlersuche_und_grundlagen"] }, "erste_architektin": { "id": "erste_architektin", @@ -107,7 +116,11 @@ BADGES_KATALOG = { "name": "Erste Architektin", "desc": "Kapitel 01 bis 03 gelöst (Erste OOP-Klassen, Konstruktoren & Methoden).", "xp_bonus": 200, - "kriterium": ["01_einstieg_klassen", "02_init_und_self", "03_methoden_und_verhalten"] + "kriterium": [ + "lehrpfad_2_oop_einstieg/01_einstieg_klassen", + "lehrpfad_2_oop_einstieg/02_init_und_self", + "lehrpfad_2_oop_einstieg/03_methoden_und_verhalten" + ] }, "tamagotchi_mama": { "id": "tamagotchi_mama", @@ -115,7 +128,7 @@ BADGES_KATALOG = { "name": "Tamagotchi-Mama", "desc": "Kapitel 06 Mini-Projekt abgeschlossen (Ein lebendiges Haustier gebaut).", "xp_bonus": 250, - "kriterium": ["06_abschlussprojekt_tamagotchi"] + "kriterium": ["lehrpfad_2_oop_einstieg/06_abschlussprojekt_tamagotchi"] }, "zeit_reisende": { "id": "zeit_reisende", @@ -123,7 +136,7 @@ BADGES_KATALOG = { "name": "Git-Zeitreisende", "desc": "Kapitel 04c Git-Versionskontrolle verstanden & Spielstände gesichert.", "xp_bonus": 100, - "kriterium": ["04_str_und_darstellung"] + "kriterium": ["lehrpfad_2_oop_einstieg/04_str_und_darstellung"] }, "qualitaets_garantin": { "id": "qualitaets_garantin", @@ -131,7 +144,7 @@ BADGES_KATALOG = { "name": "TDD-Qualitätsgarantin", "desc": "Kapitel 09 abgeschlossen (Eigene professionelle Unit Tests geschrieben).", "xp_bonus": 200, - "kriterium": ["09_eigene_unit_tests_schreiben"] + "kriterium": ["lehrpfad_3_fortgeschrittenes_oop/09_eigene_unit_tests_schreiben"] }, "oop_grossmeisterin": { "id": "oop_grossmeisterin", @@ -139,7 +152,11 @@ BADGES_KATALOG = { "name": "Vererbungs-Koryphäe", "desc": "Kapitel 10 bis 12 abgeschlossen (Vererbung, Polymorphie & Exceptions).", "xp_bonus": 300, - "kriterium": ["10_vererbung_und_super", "11_polymorphie_und_interfaces", "12_exceptions_und_fehlerbehandlung"] + "kriterium": [ + "lehrpfad_3_fortgeschrittenes_oop/10_vererbung_und_super", + "lehrpfad_3_fortgeschrittenes_oop/11_polymorphie_und_interfaces", + "lehrpfad_3_fortgeschrittenes_oop/12_exceptions_und_fehlerbehandlung" + ] }, "software_architektin": { "id": "software_architektin", @@ -147,7 +164,7 @@ BADGES_KATALOG = { "name": "Meister-Entwicklerin", "desc": "Kapitel 16 Master-Projekt abgeschlossen & vollwertige Desktop-App gebaut!", "xp_bonus": 500, - "kriterium": ["16_master_abschlussprojekt"] + "kriterium": ["lehrpfad_3_fortgeschrittenes_oop/16_master_abschlussprojekt"] } } @@ -259,7 +276,6 @@ window.GAMIFICATION_LEVEL_STUFEN = {json.dumps(LEVEL_STUFEN, indent=2, ensure_as neu_freigeschaltet_badges = [] for badge_id, badge in BADGES_KATALOG.items(): kriterien = badge["kriterium"] - # Alle Kriterien-Ordner müssen gelöst sein if all(k in neue_geloeste for k in kriterien): if badge_id not in alte_badges: neu_freigeschaltet_badges.append(badge) @@ -308,7 +324,7 @@ window.GAMIFICATION_LEVEL_STUFEN = {json.dumps(LEVEL_STUFEN, indent=2, ensure_as } -def report_single_chapter_result(kapitel_ordner: str, tests_erfolgreich: bool, tests_anzahl: int): +def report_single_chapter_result(kapitel_pfad_relativ: str, tests_erfolgreich: bool, tests_anzahl: int): """ Wird von einzelnen test_aufgabe.py Skripten aufgerufen, wenn sie direkt ausgeführt werden. Aktualisiert den Spielstand und gibt motivierendes Feedback im Terminal aus. @@ -317,8 +333,8 @@ def report_single_chapter_result(kapitel_ordner: str, tests_erfolgreich: bool, t aktuelle_geloeste = set(gm.state.get("geloeste_kapitel", [])) if tests_erfolgreich and tests_anzahl > 0: - war_bereits_geloest = kapitel_ordner in aktuelle_geloeste - aktuelle_geloeste.add(kapitel_ordner) + war_bereits_geloest = kapitel_pfad_relativ in aktuelle_geloeste + aktuelle_geloeste.add(kapitel_pfad_relativ) # Gesamtbestandene Tests schätzen/updaten alte_tests = gm.state.get("bestandene_tests", 0) diff --git a/index.html b/index.html index f10721b..a0d3f29 100644 --- a/index.html +++ b/index.html @@ -97,7 +97,7 @@