Hangkell ist ein Hangman Server in Haskell. Über einen RESTful Service kann über ein Netzwerk gemeinsam Hangman gespielt werden.
Entstand ist dieses Programm als Studienarbeit für Funktionale Programmierung im WS 17/18.
Zum Starten des Servers einfach folgendes ausführen:
stack build
stack exec Hangkell-exe
Die Anwendung wird in Folge auf HTTP Requests auf dem Port 8080 hören. Entsprechend der API kann man in Folge mit der Anwendung interagieren.
- Offene Spiele mit
GET localhost:8080/games/
abrufen - Neues Spiel mit
POST localhost:8080/games?word=Hello%20World
anlegen - Ersten Spielzug tätigen
PUT localhost:8080/games/0
Request Payload:
{
"playerId" : 0,
"playerSecret" : "password",
"guess" : "H"
}
- Weiß man nun das Lösungswort so kann man das Spiel in einem Zug beenden
Dafür einen Lösungsversuch mitPUT localhost:8080/games/0/solve
starten. Als Payload dann den Versuch:
{
"playerId" : 0,
"playerSecret" : "password",
"guess" : "Hello World"
}
- Das Spiel ist beendet, Spieler 0 hat gewonnen!
- Player
{
"alive": Bool, // Ob der Spieler noch am Leben ist
"failures": Int, // Bisherige Fehlversuche
"maxFailures": Int, // Maximale Anzahl der erlaubten Fehlversuche
"playerID": Int // ID des Spielers
}
- Game
{
"atTurn": Player, // Aktiver Spieler
"gameID": Int, // ID des Spiels: für künftige Anfragen!
"players": [Player], // Alle teilnehmenden Spieler
"solution": String, // Zustand des Lösungswort (Ungelöstes: '_')
"guesses": String // Alle bisher geratenen Buchstaben
}
- Spielzug
{
"playerId" : Int // ID des Spielzug auslösenden Spielers
"playerSecret" : String // Key des Spielers (standard: "password")
"guess" : Char/String // Buchstabe/Lösung der/die gespielt wird
}
Anfrage: GET /games/
Antwort: [Game]
= Alle gespeicherten Spiele
Anfrage: POST /games?word={Solution}
Antwort: Game
Das angelegte Spiel
Anfrage: GET /games/:id
Antwort: Game
Das Spiel mit der gegebenen ID
Anfrage: PUT /games/:id
Body: Spielzug
Antwort: Game
Neuer Zustand des Spiels mit der gegebenen ID
Anfrage: PUT /games/:id/solve
Body: Spielzug
Antwort: Game
Neuer Zustand des Spiels mit der gegebenen ID
Anfrage: POST /games/:id/players
Antwort: Player
Spieler der dem Spiel mit der gegebenen ID hinzugefügt wurde