- Semester wird direkt übetragen => Ob Spieler auf diesem spielen kann, wird nicht im Netzwerk behandelt
- Schiffe mit der Größe `8-Credits <= 0` werden aufgeteilt in einzelne Schiffe der Größe `8-Credits/2`
**Semester - Schiffe**
1. 2, 2, 2, 2, 4, 6
2. 2, 2, 2, 2, 2,
3. 2, 2, 2, 2, 4, 6
4. 2, 2, 2, 2, 4, 6
5. 2, 2, 2, 3, 3, 6
6. 2, 1, 1, 1, 6
## API-Definition Version 1
### Trennzeichen
";" => Befehle auslesen durch String.split(";");
----
### 1. HELLO
**Synopsis:**
```
HELLO;<USERNAME>[;VERSION]
```
**Description:**
Wird durch den Client bei der Verbindung an den Host gesendet. Typischerweise die erste Nachricht.
**Options:**
**USERNAME*: Name des hostenden Spielers
* String (UTF-8)
* Maximale Länge: 255 Zeichen
**VERSION* (optional): Versionsnummer des Programms
* int: API_VERSION
----
### 2. VERSION_SEND (Optional)
**Synopsis:**
```
VERSION_SEND;<VERSION>
```
**Seit Version:** 1
**Description:**
Einmalig vor Spielbeginn senden um dem Peer mitzuteilen welche Version des Protokolls man benutzt. Optional.
Wird nie ein ``VERSION_SEND`` empfangen, wird per Definition Version 1 benutzt.
**Options:**
----
### 3. VERSION_ACK
**Synopsis:**
```
VERSION_ACK;<VERSION>
```
**Description:**
Einmalig vor Spielbeginn senden nachdem man das ``VERSION_SEND`` des Peers empfangen hat um sicher zu gehen dass die Version des Partners die Gleiche ist.
**Options:**
**VERSION*: Versionsnummer des Programms
* int: API_VERSION
----
### 4. SEMESTER_SEND
**Synopsis:**
```
SEMESTER_SEND;<SEMESTER>
```
**Description:**
Einmalig vor Spielbeginn senden um dem Peer mitzuteilen in welchem Semestern man spiel.
**Options:**
**SEMESTER*: Höchstes spielbares Semester des Sendenden
* int: Ganzzahl im Intervall [1,6]
----
### 5. SEMESTER_ACK
**Synopsis:**
```
SEMESTER_ACK;<SEMESTER>
```
**Description:**
Einmalig vor Spielbeginn senden um dem Peer mitzuteilen in welchem Semestern man spiel. Es wird ``min(meinSemester, peerSemester)`` als Semester ausgewählt. Nach Empfangen von SEMESTER_ACK kann begonnen werden die Schiffe zu setzen.
**Options:**
**SEMESTER*: min(meinSemester, peerSemester)
* int: Ganzzahl im Intervall [1,6]
----
### 6. READY_CHECK
**Synopsis:**
```
READY_CHECK
```
**Description:**
Sendet Nachricht für Bereitschafts-Überprüfung an anderen Spieler. Erwartet eine Antwort.
----
### 7. READY_RESPONSE
**Synopsis:**
```
READY_RESPONSE;<SHIPS_PLACED>
```
**Description:**
**Options:**
**SHIPS_PLACED*: Anzahl der noch nicht platzierten Schiffe
* int: Zahl im Intervall [0, Anzahl der nicht platzierten Schiffe]
----
### 8. START
**Synopsis:**
```
START;<WHO>
```
**Description:**
**Options:**
**WHO*: String ∈ { "YOU", "ME" }
----
### 9. START_ACK
**Synopsis:**
```
START_ACK;<WHO>
```
**Description:**
**Options:**
**WHO*:
* String ∈ { "YOU", "ME" }
----
### 10. FIRE
**Synopsis:**
```
FIRE;<ROW>;<COLUMN>
```
**Description:**
**Options:**
**ROW*: Das Feld im Spielfeld welches beschossen wird
* int im Intervall [0, Spielfeldgröße-1]
**COLUMN*: Das Feld im Spielfeld welches beschossen wird
* int im Intervall [0, Spielfeldgröße-1]
----
### 11. FIRE_ACK
**Synopsis:**
```
FIRE_ACK;<ROW>;<COLUMN;<STATUS>
```
**Description:**
**Options:**
**ROW*: Das Feld im Spielfeld welches beschossen wird
* int im Intervall [0, Spielfeldgröße-1]
**COLUMN*: Das Feld im Spielfeld welches beschossen wird
* int im Intervall [0, Spielfeldgröße-1]
**STATUS*:
* String ∈ {"HIT", "MISS", "SUNK"}
----
### 12. ERROR
**Synopsis:**
```
ERROR;<MSG>
```
**Description:**
Falls ein Fehler auftritt, diesen dem Mitspieler mitteilen um Debugging auf beiden Seiten ermöglichen