diff options
-rw-r--r-- | python/GameState.py (renamed from dotsandboxes/GameState.py) | 0 | ||||
-rw-r--r-- | python/MCTS.py (renamed from dotsandboxes/agents/algorithms/MCTS.py) | 0 | ||||
-rw-r--r-- | python/agent_AB.py (renamed from dotsandboxes/agents/agent_AB.py) | 0 | ||||
-rw-r--r-- | python/agent_MCTS.py (renamed from dotsandboxes/agents/agent_MCTS.py) | 0 | ||||
-rw-r--r-- | python/alphaBeta.py (renamed from dotsandboxes/agents/algorithms/alphaBeta.py) | 0 | ||||
-rw-r--r-- | python/ann.py (renamed from dotsandboxes/agents/algorithms/ann.py) | 0 | ||||
-rw-r--r-- | python/board.py (renamed from dotsandboxes/board.py) | 0 | ||||
-rw-r--r-- | python/dataStructures.py (renamed from dotsandboxes/dataStructures.py) | 0 | ||||
-rw-r--r-- | python/dotsandboxes/README.md | 134 | ||||
-rwxr-xr-x | python/dotsandboxes/dotsandboxesagent | 5 | ||||
-rw-r--r-- | python/dotsandboxes/dotsandboxesagent.py (renamed from dotsandboxes/agents/agent_random.py) | 0 | ||||
-rw-r--r-- | python/dotsandboxes/dotsandboxescompete.py (renamed from dotsandboxes/test/cli_compete.py) | 0 | ||||
-rw-r--r-- | python/dotsandboxes/dotsandboxesserver.py (renamed from dotsandboxes/server.py) | 2 | ||||
-rw-r--r-- | python/dotsandboxes/requirements.txt (renamed from requirements.txt) | 1 | ||||
-rw-r--r-- | python/dotsandboxes/static/dotsandboxes.css (renamed from dotsandboxes/web/dotsandboxes.css) | 0 | ||||
-rw-r--r-- | python/dotsandboxes/static/dotsandboxes.html (renamed from dotsandboxes/web/dotsandboxes.html) | 0 | ||||
-rw-r--r-- | python/dotsandboxes/static/dotsandboxes.js (renamed from dotsandboxes/web/dotsandboxes.js) | 0 | ||||
-rw-r--r-- | python/evaluate.py (renamed from dotsandboxes/test/evaluate.py) | 0 | ||||
-rwxr-xr-x | python/start.sh (renamed from start.sh) | 0 |
19 files changed, 140 insertions, 2 deletions
diff --git a/dotsandboxes/GameState.py b/python/GameState.py index eed8f36..eed8f36 100644 --- a/dotsandboxes/GameState.py +++ b/python/GameState.py diff --git a/dotsandboxes/agents/algorithms/MCTS.py b/python/MCTS.py index 6c71ba9..6c71ba9 100644 --- a/dotsandboxes/agents/algorithms/MCTS.py +++ b/python/MCTS.py diff --git a/dotsandboxes/agents/agent_AB.py b/python/agent_AB.py index 5564f11..5564f11 100644 --- a/dotsandboxes/agents/agent_AB.py +++ b/python/agent_AB.py diff --git a/dotsandboxes/agents/agent_MCTS.py b/python/agent_MCTS.py index b60f5ec..b60f5ec 100644 --- a/dotsandboxes/agents/agent_MCTS.py +++ b/python/agent_MCTS.py diff --git a/dotsandboxes/agents/algorithms/alphaBeta.py b/python/alphaBeta.py index 8e041fe..8e041fe 100644 --- a/dotsandboxes/agents/algorithms/alphaBeta.py +++ b/python/alphaBeta.py diff --git a/dotsandboxes/agents/algorithms/ann.py b/python/ann.py index 05ae647..05ae647 100644 --- a/dotsandboxes/agents/algorithms/ann.py +++ b/python/ann.py diff --git a/dotsandboxes/board.py b/python/board.py index 36cfe8c..36cfe8c 100644 --- a/dotsandboxes/board.py +++ b/python/board.py diff --git a/dotsandboxes/dataStructures.py b/python/dataStructures.py index 1e972fc..1e972fc 100644 --- a/dotsandboxes/dataStructures.py +++ b/python/dataStructures.py diff --git a/python/dotsandboxes/README.md b/python/dotsandboxes/README.md new file mode 100644 index 0000000..e3f844c --- /dev/null +++ b/python/dotsandboxes/README.md @@ -0,0 +1,134 @@ +Dots and Boxes application +========================== + +Live demo: https://people.cs.kuleuven.be/wannes.meert/dotsandboxes/play + +![Screenshot of Dots and Boxes](https://people.cs.kuleuven.be/wannes.meert/dotsandboxes/screenshot.png?v=2) + +This setup is part of the course "Machine Learning: Project" (KU Leuven, +Faculty of engineering, Department of Computer Science, +[DTAI research group](https://dtai.cs.kuleuven.be)). + + +Installation +------------ + +The example agent is designed for Python 3.6 and requires the +[websockets](https://websockets.readthedocs.io) package. Dependencies can be +installed using pip: + + $ pip install -r requirements.txt + + +Start the game GUI +------------------ + +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. + + +Start the agent client +---------------------- + +This is the program that runs a game-playing agent. This application listens +to [websocket](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API) +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. + +### Initiate the game + +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). + + +### Action in the game + +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" + } + + +### Game end + +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. + + +Contact information +------------------- + +- 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 + diff --git a/python/dotsandboxes/dotsandboxesagent b/python/dotsandboxes/dotsandboxesagent new file mode 100755 index 0000000..eecf719 --- /dev/null +++ b/python/dotsandboxes/dotsandboxesagent @@ -0,0 +1,5 @@ +#!/bin/bash +# It is not necessary to use a shell script for this. Dropping the .py +# extension and including the correct shebang is also correct. +python3 $(dirname "$0")/dotsandboxesagent.py $@ + diff --git a/dotsandboxes/agents/agent_random.py b/python/dotsandboxes/dotsandboxesagent.py index abf677b..abf677b 100644 --- a/dotsandboxes/agents/agent_random.py +++ b/python/dotsandboxes/dotsandboxesagent.py diff --git a/dotsandboxes/test/cli_compete.py b/python/dotsandboxes/dotsandboxescompete.py index ee2aee8..ee2aee8 100644 --- a/dotsandboxes/test/cli_compete.py +++ b/python/dotsandboxes/dotsandboxescompete.py diff --git a/dotsandboxes/server.py b/python/dotsandboxes/dotsandboxesserver.py index 914ab45..1b66372 100644 --- a/dotsandboxes/server.py +++ b/python/dotsandboxes/dotsandboxesserver.py @@ -23,7 +23,7 @@ class RequestHandler(http.server.SimpleHTTPRequestHandler): def do_GET(self): if self.path == "/": self.send_response(302) - self.send_header("Location", "web/dotsandboxes.html") + self.send_header("Location", "static/dotsandboxes.html") self.end_headers() return super().do_GET() diff --git a/requirements.txt b/python/dotsandboxes/requirements.txt index af05743..14774b4 100644 --- a/requirements.txt +++ b/python/dotsandboxes/requirements.txt @@ -1,2 +1 @@ websockets -numpy
\ No newline at end of file diff --git a/dotsandboxes/web/dotsandboxes.css b/python/dotsandboxes/static/dotsandboxes.css index 71b1d3b..71b1d3b 100644 --- a/dotsandboxes/web/dotsandboxes.css +++ b/python/dotsandboxes/static/dotsandboxes.css diff --git a/dotsandboxes/web/dotsandboxes.html b/python/dotsandboxes/static/dotsandboxes.html index 4e97508..4e97508 100644 --- a/dotsandboxes/web/dotsandboxes.html +++ b/python/dotsandboxes/static/dotsandboxes.html diff --git a/dotsandboxes/web/dotsandboxes.js b/python/dotsandboxes/static/dotsandboxes.js index 11e9447..11e9447 100644 --- a/dotsandboxes/web/dotsandboxes.js +++ b/python/dotsandboxes/static/dotsandboxes.js diff --git a/dotsandboxes/test/evaluate.py b/python/evaluate.py index fb60211..fb60211 100644 --- a/dotsandboxes/test/evaluate.py +++ b/python/evaluate.py diff --git a/start.sh b/python/start.sh index 455944d..455944d 100755 --- a/start.sh +++ b/python/start.sh |