From b9ee61b82d37e8c531f75ac70e651fa40d92b4f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Runden?= Date: Mon, 6 Apr 2026 19:11:35 +0200 Subject: [PATCH] read the .env --- .gitignore | 1 + AI-Prompt.md | 49 +++++++++++++++++++++++++++++++++++++------------ README.md | 2 +- env.example | 16 ++++++++++++++++ src/main.py | 28 +++++++++++++++++++++++++--- 5 files changed, 80 insertions(+), 16 deletions(-) create mode 100644 env.example diff --git a/.gitignore b/.gitignore index 2b07ae3..7edec7b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .continue/ +.env \ No newline at end of file diff --git a/AI-Prompt.md b/AI-Prompt.md index f207bdb..21b84bf 100644 --- a/AI-Prompt.md +++ b/AI-Prompt.md @@ -1,18 +1,37 @@ -Ich möchte eine Python-Anwendung für das CLI entwickeln, in dem Battleship, also Schiffe versenken, realisiert wird. Die Konfiguration soll in einer .env-Datei entstehen und so etwas wie Zeichen für Wasser, sprich Ozean, Zeichen für Schiff und Zeichen für Fehl. Auch soll im CLI Farbkodierung verwendet werden, zum Beispiel blau-dunkel für den Ozean. Schiff soll ein helles Grau und ein Center-dot im dunklen Grau. +Ich möchte eine Python-Anwendung für das CLI entwickeln, in dem Battleship, also Schiffe versenken, realisiert wird. Die Konfiguration soll in einer .env-Datei entstehen und so etwas wie Zeichen für Wasser, sprich Ozean, Zeichen für Schiff und Zeichen für Fehl. Auch soll im CLI Farbkodierung verwendet werden, zum Beispiel '~' blau-dunkel für den Ozean. Schiff soll ein helles Grau und ein Center-dot im dunklen Grau. -Auch sollen die Dimensionen des Spielfeldes vergeben werden und ein Rahmen ist ja der eigene und ein Spielfeldrahmen ist der Gegnerrahmen, der zu Beginn komplett unveröffentlicht ist. Und es soll vielleicht noch kleine grüne Landinseln, mit char = zum Beispiel als großes, hellgrünes M. +Auch sollen die Dimensionen des Spielfeldes vergeben werden und ein Rahmen ist ja der eigene , und ein Spielfeldrahmen ist der Gegnerrahmen, der zu Beginn komplett unveröffentlicht ist. Und es soll vielleicht noch kleine grüne Landinseln, mit char = zum Beispiel als großes, hellgrünes M. + +Beispiel .env: + +OCEAN_WIDTH=10 +OCEAN_HEIGHT=10 +COLOR_WATER=\033[34m +COLOR_SHIP=\033[37m +COLOR_MISS=\033[90m +CHAR_SHIP=O +CHAR_WATER=~ +CHAR_MISS=· +ISLAND_CHAR=M +ISLAND_COLOR=\033[32m +FRAME_COLOR_SELF=\033[92m +FRAME_COLOR_ENEMY=\033[31m +SOUND_MISS=blupp.wav +SOUND_HIT=explosion.wav +MQTT_TOPIC=sink_my_ships + +wir implementieren mit rich + input() +Es muss eine Hilfeseite (Legende) geben. darin dann die kurzen kommandos. Beide spielfelder müssen dargestellt werden können. +Und aus einer Legende muss ersichtlich sein, welches der Schiffe bereits positioniert ist während der Setzphase +oder welche Gegnerschiffe bereits abgeschossen wurden in der Spielphase. -wir implementieren mit rich + input()Das muss eine Hilfeseite geben. darin dann die kurzen kommandosbeide spielfelder müssen dargestellt werden könnenUnd aus einer Legende muss ersichtlich sein, welches der Schiffe bereits positioniert ist während der Setzphase oder welche Gegnerschiffe bereits abgeschossen wurden in der Spielphase. +insel: dunkel-grünes ‘M’, Schiff hellgraues ‘O’, treffer: Rotes ‘X’, miss dunkelgraues ‘·’ (aber nicht “Punkt” sondern center-dot) Ocean: dunkelblaue ‘~’Spielfeldrahmen: hell grüne ‘*’ für eigenens Spielfeld, dunkelrote ‘*’ f gegner spielfeld.sowohl das char als auch der styleund auch alles andere: Dimension der felder, schiff-shapes und auch die IPadresse des zu verbindenden gegners sind bitte in einer .env zu pflegen. -insel: dunkel-grünes ‘M’, Schiff hellgraues ‘O’, treffer: Rotes ‘X’, miss dunkelgraues ‘.’ (aber nicht “Punkt” sondern center-dot) Ocean: dunkelblaue ‘~’Spielfeldrahmen: hell grüne ‘’ für eigenens Spielfeld, dunkelrote ‘’ f gegner spielfeld.sowohl das char als auch der styleund auch alles andere: Dimension der felder, schiff-shapes und auch die IPadresse des zu verbindenden gegners sind bitte in einer .env zu pflegen. - - - -und nun zum größten Teril dieser Herausforderung: +und nun zum größten Teil dieser Herausforderung: @@ -20,13 +39,19 @@ Wir machen iterative Entwicklung: wir kümmern uns Stück für Stück um Teilprobleme, -das wir Anfänger in python sind und du als ein Coach +da wir Anfänger in python sind und du als ein Coach Konzepte wie Formatted Strings. Listen und Iteratoren Text-Output in Farbe durch das Rich-Framework. Shape-Modellierung von Schiffen. Auslagerung der kompletten Konfiguration in eine .env-Datei. Verbindung zweier Instanzen über IPv4-Stack. Und zur Usability-Verbesserung vielleicht das prompt:toolkit. +im "Krieg"-Modus: Wenn ein Miss = Sound ausgabe von Blupp.wav, wenn ein Hit = Sound ausgabe von explosion.wav +Ich erwäge einen MQTT-Server zu nutzen oder eventuell einen Web-Server, aber es muss etwas sein, auf dem man sich treffen und schreiben zugreifen kann. Ich möchte ja einen Zug oder eine Bewegung eines Schiffes oder auch den initialen Ozean und die Position der Inseln mitteilen können. + +Fest steht: ein mqtt server muss eingesetzt werden, Das "Topic" sollte konfigurierbar sein. +(= .env file) +transfer (.json) initialer Ocean, +schiffe, +Züge, +Textchat :-) -#-------------------------------- -Um zwei Computer in einem Netzwerk zu verbinden, in ein nicht von mir gemanagtes WLAN, Könnten wir mittels ENV-Datei die IP-Adresse des Gegenüber oder nur beim Initiator die IP-Adresse des Gegenüber eintragen und uns eine Socket-Verbindung holen. -Ich kann leider nicht vorhersagen, ob der WLAN-Controller zulässt, dass sich WLAN-Clients miteinander unterhalten dürfen. Ich erwäge einen MQTT-Server zu nutzen oder eventuell einen Web-Server, aber es muss etwas sein, auf dem man sich treffen und schreiben zugreifen kann. Ich möchte ja einen Zug oder eine Bewegung eines Schiffes oder auch den initialen Ozean und die Position der Inseln mitteilen können. Was gibt es noch für Server, um zum Beispiel im JSON-Format Informationen oder Konfigurationen auszutauschen? \ No newline at end of file diff --git a/README.md b/README.md index 9b7fc64..f6aa86e 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Schiffe versenken im TUI ## Still todo: --[ ] .env datei interpretieren +-[x] .env datei interpretieren -[ ] network stack aufbauen -[ ] ship shapes -[ ] ship shapes diff --git a/env.example b/env.example new file mode 100644 index 0000000..18facc2 --- /dev/null +++ b/env.example @@ -0,0 +1,16 @@ +OCEAN_WIDTH=10 +OCEAN_HEIGHT=10 +COLOR_WATER=\033[34m +COLOR_SHIP=\033[37m +COLOR_MISS=\033[90m +CHAR_SHIP=O +CHAR_WATER=~ +CHAR_MISS=· +ISLAND_CHAR=M +ISLAND_COLOR=\033[32m +FRAME_COLOR_SELF=\033[92m +FRAME_COLOR_ENEMY=\033[31m +SOUND_MISS=blupp.wav +SOUND_HIT=explosion.wav +MQTT_TOPIC=sink_my_ships +MQTT_URL=mqtt://mqtt.chmln.de:1883 \ No newline at end of file diff --git a/src/main.py b/src/main.py index 0d66873..ab71649 100644 --- a/src/main.py +++ b/src/main.py @@ -1,3 +1,25 @@ -for i in range(1, 27): - ascii_value = i + 64 - print(f"{chr(ascii_value)} ({ascii_value:02d})") +#!/usr/bin/env python3 +import os +import dotenv + +# Load environment variables from .env file +dotenv.load_dotenv() + +# Access environment variables using os.getenv +OCEAN_WIDTH = int(os.getenv("OCEAN_WIDTH")) +OCEAN_HEIGHT = int(os.getenv("OCEAN_HEIGHT")) +COLOR_WATER = os.getenv("COLOR_WATER") +COLOR_SHIP = os.getenv("COLOR_SHIP") +COLOR_MISS = os.getenv("COLOR_MISS") +CHAR_SHIP = os.getenv("CHAR_SHIP") +CHAR_WATER = os.getenv("CHAR_WATER") +CHAR_MISS = os.getenv("CHAR_MISS") +ISLAND_CHAR = os.getenv("ISLAND_CHAR") +ISLAND_COLOR = os.getenv("ISLAND_COLOR") +FRAME_COLOR_SELF = os.getenv("FRAME_COLOR_SELF") +FRAME_COLOR_ENEMY = os.getenv("FRAME_COLOR_ENEMY") +SOUND_MISS = os.getenv("SOUND_MISS") +SOUND_HIT = os.getenv("SOUND_HIT") +MQTT_TOPIC = os.getenv("MQTT_TOPIC") + +# Rest of your code...