- Semester wird direkt übetragen => Ob Spieler auf diesem spielen kann, wird nicht im Netzwerk behandelt
* 42069
### Andere Festlegungen:
- Für den Host ist es uninteressant, ob der Client berechtigt ist auf einem Semester zu spielen. Es existiert demnach keine zentrale "Registry", welche den Fortschritt aller Nutzer trackt. Diese Aufgabe übernimmt jeder Host/Client für sich selbst intern.
- Schiffe mit der Größe `8-Credits <= 0` werden aufgeteilt in einzelne Schiffe der Größe `8-Credits/2`
- Schiffe mit der Größe `8-Credits <= 0` werden aufgeteilt in einzelne Schiffe der Größe `8-Credits/2`
> - <span style="color:orange">***ACHTUNG*** Eine Größe von `1` ist für eine sinnvolle implementierung einer KI ungeeignet. Es ist sinnvoller die Formel `max(8-Credits, 2)` zu verwenden.</span>
**Semester - Schiffe**
### **Schiffsgrößen nach Semester**
1. 2, 2, 2, 2, 4, 6
| Semester | Schiffe & Größen |
2. 2, 2, 2, 2, 2,
| -------- | -------- |
3. 2, 2, 2, 2, 4, 6
| 1 | {2, 2, 2, 2, 4, 6} |
4. 2, 2, 2, 2, 4, 6
| 2 | {2, 2, 2, 2, 2} |
5. 2, 2, 2, 3, 3, 6
| 3 | {2, 2, 2, 2, 4, 6} |
6. 2, 1, 1, 1, 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(";");
----
# [**API-Definition Version 1**](#v1)<a id="v1"></a>
### 1. HELLO
### Übersicht
1.[Allgemeine Beschreibung der Kommunikation](#v1/general)
1.[Struktur einer Nachricht](#v1/general/msg_structure)
2.[Ablauf der Verbindung](#v1/general/connection_timeline)
2.[Schnittstellenendpunkte](#v1/api)
*[HELLO](#v1/api/hello)
*[HELLO_ACK](#v1/api/hello_ack)
*[START](#v1/api/start)
*[START_ack](#v1/api/start_ack)
*[READY_PING](#v1/api/ready_ping)
*[READY_CHK](#ready_chk)
*[BEGIN](#v1/api/begin)
*[BEGIN_ACK](#v1/api/begin_ack)
*[FIRE](#v1/api/fire)
*[FIRE_ACK](#v1/api/fire_ack)
*[END](#v1/api/end)
*[END_ACK](#v1/api/end_ack)
*[BYE](#v1/api/bye)
*[ERR](#v1/api/err)
## [Allgemeine Beschreibung der Kommunikation](#v1/general)<a id="v1/general"></a>
### [Struktur einer Nachricht](#v1/general/msg_structure)<a id="v1/general/msg_structure"></a>
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.
Bestätigt dem Host durch den Client, dass das die Partie gestartet wird.
**Options:**
**VERSION*: Versionsnummer des Programms
*Diese Nachricht wird als Antwort auf eine [START](#v1/api/start)-Nachricht gesendet.*
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.
Bestätigt das Platzieren sämtlicher Schiffe des Clients und dessen Bereitschaft mit der Partie zu beginnen.
Das Senden einer extra Nachricht ermöglicht es dem Benutzer des Client ggfs. Änderungen seiner Schiffplatzierung vorzunehmen, auch wenn alle Schiffe platziert sind
Signalisiert dem Client durch den Host, dass die Vorbereitungsphase beendet und das Spiel begonnen wird. Der Host entscheidet durch einen Münzwurf (Zufall), welche Seite beginnt.
**Argumente:**
*<spanclass="opt">WHO</span>: Der beginnende Spieler
* String ∈ { "host", "client" }
**Antwort**
*[FIRE_ACK](#v1/api/fire_ack): Die Nachricht vom Gegenspieler, dass der Spielzug akzeptiert wurde
*[ERR](#v1/api/err): Die Nachricht konnte nicht vom Gegenspieler verarbeitet werden
Gibt dem Gegenspieler eine Rückmeldung, ob der Angriff auf ein spezifisches Feld getroffen hat. Bei einem Treffer (oder Zerstörung) eines Schiffes durch den Gegner erhält dieser einen weiteren Angriff.
*Diese Nachricht wird als Antwort auf eine [FIRE](#v1/api/fire)-Nachricht gesendet.*
**Options:**
**Argumente:**
**WHO*: String ∈ { "YOU", "ME" }
*<spanclass="opt">TYPE:</span> Das Ergebnis des Angriffs
***String** ∈ {"HIT", "MISS", "SUNK"}
*<spanclass="opt">GAME_OVER:</span> Letztes Schiff des Sendenden versenkt
***String** $\in$ {"true"}
----
----
### 9. START_ACK
### [END](#v1/api/end)<a id="v1/api/end"></a>
**Synopsis:**
**Synopsis:**
```
```
START_ACK;<WHO>
END;<WINNER>
```
```
**Description:**
**Beschreibung:**
Bestätigt dem Client das Ende der Partie und teilt diesem das Ergebnis mit.
**Argumente:**
*<spanclass="opt">WINNER:</span> Das Ergebnis des Angriffs
***String** $\in$ {"host", "client"}
**Options:**
**Antwort**
**WHO*:
*[END_ACK](#v1/api/end_ack): Das Spielergebnis wurde akzeptiert
* String ∈ { "YOU", "ME" }
*[ERR](#v1/api/err): Die Nachricht konnte nicht vom Client verarbeitet werden
**ILLEGAL_STATE*: Der interne Gewinner stimmt nicht mit dem Argument <WINNER>