Live demo: https://people.cs.kuleuven.be/wannes.meert/dotsandboxes/play
This setup is part of the course "Machine Learning: Project" (KU Leuven, Faculty of engineering, Department of Computer Science, DTAI research group).
The example agent is designed for Python 3.6 and requires the websockets package. Dependencies can be installed using pip:
$ pip install -r requirements.txt
This program shows a web-based GUI to play the Dots and Boxes
game. This supports human-human, agent-human and agent-agent combinations.
It is a simple Javascript based application that runs entirely in the browser.
You can start it by opening the file static/dotsandboxes.html
in a browser.
Or alternatively, you can start the app using the included simple server:
$ ./dotsandboxesserver.py 8080
The game can then be played by directing your browser to http://127.0.0.1:8080.
This is the program that runs a game-playing agent. This application listens to websocket requests that communicate game information and sends back the next action it wants to play.
Starting the agent client is done using the following command:
$ ./dotsandboxesagent <port>
This starts a websocket on the given port that can receveive JSON messages.
The JSON messages given below should be handled by your agent. Take into account the maximal time allowed to reply.
Both players get a message that a new game has started:
{
"type": "start",
"player": 1,
"timelimit", 0.5,
"grid": [5, 5],
"game": "123456"
}
where player
is the number assigned to this agent, timelimit
is the
time in seconds in which you need to send your action back to the server,
and grid
is the grid size in rows and columns.
If you are player 1, reply with the first action you want to perform:
{
"type": "action",
"location": [1, 1],
"orientation": "v"
}
The field location
is expressed as row and column (zero-based numbering) and
orientation
is either "v" (vertical) or "h" (horizontal).
When an action is played, the message sent to both players is:
{
"type": "action",
"game": "123456",
"player": 1,
"nextplayer": 2,
"score": [0, 0],
"location": [1, 1],
"orientation": "v"
}
If it is your turn you should answer with a message that states your next move:
{
"type": "action",
"location": [1, 1],
"orientation": "v"
}
When the game ends after an action, the message is slightly altered:
{
"type": "end",
"game": "123456",
"player": 1,
"nextplayer": 0,
"score": [3, 1],
"location": [1, 1],
"orientation": "v",
"winner": 1
}
The type
field becomes end
and a new field winner
is set to the player
that has won the game.
- Wannes Meert, https://people.cs.kuleuven.be/wannes.meert
- Hendrik Blockeel, https://people.cs.kuleuven.be/hendrik.blockeel
- Arne De Brabandere, https://people.cs.kuleuven.be/arne.debrabandere
- Sebastijan Dumančić, https://people.cs.kuleuven.be/sebastijan.dumancic
- Pieter Robberechts, https://people.cs.kuleuven.be/pieter.robberechts