# EasySpeak v1 - Die ultra-einfache Programmiersprache

![Version](https://img.shields.io/badge/version-1.0-blue)
![Python](https://img.shields.io/badge/python-3.7+-green)
![License](https://img.shields.io/badge/license-MIT-yellow)

EasySpeak ist eine deutschsprachige Programmiersprache mit grafischer Benutzeroberfläche, die speziell für Anfänger entwickelt wurde. Mit deutscher Syntax und intuitiven Befehlen macht Programmieren endlich Spaß!

## 🎯 Features

- ✅ **Deutsche Syntax** - Keine englischen Befehle mehr!
- ✅ **GUI mit Tkinter** - Code schreiben und sofort ausführen
- ✅ **Sichere Ausführung** - AST-basierte Auswertung (kein eval!)
- ✅ **Listen-Operationen** - Vollständige Listen-Unterstützung
- ✅ **Bedingte Anweisungen** - wenn-dann-sonst
- ✅ **Schleifen** - wiederhole, für-jedes, solange
- ✅ **Benutzereingaben** - frage nach Text und Zahlen
- ✅ **Mehrfach-Fenster** - `fenster` und `log` Befehle für separate Ausgaben
- ✅ **Module laden** - `start` für externe .easy Dateien

## 📦 Installation

### Voraussetzungen
- Python 3.7 oder höher
- Tkinter (normalerweise mit Python vorinstalliert)

### Download & Start
1. Lade `easyspeak_v3_1.py` herunter
2. Starte mit Doppelklick oder:
   ```bash
   python easyspeak_v3_1.py
   ```
3. Fertig! 🎉

## 🚀 Schnellstart

### Erstes Programm

```easyspeak
sag "Hallo Welt!"
zahl 42
```

### Mit Variablen

```easyspeak
var name "Max"
var alter 25

sag "Hallo"
sag name
sag "Du bist"
zahl alter
sag "Jahre alt"
```

### Mit Eingabe

```easyspeak
frage name "Wie heißt du?"
sag name

frage zahl alter "Wie alt bist du?"
zahl alter
```

## 📚 Befehlsübersicht

### Basis-Befehle

#### `sag` - Text ausgeben
```easyspeak
sag "Hallo Welt"           # Text
sag katze                  # Variable oder Wort
```

#### `zahl` - Zahlen ausgeben
```easyspeak
zahl 42                    # Direkt
zahl alter                 # Variable
```

#### `var` - Variablen erstellen
```easyspeak
var name "Anna"            # String
var alter 25               # Zahl
var summe a + b            # Berechnung
var kopie original         # Variable kopieren
```

#### `rechne` - Mathematik
```easyspeak
rechne 5 + 3               # Ausgabe: 8
rechne 10 * 2              # Ausgabe: 20
rechne (5 + 3) * 2         # Ausgabe: 16
```

**Operatoren:** `+` `-` `*` `/` `%` `()` `<` `>` `<=` `>=` `==` `!=`

### Kontrollstrukturen

#### `wenn` - Bedingungen
```easyspeak
wenn x > 5 dann sag "groß"
wenn x > 5 dann sag "groß" sonst sag "klein"
wenn alter >= 18 dann sag "Volljährig" sonst sag "Minderjährig"
```

#### `wiederhole` - Schleifen
```easyspeak
# N-mal wiederholen
wiederhole 5 mal sag "Hi"
wiederhole 3 mal zahl 42

# Mit Berechnung
wiederhole x + 2 mal sag "Loop"

# Solange-Schleife
var i 0
wiederhole solange i < 5 mal var i i + 1
```

### Listen

#### `liste` - Listen erstellen
```easyspeak
liste zahlen 1 2 3 4 5
liste namen "Anna" "Bob" "Carl"
```

#### `zeige` - Listen anzeigen
```easyspeak
zeige zahlen                # Ausgabe: [1, 2, 3, 4, 5]
```

#### `für jedes` - Über Listen iterieren
```easyspeak
liste zahlen 1 2 3 4 5

für jedes x in zahlen mal sag x
für jedes x in zahlen mal rechne x * 2

# Summe berechnen
var summe 0
für jedes x in zahlen mal var summe summe + x
zahl summe
```

### Listen-Operationen

#### `füge` - Element hinzufügen
```easyspeak
liste zahlen 1 2 3
füge zahlen 4              # zahlen = [1, 2, 3, 4]
```

#### `entferne` - Element entfernen
```easyspeak
liste zahlen 1 2 3 2
entferne zahlen 2          # zahlen = [1, 3, 2]
```

#### `lösche` - Element an Index löschen
```easyspeak
liste zahlen 1 2 3
lösche zahlen 1            # zahlen = [1, 3]
```

#### `setze` - Element an Index ändern
```easyspeak
liste zahlen 1 2 3
setze zahlen 1 99          # zahlen = [1, 99, 3]
```

#### `hole` - Element an Index holen
```easyspeak
liste zahlen 10 20 30
hole zahlen 1 in x         # x = 20
```

#### `leere` - Liste leeren
```easyspeak
liste zahlen 1 2 3
leere zahlen               # zahlen = []
```

### Benutzereingaben

#### `frage` - String-Eingabe
```easyspeak
frage name "Wie heißt du?"
sag name
```

#### `frage zahl` - Zahlen-Eingabe
```easyspeak
frage zahl alter "Dein Alter?"
zahl alter
```

### Datei-Operationen

#### `start` - Andere Programme ausführen
```easyspeak
start anderes_programm.easy
start listen               # .easy wird automatisch hinzugefügt
```

#### `dateien` - Verfügbare Dateien anzeigen
```easyspeak
dateien                    # Zeigt alle .easy Dateien im Ordner
```

### 🆕 Output-Steuerung

#### `fenster` - Neues Ausgabe-Fenster
```easyspeak
sag "Im Log"
fenster
sag "Im separaten Fenster!"
```

#### `log` - Zurück zum Log
```easyspeak
fenster
sag "Im Fenster"
log
sag "Wieder im Log"
```

### Erweiterte Features

#### Mehrere Befehle pro Zeile (mit `;`)
```easyspeak
var x 5; var y 10; rechne x + y
sag "Hallo"; zahl 42; sag "Welt"
```

#### Logische Operatoren
```easyspeak
# und, oder, nicht
wenn x > 5 und x < 10 dann sag "Zwischen 5 und 10"
wenn x == 1 oder x == 2 dann sag "1 oder 2"
wenn nicht x > 5 dann sag "Nicht größer als 5"
```

#### Eingebaute Funktionen
```easyspeak
liste zahlen 1 2 3 4 5

rechne laenge(zahlen)      # Ausgabe: 5
rechne summe(zahlen)       # Ausgabe: 15
rechne min(zahlen)         # Ausgabe: 1
rechne max(zahlen)         # Ausgabe: 5
rechne runde(3.7)          # Ausgabe: 4
rechne runde(3.141, 2)     # Ausgabe: 3.14
```

## 💡 Beispiele

### Beispiel 1: Interaktives Programm
```easyspeak
sag "=== Quiz ==="
frage name "Dein Name?"
frage zahl alter "Dein Alter?"

sag "Hallo"
sag name

wenn alter >= 18 dann sag "Du darfst wählen!" sonst sag "Noch zu jung"
```

### Beispiel 2: Liste verarbeiten
```easyspeak
liste noten 1 2 2 3 1

sag "Deine Noten:"
zeige noten

var summe 0
für jedes note in noten mal var summe summe + note

var anzahl laenge(noten)
rechne summe / anzahl
```

### Beispiel 3: Countdown
```easyspeak
var x 10

sag "Countdown:"
wiederhole solange x > 0 mal var x x - 1
wiederhole solange x >= 0 mal sag x

sag "Start!"
```

### Beispiel 4: Mit Fenster-Output
```easyspeak
sag "=== Hauptprogramm ==="
sag "Starte Ausgabe im separaten Fenster..."

fenster

sag "=== Separate Ausgabe ==="
liste zahlen 1 2 3 4 5

für jedes x in zahlen mal sag x

log

sag "Fertig!"
```

## 🔧 Konfiguration

### Custom Search Path setzen

Öffne `easyspeak_v3_1.py` und finde diese Zeile (ca. Zeile 265):

```python
self.CUSTOM_SEARCH_PATH = None
```

Ändere zu:

**Windows:**
```python
self.CUSTOM_SEARCH_PATH = r"C:\Users\DeinName\Desktop\EasySpeak"
```

**Mac/Linux:**
```python
self.CUSTOM_SEARCH_PATH = "/Users/max/Desktop/EasySpeak"
```

So sucht EasySpeak immer im richtigen Ordner nach .easy Dateien!

## 📂 Projekt-Struktur

```
MeinProjekt/
├── easyspeak_v3_1.py      # Der Interpreter
├── hauptprogramm.easy     # Dein Hauptprogramm
├── modul1.easy            # Unterprogramm
└── modul2.easy            # Weiteres Unterprogramm
```

## 🎨 GUI Features

- **Code-Editor** - Syntax-Highlighting (kommt bald!)
- **Output-Log** - Dunkles Design, scrollbar
- **Buttons:**
  - ▶ **Ausführen** - Code ausführen
  - 📂 **Öffnen** - .easy Datei laden
  - 💾 **Speichern** - Datei speichern
  - 💾 **Speichern unter...** - Als neue Datei speichern
  - 🧹 **Output leeren** - Log leeren
  - ✨ **Beispiel** - Demo-Code laden

## ❓ FAQ

### Wie starte ich EasySpeak?
```bash
python easyspeak_v3_1.py
```
Oder Doppelklick auf die Datei (Windows).

### Wo speichere ich meine Programme?
Am besten im gleichen Ordner wie `easyspeak_v3_1.py` oder setze `CUSTOM_SEARCH_PATH`.

### Wie lade ich andere Programme?
```easyspeak
start mein_programm.easy
```

### Fenster schließt sich sofort!
Nutze die GUI! Wenn du im Terminal arbeitest, füge `pause` am Ende hinzu.

### "Datei nicht gefunden"
- Nutze `dateien` um verfügbare Dateien zu sehen
- Setze `CUSTOM_SEARCH_PATH` im Code
- Stelle sicher dass alle Dateien im gleichen Ordner sind

### Kann ich mehrere Befehle in einer Zeile schreiben?
Ja! Mit Semikolon:
```easyspeak
var x 5; var y 10; rechne x + y
```

### Wie kommentiere ich?
```easyspeak
# Das ist ein Kommentar
sag "Hallo"  # Kommentar am Ende
```

## 🐛 Bekannte Probleme

- Keine Syntax-Highlighting im Editor (kommt in v2!)
- Kein Debugger (kommt in v2!)
- Keine Auto-Vervollständigung (kommt in v2!)

## 🗺️ Roadmap

### v1.1 (nächstes Update)
- [ ] Syntax-Highlighting im Editor
- [ ] Mehr Funktionen (abs, sqrt, pow)
- [ ] Fehlermarkierungen im Code
- [ ] Auto-Save

### v2.0 (geplant)
- [ ] Funktionen definieren (`funktion name ...`)
- [ ] Dateien lesen/schreiben
- [ ] Debugging-Modus
- [ ] Schritt-für-Schritt Ausführung
- [ ] Variablen-Inspektor

### v3.0 (Zukunft)
- [ ] Canvas/Grafik-Befehle
- [ ] Spiele entwickeln
- [ ] Sound/Musik
- [ ] Netzwerk-Befehle

## 🤝 Beitragen

EasySpeak ist Open Source! Verbesserungsvorschläge und Bug-Reports sind willkommen!

## 📄 Lizenz

MIT License - Frei nutzbar für alle Zwecke!

## 🎓 Für Lehrer & Schulen

EasySpeak eignet sich perfekt für:
- Programmier-Anfänger (ab 10 Jahre)
- Schulunterricht
- Programmier-Workshops
- Informatik-AG

**Vorteile:**
- Deutsche Sprache = keine Sprachbarriere
- Sofort loslegen ohne Installation
- Visuelle Ausgabe mit GUI
- Sichere Ausführung (kein System-Zugriff)

## 💬 Support

Bei Fragen oder Problemen:
1. Lies die FAQ oben
2. Prüfe die Beispiele
3. Nutze den `dateien` Befehl zur Fehlersuche

## 🙏 Credits

Entwickelt mit ❤️ für alle, die Programmieren lernen wollen!

**Besonderer Dank an:**
- Python Community
- Tkinter Team
- Alle Early Adopters und Tester

---

**Viel Spaß beim Programmieren mit EasySpeak! 🚀**

*Gemacht in Deutschland 🇩🇪*

