summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2020-overdrive/.gitignore2
-rw-r--r--2020-overdrive/Cargo.lock164
-rw-r--r--2020-overdrive/Cargo.toml15
-rw-r--r--2020-overdrive/Makefile15
-rw-r--r--2020-overdrive/bot.json8
-rw-r--r--2020-overdrive/src/command.rs27
-rw-r--r--2020-overdrive/src/consts.rs14
-rw-r--r--2020-overdrive/src/global_json.rs165
-rw-r--r--2020-overdrive/src/json.rs185
-rw-r--r--2020-overdrive/src/lib.rs147
-rw-r--r--2020-overdrive/src/main.rs24
-rw-r--r--2020-overdrive/src/state.rs355
-rwxr-xr-x2020-overdrive/tests/import-replay.sh22
-rw-r--r--2020-overdrive/tests/live_comparison.rs134
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 001/JsonMap.json706
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 001/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 001/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 002/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 002/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 002/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 003/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 003/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 003/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 004/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 004/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 004/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 005/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 005/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 005/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 006/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 006/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 006/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 007/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 007/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 007/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 008/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 008/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 008/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 009/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 009/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 009/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 010/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 010/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 010/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 011/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 011/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 011/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 012/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 012/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 012/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 013/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 013/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 013/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 014/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 014/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 014/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 015/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 015/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 015/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 016/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 016/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 016/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 017/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 017/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 017/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 018/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 018/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 018/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 019/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 019/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 019/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 020/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 020/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 020/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 021/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 021/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 021/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 022/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 022/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 022/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 023/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 023/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 023/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 024/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 024/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 024/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 025/JsonMap.json872
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 025/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 025/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 026/JsonMap.json871
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 026/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 026/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 027/JsonMap.json871
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 027/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 027/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 028/JsonMap.json871
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 028/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 028/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 029/JsonMap.json871
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 029/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 029/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 030/JsonMap.json872
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 030/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 030/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 031/JsonMap.json872
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 031/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 031/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 032/JsonMap.json872
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 032/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 032/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 033/JsonMap.json872
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 033/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 033/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 034/JsonMap.json872
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 034/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 034/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 035/JsonMap.json872
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 035/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 035/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 036/JsonMap.json873
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 036/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 036/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 037/JsonMap.json873
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 037/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 037/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 038/JsonMap.json874
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 038/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 038/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 039/JsonMap.json874
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 039/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 039/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 040/JsonMap.json875
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 040/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 040/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 041/JsonMap.json874
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 041/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 041/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 042/JsonMap.json875
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 042/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 042/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 043/JsonMap.json875
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 043/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 043/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 044/JsonMap.json875
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 044/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 044/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 045/JsonMap.json874
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 045/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 045/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 046/JsonMap.json873
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 046/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 046/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 047/JsonMap.json872
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 047/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 047/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 048/JsonMap.json872
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 048/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 048/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 049/JsonMap.json872
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 049/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 049/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 050/JsonMap.json873
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 050/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 050/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 051/JsonMap.json873
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 051/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 051/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 052/JsonMap.json873
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 052/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 052/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 053/JsonMap.json872
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 053/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 053/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 054/JsonMap.json871
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 054/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 054/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 055/JsonMap.json873
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 055/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 055/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 056/JsonMap.json872
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 056/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 056/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 057/JsonMap.json871
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 057/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 057/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 058/JsonMap.json871
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 058/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 058/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 059/JsonMap.json871
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 059/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 059/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 060/JsonMap.json870
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 060/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 060/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 061/JsonMap.json870
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 061/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 061/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 062/JsonMap.json870
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 062/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 062/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 063/JsonMap.json870
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 063/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 063/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 064/JsonMap.json870
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 064/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 064/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 065/JsonMap.json871
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 065/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 065/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 066/JsonMap.json871
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 066/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 066/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 067/JsonMap.json871
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 067/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 067/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 068/JsonMap.json871
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 068/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 068/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 069/JsonMap.json871
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 069/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 069/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 070/JsonMap.json871
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 070/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 070/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 071/JsonMap.json870
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 071/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 071/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 072/JsonMap.json871
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 072/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 072/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 073/JsonMap.json870
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 073/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 073/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 074/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 074/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 074/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 075/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 075/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 075/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 076/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 076/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 076/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 077/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 077/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 077/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 078/JsonMap.json870
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 078/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 078/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 079/JsonMap.json870
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 079/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 079/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 080/JsonMap.json870
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 080/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 080/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 081/JsonMap.json870
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 081/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 081/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 082/JsonMap.json870
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 082/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 082/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 083/JsonMap.json870
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 083/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 083/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 084/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 084/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 084/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 085/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 085/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 085/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 086/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 086/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 086/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 087/JsonMap.json870
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 087/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 087/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 088/JsonMap.json870
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 088/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 088/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 089/JsonMap.json871
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 089/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 089/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 090/JsonMap.json871
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 090/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 090/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 091/JsonMap.json870
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 091/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 091/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 092/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 092/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 092/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 093/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 093/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 093/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 094/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 094/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 094/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 095/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 095/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 095/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 096/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 096/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 096/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 097/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 097/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 097/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 098/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 098/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 098/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 099/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 099/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 099/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 100/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 100/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 100/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 101/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 101/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 101/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 102/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 102/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 102/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 103/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 103/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 103/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 104/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 104/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 104/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 105/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 105/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 105/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 106/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 106/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 106/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 107/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 107/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 107/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 108/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 108/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 108/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 109/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 109/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 109/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 110/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 110/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 110/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 111/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 111/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 111/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 112/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 112/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 112/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 113/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 113/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 113/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 114/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 114/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 114/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 115/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 115/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 115/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 116/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 116/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 116/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 117/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 117/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 117/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 118/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 118/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 118/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 119/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 119/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 119/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 120/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 120/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 120/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 121/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 121/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 121/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 122/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 122/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 122/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 123/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 123/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 123/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 124/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 124/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 124/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 125/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 125/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 125/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 126/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 126/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 126/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 127/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 127/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 127/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 128/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 128/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 128/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 129/JsonMap.json870
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 129/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 129/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 130/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 130/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 130/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 131/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 131/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 131/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 132/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 132/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 132/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 133/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 133/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 133/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 134/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 134/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 134/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 135/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 135/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 135/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 136/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 136/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 136/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 137/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 137/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 137/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 138/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 138/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 138/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 139/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 139/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 139/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 140/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 140/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 140/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 141/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 141/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 141/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 142/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 142/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 142/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 143/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 143/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 143/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 144/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 144/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 144/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 145/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 145/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 145/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 146/JsonMap.json866
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 146/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 146/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 147/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 147/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 147/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 148/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 148/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 148/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 149/JsonMap.json868
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 149/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 149/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 150/JsonMap.json869
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 150/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 150/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 151/JsonMap.json804
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 151/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 151/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 152/JsonMap.json549
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 152/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 152/PlayerCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 153/JsonMap.json260
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 153/OpponentCommand.txt1
-rw-r--r--2020-overdrive/tests/v1-normal-match/Round 153/PlayerCommand.txt1
-rw-r--r--2020-overdrive/vroomba-analysis/Cargo.lock378
-rw-r--r--2020-overdrive/vroomba-analysis/Cargo.toml11
-rw-r--r--2020-overdrive/vroomba-analysis/src/main.rs182
476 files changed, 133991 insertions, 0 deletions
diff --git a/2020-overdrive/.gitignore b/2020-overdrive/.gitignore
new file mode 100644
index 0000000..130f824
--- /dev/null
+++ b/2020-overdrive/.gitignore
@@ -0,0 +1,2 @@
+target
+/submission.zip
diff --git a/2020-overdrive/Cargo.lock b/2020-overdrive/Cargo.lock
new file mode 100644
index 0000000..967ef8f
--- /dev/null
+++ b/2020-overdrive/Cargo.lock
@@ -0,0 +1,164 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "anyhow"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "013a6e0a2cbe3d20f9c60b65458f7a7f7a5e636c5d0f45a5a6aee5d4b1f01785"
+
+[[package]]
+name = "autocfg"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
+
+[[package]]
+name = "either"
+version = "1.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
+
+[[package]]
+name = "fixedbitset"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d"
+
+[[package]]
+name = "indexmap"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "076f042c5b7b98f31d205f1249267e12a6518c1481e9dae9764af19b707d2292"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "itertools"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e"
+
+[[package]]
+name = "num-traits"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "pathfinding"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86f4d8cc85ca67860ef4324faf86973a39e4e1c78338987eda29a8e6b6ec0c0e"
+dependencies = [
+ "fixedbitset",
+ "indexmap",
+ "itertools",
+ "num-traits",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c09721c6781493a2a492a96b5a5bf19b65917fe6728884e7c44dd0c60ca3435"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "535622e6be132bccd223f4bb2b8ac8d53cda3c7a6394944d3b2b33fb974f9d76"
+
+[[package]]
+name = "serde"
+version = "1.0.105"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e707fbbf255b8fc8c3b99abb91e7257a622caeb20a9818cbadbeeede4e0932ff"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.105"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac5d00fc561ba2724df6758a17de23df5914f20e41cb00f94d5b7ae42fffaff8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02044a6a92866fd61624b3db4d2c9dccc2feabbc6be490b87611bf285edbac55"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd02c7587ec314570041b2754829f84d873ced14a96d1fd1823531e11db40573"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0df0eb663f387145cab623dea85b09c2c5b4b0aef44e945d928e682fce71bb03"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
+
+[[package]]
+name = "vroomba"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "pathfinding",
+ "serde",
+ "serde_json",
+ "serde_repr",
+]
diff --git a/2020-overdrive/Cargo.toml b/2020-overdrive/Cargo.toml
new file mode 100644
index 0000000..818e132
--- /dev/null
+++ b/2020-overdrive/Cargo.toml
@@ -0,0 +1,15 @@
+[package]
+name = "vroomba"
+version = "0.1.0"
+edition = "2018"
+
+[dependencies]
+anyhow = "1.0.27"
+serde = { version = "1.0", features = ["derive"] }
+serde_repr = "0.1"
+serde_json = "1.0"
+pathfinding = "2.0.4"
+
+[profile.release]
+lto = true
+debug = true \ No newline at end of file
diff --git a/2020-overdrive/Makefile b/2020-overdrive/Makefile
new file mode 100644
index 0000000..a5db32e
--- /dev/null
+++ b/2020-overdrive/Makefile
@@ -0,0 +1,15 @@
+default: build
+
+build:
+ cargo build --release
+
+test:
+ cargo test --release
+
+clean:
+ cargo clean
+
+submission.zip: bot.json Cargo.lock Cargo.toml src
+ zip -r9 submission.zip bot.json Cargo.lock Cargo.toml src
+
+.PHONY: default build test clean
diff --git a/2020-overdrive/bot.json b/2020-overdrive/bot.json
new file mode 100644
index 0000000..e44f2f2
--- /dev/null
+++ b/2020-overdrive/bot.json
@@ -0,0 +1,8 @@
+{
+ "author":"Justin Wernick",
+ "email":"justin@worthe-it.co.za",
+ "nickName" :"Vroomba",
+ "botLocation": "/target/release/",
+ "botFileName": "vroomba",
+ "botLanguage": "rust"
+}
diff --git a/2020-overdrive/src/command.rs b/2020-overdrive/src/command.rs
new file mode 100644
index 0000000..1858202
--- /dev/null
+++ b/2020-overdrive/src/command.rs
@@ -0,0 +1,27 @@
+use std::fmt;
+
+#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq)]
+pub enum Command {
+ Nothing,
+ Accelerate,
+ Decelerate,
+ TurnLeft,
+ TurnRight,
+ UseBoost,
+ UseOil,
+}
+
+impl fmt::Display for Command {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ use Command::*;
+ match self {
+ Nothing => write!(f, "NOTHING"),
+ Accelerate => write!(f, "ACCELERATE"),
+ Decelerate => write!(f, "DECELERATE"),
+ TurnLeft => write!(f, "TURN_LEFT"),
+ TurnRight => write!(f, "TURN_RIGHT"),
+ UseBoost => write!(f, "USE_BOOST"),
+ UseOil => write!(f, "USE_OIL"),
+ }
+ }
+}
diff --git a/2020-overdrive/src/consts.rs b/2020-overdrive/src/consts.rs
new file mode 100644
index 0000000..8010eba
--- /dev/null
+++ b/2020-overdrive/src/consts.rs
@@ -0,0 +1,14 @@
+pub const SPEED_0: u16 = 0;
+pub const SPEED_1: u16 = 3;
+pub const SPEED_2: u16 = 6;
+pub const SPEED_3: u16 = 8;
+pub const SPEED_4: u16 = 9;
+pub const SPEED_BOOST: u16 = 15;
+
+pub const BOOST_DURATION: u8 = 5;
+
+pub const MIN_Y: u8 = 1;
+pub const HEIGHT: u8 = 4;
+pub const MAX_Y: u8 = MIN_Y + HEIGHT;
+
+pub const WIDTH: u16 = 1500;
diff --git a/2020-overdrive/src/global_json.rs b/2020-overdrive/src/global_json.rs
new file mode 100644
index 0000000..7ac109a
--- /dev/null
+++ b/2020-overdrive/src/global_json.rs
@@ -0,0 +1,165 @@
+use std::convert::TryInto;
+use std::fs::File;
+use std::io::prelude::*;
+use std::rc::Rc;
+
+use anyhow::Result;
+use serde::{Deserialize, Serialize};
+use serde_json;
+use serde_repr::{Deserialize_repr, Serialize_repr};
+
+use crate::state::*;
+
+pub fn read_initial_state_from_global_json_file(filename: &str) -> Result<GameState> {
+ let mut state = read_state_from_global_json_file(filename)?;
+ state.reset_players_to_start();
+ Ok(state)
+}
+
+pub fn read_state_from_global_json_file(filename: &str) -> Result<GameState> {
+ let mut file = File::open(filename)?;
+ let mut content = String::new();
+ file.read_to_string(&mut content)?;
+ let json_state: JsonState = serde_json::from_str(content.as_ref())?;
+ json_state.to_game_state()
+}
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+pub struct JsonState {
+ // pub current_round: usize,
+ // pub max_rounds: usize,
+ pub players: [JsonPlayer; 2],
+ pub blocks: Vec<JsonBlock>,
+}
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+pub struct JsonPlayer {
+ // id: usize,
+ position: JsonPosition,
+ speed: u16,
+ // state: JsonPlayerState,
+ powerups: Vec<JsonPowerup>,
+ // boosting: bool,
+ boost_counter: u8,
+}
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+pub struct JsonBlock {
+ position: JsonPosition,
+ surface_object: JsonSurfaceObject,
+ // occupied_by_player_id: usize,
+}
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+pub struct JsonPosition {
+ lane: u8,
+ block_number: u16,
+}
+
+// #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+// #[serde(rename_all = "SCREAMING_SNAKE_CASE")]
+// pub enum JsonPlayerState {
+// Ready,
+// Nothing,
+// TurningLeft,
+// TurningRight,
+// Accelerating,
+// Decelarating,
+// PickedUpPowerup,
+// UsedBoost,
+// UsedOil,
+// HitMud,
+// HitOil,
+// Finishing,
+// }
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
+pub enum JsonPowerup {
+ Boost,
+ Oil,
+}
+
+#[derive(Serialize_repr, Deserialize_repr, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+#[repr(u8)]
+pub enum JsonSurfaceObject {
+ Empty = 0,
+ Mud = 1,
+ OilSpill = 2,
+ OilItem = 3,
+ FinishLine = 4,
+ Boost = 5,
+}
+
+impl JsonState {
+ fn to_game_state(&self) -> Result<GameState> {
+ Ok(GameState {
+ status: GameStatus::Continue,
+ players: [self.players[0].to_player()?, self.players[1].to_player()?],
+ muds: Rc::new(
+ self.blocks
+ .iter()
+ .filter(|cell| cell.surface_object == JsonSurfaceObject::Mud)
+ .map(|cell| cell.position.to_position())
+ .collect(),
+ ),
+ oil_spills: Rc::new(
+ self.blocks
+ .iter()
+ .filter(|cell| cell.surface_object == JsonSurfaceObject::OilSpill)
+ .map(|cell| cell.position.to_position())
+ .collect(),
+ ),
+ powerup_oils: Rc::new(
+ self.blocks
+ .iter()
+ .filter(|cell| cell.surface_object == JsonSurfaceObject::OilItem)
+ .map(|cell| cell.position.to_position())
+ .collect(),
+ ),
+ powerup_boosts: Rc::new(
+ self.blocks
+ .iter()
+ .filter(|cell| cell.surface_object == JsonSurfaceObject::Boost)
+ .map(|cell| cell.position.to_position())
+ .collect(),
+ ),
+ })
+ }
+}
+
+impl JsonPlayer {
+ fn to_player(&self) -> Result<Player> {
+ Ok(Player {
+ position: self.position.to_position(),
+ speed: self.speed,
+ boost_remaining: self.boost_counter,
+ oils: self
+ .powerups
+ .iter()
+ .filter(|powerup| **powerup == JsonPowerup::Oil)
+ .count()
+ .try_into()?,
+ boosts: self
+ .powerups
+ .iter()
+ .filter(|powerup| **powerup == JsonPowerup::Boost)
+ .count()
+ .try_into()?,
+ })
+ }
+}
+
+impl JsonPosition {
+ fn to_position(&self) -> Position {
+ Position {
+ x: self.block_number,
+ y: self.lane,
+ }
+ }
+}
diff --git a/2020-overdrive/src/json.rs b/2020-overdrive/src/json.rs
new file mode 100644
index 0000000..82fc9fc
--- /dev/null
+++ b/2020-overdrive/src/json.rs
@@ -0,0 +1,185 @@
+use std::convert::TryInto;
+use std::fs::File;
+use std::io::prelude::*;
+use std::rc::Rc;
+
+use anyhow::Result;
+use serde::{Deserialize, Serialize};
+use serde_json;
+use serde_repr::{Deserialize_repr, Serialize_repr};
+
+use crate::state::*;
+
+pub fn read_state_from_json_file(filename: &str) -> Result<GameState> {
+ let mut file = File::open(filename)?;
+ let mut content = String::new();
+ file.read_to_string(&mut content)?;
+ let json_state: JsonState = serde_json::from_str(content.as_ref())?;
+ json_state.to_game_state()
+}
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+pub struct JsonState {
+ // pub current_round: usize,
+ // pub max_rounds: usize,
+ pub player: JsonPlayer,
+ pub opponent: JsonOpponent,
+ pub world_map: Vec<Vec<JsonWorldMapCell>>,
+}
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+pub struct JsonPlayer {
+ // id: usize,
+ position: JsonPosition,
+ speed: u16,
+ // state: JsonPlayerState,
+ powerups: Vec<JsonPowerup>,
+ // boosting: bool,
+ boost_counter: u8,
+}
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+pub struct JsonOpponent {
+ // id: usize,
+ position: JsonPosition,
+ speed: u16,
+}
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+pub struct JsonWorldMapCell {
+ position: JsonPosition,
+ surface_object: JsonSurfaceObject,
+ // occupied_by_player_id: usize,
+}
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+pub struct JsonPosition {
+ y: u8,
+ x: u16,
+}
+
+// #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+// #[serde(rename_all = "SCREAMING_SNAKE_CASE")]
+// pub enum JsonPlayerState {
+// Ready,
+// Nothing,
+// TurningLeft,
+// TurningRight,
+// Accelerating,
+// Decelarating,
+// PickedUpPowerup,
+// UsedBoost,
+// UsedOil,
+// HitMud,
+// HitOil,
+// Finishing,
+// }
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
+pub enum JsonPowerup {
+ Boost,
+ Oil,
+}
+
+#[derive(Serialize_repr, Deserialize_repr, Clone, Debug, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+#[repr(u8)]
+pub enum JsonSurfaceObject {
+ Empty = 0,
+ Mud = 1,
+ OilSpill = 2,
+ OilItem = 3,
+ FinishLine = 4,
+ Boost = 5,
+}
+
+impl JsonState {
+ fn to_game_state(&self) -> Result<GameState> {
+ Ok(GameState {
+ status: GameStatus::Continue,
+ players: [self.player.to_player()?, self.opponent.to_player()],
+ muds: Rc::new(
+ self.world_map
+ .iter()
+ .flatten()
+ .filter(|cell| cell.surface_object == JsonSurfaceObject::Mud)
+ .map(|cell| cell.position.to_position())
+ .collect(),
+ ),
+ oil_spills: Rc::new(
+ self.world_map
+ .iter()
+ .flatten()
+ .filter(|cell| cell.surface_object == JsonSurfaceObject::OilSpill)
+ .map(|cell| cell.position.to_position())
+ .collect(),
+ ),
+ powerup_oils: Rc::new(
+ self.world_map
+ .iter()
+ .flatten()
+ .filter(|cell| cell.surface_object == JsonSurfaceObject::OilItem)
+ .map(|cell| cell.position.to_position())
+ .collect(),
+ ),
+ powerup_boosts: Rc::new(
+ self.world_map
+ .iter()
+ .flatten()
+ .filter(|cell| cell.surface_object == JsonSurfaceObject::Boost)
+ .map(|cell| cell.position.to_position())
+ .collect(),
+ ),
+ })
+ }
+}
+
+impl JsonPlayer {
+ fn to_player(&self) -> Result<Player> {
+ Ok(Player {
+ position: self.position.to_position(),
+ speed: self.speed,
+ boost_remaining: self.boost_counter,
+ oils: self
+ .powerups
+ .iter()
+ .filter(|powerup| **powerup == JsonPowerup::Oil)
+ .count()
+ .try_into()?,
+ boosts: self
+ .powerups
+ .iter()
+ .filter(|powerup| **powerup == JsonPowerup::Boost)
+ .count()
+ .try_into()?,
+ })
+ }
+}
+
+impl JsonOpponent {
+ // TODO: Track opponent powerups from round to round?
+ fn to_player(&self) -> Player {
+ Player {
+ position: self.position.to_position(),
+ speed: self.speed,
+ boost_remaining: 0,
+ oils: 0,
+ boosts: 0,
+ }
+ }
+}
+
+impl JsonPosition {
+ fn to_position(&self) -> Position {
+ Position {
+ x: self.x,
+ y: self.y,
+ }
+ }
+}
diff --git a/2020-overdrive/src/lib.rs b/2020-overdrive/src/lib.rs
new file mode 100644
index 0000000..c36a817
--- /dev/null
+++ b/2020-overdrive/src/lib.rs
@@ -0,0 +1,147 @@
+pub mod command;
+pub mod consts;
+pub mod global_json;
+pub mod json;
+pub mod state;
+
+use command::*;
+use consts::*;
+use pathfinding::prelude::*;
+use state::*;
+use std::cmp::Ordering;
+
+pub fn choose_command(round: usize, state: &GameState) -> Command {
+ if round <= 100 {
+ choose_command_with_looking_forward_heuristic(state)
+ } else {
+ choose_command_with_astar(state)
+ }
+}
+
+#[derive(Debug, Clone)]
+struct HeuristicLookaheadState {
+ moves: Vec<Command>,
+ events: GameStateUpdateEvents,
+ current_state: GameState,
+}
+
+fn choose_command_with_looking_forward_heuristic(state: &GameState) -> Command {
+ let depth = 3;
+ let mut states = vec![HeuristicLookaheadState {
+ moves: Vec::new(),
+ events: GameStateUpdateEvents::default(),
+ current_state: state.clone(),
+ }];
+
+ for _ in 0..depth {
+ states = states
+ .into_iter()
+ .flat_map(move |state| {
+ state
+ .current_state
+ .good_moves(0)
+ .into_iter()
+ .map(move |player_move| {
+ let mut state = state.clone();
+ state.moves.push(player_move);
+ state
+ .current_state
+ .update([player_move, Command::Accelerate], &mut state.events);
+ state
+ })
+ })
+ .collect();
+ }
+
+ states
+ .into_iter()
+ .max_by(|a, b| compare_events(&a.events, &b.events))
+ .unwrap()
+ .moves
+ .into_iter()
+ .next()
+ .unwrap()
+}
+
+fn compare_states(a: &GameState, b: &GameState) -> Ordering {
+ if a.status == GameStatus::PlayerOneWon && b.status == GameStatus::PlayerOneWon {
+ a.players[0].speed.cmp(&b.players[0].speed)
+ } else if a.status == GameStatus::PlayerOneWon {
+ Ordering::Greater
+ } else if b.status == GameStatus::PlayerOneWon {
+ Ordering::Less
+ } else {
+ let weighted_position_a = a.players[0].position.x + a.players[0].boosts * 2;
+ let weighted_position_b = b.players[0].position.x + b.players[0].boosts * 2;
+
+ weighted_position_a
+ .cmp(&weighted_position_b)
+ .then(a.players[0].speed.cmp(&b.players[0].speed))
+ .then(a.players[0].position.x.cmp(&b.players[0].position.x))
+ .then(a.players[0].boosts.cmp(&b.players[0].boosts))
+ }
+}
+
+fn compare_events(a: &GameStateUpdateEvents, b: &GameStateUpdateEvents) -> Ordering {
+ let a = &a.players[0];
+ let b = &b.players[0];
+ a.boosts_collected
+ .cmp(&b.boosts_collected)
+ .then(a.boosts_maintained.cmp(&b.boosts_maintained))
+ .then(a.distance_travelled.cmp(&b.distance_travelled))
+ .then(a.mud_hit.cmp(&b.mud_hit).reverse())
+ .then(a.boosts_used.cmp(&b.boosts_used).reverse())
+}
+
+fn choose_command_with_astar(state: &GameState) -> Command {
+ // TODO: Find all shortest paths, choose the one that has the
+ // highest end speed, or otherwise wins
+ shortest_path_first_command(state).unwrap_or(Command::Accelerate)
+}
+
+fn shortest_path_first_command(initial_state: &GameState) -> Option<Command> {
+ let shortest_path_states = astar(
+ initial_state,
+ |state| {
+ state
+ .good_moves(0)
+ .into_iter()
+ .filter(|player_move| *player_move != Command::UseOil)
+ .map(|player_move| {
+ let mut state = state.clone();
+ state.update(
+ [player_move, Command::Decelerate],
+ &mut GameStateUpdateEvents::default(),
+ );
+ (state, 1)
+ })
+ .collect::<Vec<_>>()
+ },
+ |state| (WIDTH - state.players[0].position.x) / SPEED_BOOST,
+ |state| state.status != GameStatus::Continue,
+ )
+ .unwrap();
+
+ shortest_path_states
+ .0
+ .iter()
+ .zip(shortest_path_states.0.iter().skip(1))
+ .map(|(state, next)| {
+ let player_move = state
+ .good_moves(0)
+ .into_iter()
+ .filter(|player_move| *player_move != Command::UseOil)
+ .find(|player_move| {
+ let mut state = state.clone();
+ state.update(
+ [*player_move, Command::Decelerate],
+ &mut GameStateUpdateEvents::default(),
+ );
+ state == *next
+ })
+ .unwrap();
+
+ player_move
+ })
+ .next()
+}
diff --git a/2020-overdrive/src/main.rs b/2020-overdrive/src/main.rs
new file mode 100644
index 0000000..c5f7857
--- /dev/null
+++ b/2020-overdrive/src/main.rs
@@ -0,0 +1,24 @@
+use std::io::prelude::*;
+use std::io::stdin;
+
+use vroomba::command::Command;
+use vroomba::*;
+
+fn main() {
+ for line in stdin().lock().lines() {
+ let round_number = line
+ .expect("Failed to read line from stdin: {}")
+ .parse::<usize>()
+ .expect("Round number was not an unsigned integer: {}");
+ let command =
+ match json::read_state_from_json_file(&format!("./rounds/{}/state.json", round_number))
+ {
+ Ok(state) => choose_command(round_number, &state),
+ Err(e) => {
+ eprintln!("WARN: State file could not be parsed: {}", e);
+ Command::Nothing
+ }
+ };
+ println!("C;{};{}", round_number, command);
+ }
+}
diff --git a/2020-overdrive/src/state.rs b/2020-overdrive/src/state.rs
new file mode 100644
index 0000000..acbce80
--- /dev/null
+++ b/2020-overdrive/src/state.rs
@@ -0,0 +1,355 @@
+use crate::command::Command;
+use crate::consts::*;
+use std::collections::BTreeSet;
+use std::ops::Bound::{Excluded, Included};
+use std::rc::Rc;
+
+#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
+pub enum GameStatus {
+ Continue,
+ PlayerOneWon,
+ PlayerTwoWon,
+ Draw, // Until I add score I guess
+}
+
+// TODO: Maintain sorted vecs for these BTrees? Do the range counts
+// with binary searches to find indices only.
+#[derive(Debug, Clone, Hash, PartialEq, Eq)]
+pub struct GameState {
+ pub status: GameStatus,
+ pub players: [Player; 2],
+ pub muds: Rc<BTreeSet<Position>>,
+ pub oil_spills: Rc<BTreeSet<Position>>,
+ pub powerup_oils: Rc<BTreeSet<Position>>,
+ pub powerup_boosts: Rc<BTreeSet<Position>>,
+}
+
+#[derive(Debug, Clone, Hash, PartialEq, Eq)]
+pub struct Player {
+ pub position: Position,
+ pub speed: u16,
+ pub boost_remaining: u8,
+ pub oils: u16,
+ pub boosts: u16,
+}
+
+#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, PartialOrd, Ord)]
+pub struct Position {
+ pub y: u8,
+ pub x: u16,
+}
+
+#[derive(Debug, Clone, Default)]
+pub struct GameStateUpdateEvents {
+ pub players: [GameStatePlayerUpdateEvents; 2],
+}
+#[derive(Debug, Clone, Default)]
+pub struct GameStatePlayerUpdateEvents {
+ pub boosts_used: u16,
+ pub boosts_collected: u16,
+ pub boosts_maintained: u8,
+ pub mud_hit: u16,
+ pub oil_collected: u16,
+ pub distance_travelled: u16,
+}
+
+impl GameState {
+ pub fn update(&mut self, commands: [Command; 2], events: &mut GameStateUpdateEvents) {
+ if self.status != GameStatus::Continue {
+ return;
+ }
+
+ let next_positions = [
+ self.do_command(0, &commands[0], &mut events.players[0]),
+ self.do_command(1, &commands[1], &mut events.players[1]),
+ ];
+ let next_positions = self.update_player_collisions(next_positions, events);
+ self.update_player_travel(next_positions, events);
+
+ self.status = if self.players[0].finished() && self.players[1].finished() {
+ if self.players[0].speed > self.players[1].speed {
+ GameStatus::PlayerOneWon
+ } else if self.players[0].speed < self.players[1].speed {
+ GameStatus::PlayerTwoWon
+ } else {
+ GameStatus::Draw
+ }
+ } else if self.players[0].finished() {
+ GameStatus::PlayerOneWon
+ } else if self.players[1].finished() {
+ GameStatus::PlayerTwoWon
+ } else {
+ GameStatus::Continue
+ };
+ }
+
+ pub fn reset_players_to_start(&mut self) {
+ self.players[0].position = Position { x: 1, y: 1 };
+ self.players[1].position = Position { x: 1, y: 4 };
+ for player in &mut self.players {
+ player.speed = 5;
+ player.boost_remaining = 0;
+ player.oils = 0;
+ player.boosts = 0;
+ }
+ }
+
+ fn do_command(
+ &mut self,
+ player_index: usize,
+ command: &Command,
+ events: &mut GameStatePlayerUpdateEvents,
+ ) -> Position {
+ use Command::*;
+ self.players[player_index].tick_boost();
+ let mut next_y = self.players[player_index].position.y;
+
+ match command {
+ Nothing => {}
+ Accelerate => self.players[player_index].accelerate(),
+ Decelerate => self.players[player_index].decelerate(),
+ TurnLeft => next_y = next_y.saturating_sub(1).max(MIN_Y),
+ TurnRight => next_y = next_y.saturating_add(1).min(MAX_Y),
+ UseBoost => {
+ events.boosts_used += 1;
+ self.players[player_index].boost();
+ }
+ UseOil => {
+ debug_assert!(self.players[player_index].oils > 0);
+ self.players[player_index].oils = self.players[player_index].oils.saturating_sub(1);
+ let player_position = self.players[player_index].position;
+ let mut oil_spills = (*self.oil_spills).clone();
+ oil_spills.insert(Position {
+ x: player_position.x.saturating_sub(1),
+ y: player_position.y,
+ });
+ self.oil_spills = Rc::new(oil_spills);
+ }
+ }
+
+ let turning = match command {
+ TurnLeft | TurnRight => true,
+ _ => false,
+ };
+
+ let next_x = self.players[player_index].next_position_x(turning);
+ Position {
+ x: next_x,
+ y: next_y,
+ }
+ }
+
+ fn update_player_collisions(
+ &mut self,
+ next_positions: [Position; 2],
+ _events: &mut GameStateUpdateEvents,
+ ) -> [Position; 2] {
+ let same_lanes_before = self.players[0].position.y == self.players[1].position.y;
+ let same_lanes_after = next_positions[0].y == next_positions[1].y;
+ let first_passing_second = self.players[0].position.x < self.players[1].position.x
+ && next_positions[0].x >= next_positions[1].x;
+ let second_passing_first = self.players[1].position.x < self.players[0].position.x
+ && next_positions[1].x >= next_positions[0].x;
+ let same_x_after = next_positions[0].x == next_positions[1].x;
+
+ if same_lanes_before && same_lanes_after && first_passing_second {
+ [
+ Position {
+ y: next_positions[0].y,
+ x: next_positions[1].x.saturating_sub(1),
+ },
+ next_positions[1],
+ ]
+ } else if same_lanes_before && same_lanes_after && second_passing_first {
+ [
+ next_positions[0],
+ Position {
+ y: next_positions[1].y,
+ x: next_positions[0].x.saturating_sub(1),
+ },
+ ]
+ } else if same_lanes_after && same_x_after {
+ [
+ Position {
+ y: self.players[0].position.y,
+ x: self.players[0].next_position_x(true),
+ },
+ Position {
+ y: self.players[1].position.y,
+ x: self.players[1].next_position_x(true),
+ },
+ ]
+ } else {
+ next_positions
+ }
+ }
+
+ fn update_player_travel(
+ &mut self,
+ next_positions: [Position; 2],
+ events: &mut GameStateUpdateEvents,
+ ) {
+ for (i, (player, next_position)) in self
+ .players
+ .iter_mut()
+ .zip(next_positions.iter())
+ .enumerate()
+ {
+ player.move_along(
+ *next_position,
+ &self.muds,
+ &self.oil_spills,
+ &self.powerup_oils,
+ &self.powerup_boosts,
+ &mut events.players[i],
+ );
+ }
+ }
+
+ pub fn valid_moves(&self, player_index: usize) -> Vec<Command> {
+ let player = &self.players[player_index];
+ let mut result = Vec::with_capacity(7);
+ result.push(Command::Nothing);
+ result.push(Command::Accelerate);
+ if player.speed > SPEED_0 {
+ result.push(Command::Decelerate);
+ }
+ if player.position.y > MIN_Y {
+ result.push(Command::TurnLeft);
+ }
+ if player.position.y < MAX_Y - 1 {
+ result.push(Command::TurnRight);
+ }
+ if player.boosts > 0 {
+ result.push(Command::UseBoost);
+ }
+ if player.oils > 0 {
+ result.push(Command::UseOil);
+ }
+ result
+ }
+
+ pub fn good_moves(&self, player_index: usize) -> Vec<Command> {
+ let player = &self.players[player_index];
+ let mut result = Vec::with_capacity(5);
+ result.push(Command::Accelerate);
+ if player.position.y > MIN_Y {
+ result.push(Command::TurnLeft);
+ }
+ if player.position.y < MAX_Y - 1 {
+ result.push(Command::TurnRight);
+ }
+ if player.boosts > 0 {
+ result.push(Command::UseBoost);
+ }
+ if player.oils > 0 {
+ result.push(Command::UseOil);
+ }
+ result
+ }
+}
+
+impl Player {
+ fn accelerate(&mut self) {
+ self.speed = match self.speed {
+ i if i < SPEED_1 => SPEED_1,
+ i if i < SPEED_2 => SPEED_2,
+ i if i < SPEED_3 => SPEED_3,
+ SPEED_BOOST => SPEED_BOOST,
+ _ => SPEED_4,
+ };
+ }
+
+ fn decelerate(&mut self) {
+ self.speed = match self.speed {
+ i if i <= SPEED_1 => SPEED_0,
+ i if i <= SPEED_2 => SPEED_1,
+ i if i <= SPEED_3 => SPEED_2,
+ i if i <= SPEED_4 => SPEED_3,
+ _ => SPEED_4,
+ };
+ self.boost_remaining = 0;
+ }
+
+ fn decelerate_from_obstacle(&mut self) {
+ self.speed = match self.speed {
+ i if i <= SPEED_2 => SPEED_1,
+ i if i <= SPEED_3 => SPEED_2,
+ i if i <= SPEED_4 => SPEED_3,
+ _ => SPEED_4,
+ };
+ self.boost_remaining = 0;
+ }
+
+ fn boost(&mut self) {
+ debug_assert!(self.boosts > 0);
+ self.speed = SPEED_BOOST;
+ self.boost_remaining = BOOST_DURATION;
+ self.boosts = self.boosts.saturating_sub(1);
+ }
+
+ fn tick_boost(&mut self) {
+ self.boost_remaining = self.boost_remaining.saturating_sub(1);
+ if self.boost_remaining == 0 && self.speed == SPEED_BOOST {
+ self.speed = SPEED_4;
+ }
+ }
+
+ fn next_position_x(&mut self, turning: bool) -> u16 {
+ if turning {
+ self.position.x.saturating_add(self.speed.saturating_sub(1))
+ } else {
+ self.position.x.saturating_add(self.speed)
+ }
+ }
+
+ fn move_along(
+ &mut self,
+ next_position: Position,
+ muds: &BTreeSet<Position>,
+ oil_spills: &BTreeSet<Position>,
+ powerup_oils: &BTreeSet<Position>,
+ powerup_boosts: &BTreeSet<Position>,
+ events: &mut GameStatePlayerUpdateEvents,
+ ) {
+ let range = (
+ Included(Position {
+ y: next_position.y,
+ x: self.position.x.saturating_add(1),
+ }),
+ Excluded(Position {
+ y: next_position.y,
+ x: next_position.x.saturating_add(1),
+ }),
+ );
+
+ let mud_hit = muds
+ .range(range)
+ .count()
+ .saturating_add(oil_spills.range(range).count());
+ for _ in 0..mud_hit {
+ self.decelerate_from_obstacle();
+ }
+
+ let oil_collected = powerup_oils.range(range).count() as u16;
+ self.oils = self.oils.saturating_add(oil_collected);
+ let boosts_collected = powerup_boosts.range(range).count() as u16;
+ self.boosts = self.boosts.saturating_add(boosts_collected);
+
+ events.mud_hit = events.mud_hit.saturating_add(mud_hit as u16);
+ events.boosts_collected = events.boosts_collected.saturating_add(boosts_collected);
+ events.oil_collected = events.oil_collected.saturating_add(oil_collected);
+ events.distance_travelled = events
+ .distance_travelled
+ .saturating_add(next_position.x.saturating_sub(self.position.x));
+ if self.speed == SPEED_BOOST {
+ events.boosts_maintained = events.boosts_maintained.saturating_add(1);
+ }
+
+ self.position = next_position;
+ }
+
+ fn finished(&self) -> bool {
+ self.position.x >= WIDTH
+ }
+}
diff --git a/2020-overdrive/tests/import-replay.sh b/2020-overdrive/tests/import-replay.sh
new file mode 100755
index 0000000..d0130b1
--- /dev/null
+++ b/2020-overdrive/tests/import-replay.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+set -e
+
+REPLAY_FOLDER=$1
+OUTPUT_FOLDER=$2
+
+mkdir -p $OUTPUT_FOLDER
+
+for round_folder in $REPLAY_FOLDER/Round*; do
+ round_name=`basename "$round_folder"`
+ mkdir -p "$OUTPUT_FOLDER/$round_name"
+
+ player_folders=( "$round_folder"/* )
+ player_folder=${player_folders[0]}
+ opponent_folder=${player_folders[1]}
+
+ cp "$round_foler/GlobalState.json" "$OUTPUT_FOLDER/$round_name/GlobalState.json"
+ cp "$player_folder/JsonMap.json" "$OUTPUT_FOLDER/$round_name/JsonMap.json"
+ head -n 1 "$player_folder/PlayerCommand.txt" > "$OUTPUT_FOLDER/$round_name/PlayerCommand.txt"
+ head -n 1 "$opponent_folder/PlayerCommand.txt" > "$OUTPUT_FOLDER/$round_name/OpponentCommand.txt"
+done
diff --git a/2020-overdrive/tests/live_comparison.rs b/2020-overdrive/tests/live_comparison.rs
new file mode 100644
index 0000000..3e29069
--- /dev/null
+++ b/2020-overdrive/tests/live_comparison.rs
@@ -0,0 +1,134 @@
+extern crate vroomba;
+
+use vroomba::command::Command;
+use vroomba::json;
+use vroomba::state::{GameState, GameStateUpdateEvents};
+
+use std::fs::File;
+use std::io::prelude::*;
+use std::path::Path;
+
+#[test]
+fn it_successfully_simulates_replay() {
+ test_from_replay(&Path::new("tests/v1-normal-match/"));
+}
+
+fn test_from_replay(replay_folder: &Path) {
+ let length = replay_folder.read_dir().unwrap().count() - 1;
+
+ let mut state = json::read_state_from_json_file(&format!(
+ "{}/Round 001/JsonMap.json",
+ replay_folder.display()
+ ))
+ .unwrap();
+
+ println!("State 1: {:?}", state);
+
+ for i in 1..=length {
+ let player = read_player_command(&format!(
+ "{}/Round {:03}/PlayerCommand.txt",
+ replay_folder.display(),
+ i
+ ));
+ let opponent = read_player_command(&format!(
+ "{}/Round {:03}/OpponentCommand.txt",
+ replay_folder.display(),
+ i
+ ));
+ let expected_state = json::read_state_from_json_file(&format!(
+ "{}/Round {:03}/JsonMap.json",
+ replay_folder.display(),
+ i + 1
+ ))
+ .unwrap();
+
+ // We don't know how many they actually have from the state
+ // files.
+ state.players[1].boosts = 1;
+ state.players[1].oils = 1;
+
+ println!("Player 1: {}, Player 2: {}", player, opponent);
+ state.update([player, opponent], &mut GameStateUpdateEvents::default());
+
+ println!("State {}: {:?}", i + 1, state);
+ assert_eq!(
+ state.status,
+ expected_state.status,
+ "\nFailed on state {}\n",
+ i + 1
+ );
+ player_assertions(&state, &expected_state, 0, true, i + 1);
+
+ // TODO: We're only reading the state for player 1, so we can't say what obstacles player 2 may be hitting. Maybe read the full map of obstacles + powerups into the game state at the beginning? There's also the case of boost_remaining ofr player 2.
+ // player_assertions(&state, &expected_state, 1, false, i + 1);
+
+ // We can do great simulations into the future, but we need to
+ // be told where the future mud is.
+ state = expected_state;
+ }
+}
+
+fn read_player_command(filename: &str) -> Command {
+ let mut file = File::open(filename).unwrap();
+ let mut content = String::new();
+ file.read_to_string(&mut content).unwrap();
+ match content.trim() {
+ "Command: ACCELERATE" => Command::Accelerate,
+ "Command: NOTHING" => Command::Nothing,
+ "Command: DECELERATE" => Command::Decelerate,
+ "Command: TURN_LEFT" => Command::TurnLeft,
+ "Command: TURN_RIGHT" => Command::TurnRight,
+ "Command: USE_BOOST" => Command::UseBoost,
+ "Command: USE_OIL" => Command::UseOil,
+ other => panic!("Unexpected command: {}", other),
+ }
+}
+
+fn player_assertions(
+ actual: &GameState,
+ expected: &GameState,
+ player_index: usize,
+ compare_powerups: bool,
+ round: usize,
+) {
+ let actual = &actual.players[player_index];
+ let expected = &expected.players[player_index];
+
+ assert_eq!(
+ actual.position,
+ expected.position,
+ "\nFailed on state {}, player {} position\n",
+ round,
+ player_index + 1
+ );
+ assert_eq!(
+ actual.speed,
+ expected.speed,
+ "\nFailed on state {}, player {} speed\n",
+ round,
+ player_index + 1
+ );
+ if compare_powerups {
+ assert_eq!(
+ actual.boost_remaining,
+ expected.boost_remaining,
+ "\nFailed on state {}, player {} position,\n",
+ round,
+ player_index + 1
+ );
+ assert_eq!(
+ actual.oils,
+ expected.oils,
+ "\nFailed on state {}, player {} oils,\n",
+ round,
+ player_index + 1
+ );
+ assert_eq!(
+ actual.boosts,
+ expected.boosts,
+ "\nFailed on state {}, player {} boosts,\n",
+ round,
+ player_index + 1
+ );
+ }
+}
diff --git a/2020-overdrive/tests/v1-normal-match/Round 001/JsonMap.json b/2020-overdrive/tests/v1-normal-match/Round 001/JsonMap.json
new file mode 100644
index 0000000..2cf435d
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 001/JsonMap.json
@@ -0,0 +1,706 @@
+{
+ "currentRound":1,
+ "maxRounds":600,
+ "player":{
+ "id":1,
+ "position":{
+ "y":1,
+ "x":1
+ },
+ "speed":5,
+ "state":"READY",
+ "powerups":[],
+ "boosting":false,
+ "boostCounter":0
+ },
+ "opponent":{
+ "id":2,
+ "position":{
+ "y":4,
+ "x":1
+ },
+ "speed":5
+ },
+ "worldMap":[
+ [
+ {
+ "position":{
+ "y":1,
+ "x":1
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":1
+ },
+ {
+ "position":{
+ "y":1,
+ "x":2
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":3
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":4
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":5
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":6
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":7
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":8
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":9
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":10
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":11
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":12
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":13
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":14
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":15
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":16
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":17
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":18
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":19
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":20
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":21
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":2,
+ "x":1
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":2
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":3
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":4
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":5
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":6
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":7
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":8
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":9
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":10
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":11
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":12
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":13
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":14
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":15
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":16
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":17
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":18
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":19
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":20
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":21
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":3,
+ "x":1
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":2
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":3
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":4
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":5
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":6
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":7
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":8
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":9
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":10
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":11
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":12
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":13
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":14
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":15
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":16
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":17
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":18
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":19
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":20
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":21
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":4,
+ "x":1
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":2
+ },
+ {
+ "position":{
+ "y":4,
+ "x":2
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":3
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":4
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":5
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":6
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":7
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":8
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":9
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":10
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":11
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":12
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":13
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":14
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":15
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":16
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":17
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":18
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":19
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":20
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":21
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ]
+ ]
+} \ No newline at end of file
diff --git a/2020-overdrive/tests/v1-normal-match/Round 001/OpponentCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 001/OpponentCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 001/OpponentCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 001/PlayerCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 001/PlayerCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 001/PlayerCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 002/JsonMap.json b/2020-overdrive/tests/v1-normal-match/Round 002/JsonMap.json
new file mode 100644
index 0000000..2315b12
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 002/JsonMap.json
@@ -0,0 +1,866 @@
+{
+ "currentRound":2,
+ "maxRounds":600,
+ "player":{
+ "id":1,
+ "position":{
+ "y":1,
+ "x":7
+ },
+ "speed":6,
+ "state":"ACCELERATING",
+ "powerups":[],
+ "boosting":false,
+ "boostCounter":0
+ },
+ "opponent":{
+ "id":2,
+ "position":{
+ "y":4,
+ "x":7
+ },
+ "speed":6
+ },
+ "worldMap":[
+ [
+ {
+ "position":{
+ "y":1,
+ "x":2
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":3
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":4
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":5
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":6
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":7
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":1
+ },
+ {
+ "position":{
+ "y":1,
+ "x":8
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":9
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":10
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":11
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":12
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":13
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":14
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":15
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":16
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":17
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":18
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":19
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":20
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":21
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":22
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":23
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":24
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":25
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":26
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":27
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":2,
+ "x":2
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":3
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":4
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":5
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":6
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":7
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":8
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":9
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":10
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":11
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":12
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":13
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":14
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":15
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":16
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":17
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":18
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":19
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":20
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":21
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":22
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":23
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":24
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":25
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":26
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":27
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":3,
+ "x":2
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":3
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":4
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":5
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":6
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":7
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":8
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":9
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":10
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":11
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":12
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":13
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":14
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":15
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":16
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":17
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":18
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":19
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":20
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":21
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":22
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":23
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":24
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":25
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":26
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":27
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":4,
+ "x":2
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":3
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":4
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":5
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":6
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":7
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":2
+ },
+ {
+ "position":{
+ "y":4,
+ "x":8
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":9
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":10
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":11
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":12
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":13
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":14
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":15
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":16
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":17
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":18
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":19
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":20
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":21
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":22
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":23
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":24
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":25
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":26
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":27
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ]
+ ]
+} \ No newline at end of file
diff --git a/2020-overdrive/tests/v1-normal-match/Round 002/OpponentCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 002/OpponentCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 002/OpponentCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 002/PlayerCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 002/PlayerCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 002/PlayerCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 003/JsonMap.json b/2020-overdrive/tests/v1-normal-match/Round 003/JsonMap.json
new file mode 100644
index 0000000..d764c85
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 003/JsonMap.json
@@ -0,0 +1,866 @@
+{
+ "currentRound":3,
+ "maxRounds":600,
+ "player":{
+ "id":1,
+ "position":{
+ "y":1,
+ "x":15
+ },
+ "speed":3,
+ "state":"HIT_MUD",
+ "powerups":[],
+ "boosting":false,
+ "boostCounter":0
+ },
+ "opponent":{
+ "id":2,
+ "position":{
+ "y":4,
+ "x":15
+ },
+ "speed":3
+ },
+ "worldMap":[
+ [
+ {
+ "position":{
+ "y":1,
+ "x":10
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":11
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":12
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":13
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":14
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":15
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":1
+ },
+ {
+ "position":{
+ "y":1,
+ "x":16
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":17
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":18
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":19
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":20
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":21
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":22
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":23
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":24
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":25
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":26
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":27
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":28
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":29
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":30
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":31
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":32
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":33
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":34
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":35
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":2,
+ "x":10
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":11
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":12
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":13
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":14
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":15
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":16
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":17
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":18
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":19
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":20
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":21
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":22
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":23
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":24
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":25
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":26
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":27
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":28
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":29
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":30
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":31
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":32
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":33
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":34
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":35
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":3,
+ "x":10
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":11
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":12
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":13
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":14
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":15
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":16
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":17
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":18
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":19
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":20
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":21
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":22
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":23
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":24
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":25
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":26
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":27
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":28
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":29
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":30
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":31
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":32
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":33
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":34
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":35
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":4,
+ "x":10
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":11
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":12
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":13
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":14
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":15
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":2
+ },
+ {
+ "position":{
+ "y":4,
+ "x":16
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":17
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":18
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":19
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":20
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":21
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":22
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":23
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":24
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":25
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":26
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":27
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":28
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":29
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":30
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":31
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":32
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":33
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":34
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":35
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ]
+ ]
+} \ No newline at end of file
diff --git a/2020-overdrive/tests/v1-normal-match/Round 003/OpponentCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 003/OpponentCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 003/OpponentCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 003/PlayerCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 003/PlayerCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 003/PlayerCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 004/JsonMap.json b/2020-overdrive/tests/v1-normal-match/Round 004/JsonMap.json
new file mode 100644
index 0000000..5f30eae
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 004/JsonMap.json
@@ -0,0 +1,866 @@
+{
+ "currentRound":4,
+ "maxRounds":600,
+ "player":{
+ "id":1,
+ "position":{
+ "y":1,
+ "x":21
+ },
+ "speed":3,
+ "state":"HIT_MUD",
+ "powerups":[],
+ "boosting":false,
+ "boostCounter":0
+ },
+ "opponent":{
+ "id":2,
+ "position":{
+ "y":4,
+ "x":21
+ },
+ "speed":3
+ },
+ "worldMap":[
+ [
+ {
+ "position":{
+ "y":1,
+ "x":16
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":17
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":18
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":19
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":20
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":21
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":1
+ },
+ {
+ "position":{
+ "y":1,
+ "x":22
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":23
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":24
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":25
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":26
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":27
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":28
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":29
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":30
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":31
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":32
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":33
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":34
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":35
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":36
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":37
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":38
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":39
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":40
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":41
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":2,
+ "x":16
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":17
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":18
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":19
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":20
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":21
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":22
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":23
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":24
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":25
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":26
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":27
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":28
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":29
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":30
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":31
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":32
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":33
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":34
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":35
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":36
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":37
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":38
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":39
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":40
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":41
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":3,
+ "x":16
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":17
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":18
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":19
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":20
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":21
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":22
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":23
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":24
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":25
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":26
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":27
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":28
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":29
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":30
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":31
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":32
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":33
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":34
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":35
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":36
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":37
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":38
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":39
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":40
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":41
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":4,
+ "x":16
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":17
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":18
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":19
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":20
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":21
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":2
+ },
+ {
+ "position":{
+ "y":4,
+ "x":22
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":23
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":24
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":25
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":26
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":27
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":28
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":29
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":30
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":31
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":32
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":33
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":34
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":35
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":36
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":37
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":38
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":39
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":40
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":41
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ]
+ ]
+} \ No newline at end of file
diff --git a/2020-overdrive/tests/v1-normal-match/Round 004/OpponentCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 004/OpponentCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 004/OpponentCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 004/PlayerCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 004/PlayerCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 004/PlayerCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 005/JsonMap.json b/2020-overdrive/tests/v1-normal-match/Round 005/JsonMap.json
new file mode 100644
index 0000000..437ead0
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 005/JsonMap.json
@@ -0,0 +1,866 @@
+{
+ "currentRound":5,
+ "maxRounds":600,
+ "player":{
+ "id":1,
+ "position":{
+ "y":1,
+ "x":27
+ },
+ "speed":6,
+ "state":"ACCELERATING",
+ "powerups":[],
+ "boosting":false,
+ "boostCounter":0
+ },
+ "opponent":{
+ "id":2,
+ "position":{
+ "y":4,
+ "x":27
+ },
+ "speed":6
+ },
+ "worldMap":[
+ [
+ {
+ "position":{
+ "y":1,
+ "x":22
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":23
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":24
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":25
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":26
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":27
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":1
+ },
+ {
+ "position":{
+ "y":1,
+ "x":28
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":29
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":30
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":31
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":32
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":33
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":34
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":35
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":36
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":37
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":38
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":39
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":40
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":41
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":42
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":43
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":44
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":45
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":46
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":47
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":2,
+ "x":22
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":23
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":24
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":25
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":26
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":27
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":28
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":29
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":30
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":31
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":32
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":33
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":34
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":35
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":36
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":37
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":38
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":39
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":40
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":41
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":42
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":43
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":44
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":45
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":46
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":47
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":3,
+ "x":22
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":23
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":24
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":25
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":26
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":27
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":28
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":29
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":30
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":31
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":32
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":33
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":34
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":35
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":36
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":37
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":38
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":39
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":40
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":41
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":42
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":43
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":44
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":45
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":46
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":47
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":4,
+ "x":22
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":23
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":24
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":25
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":26
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":27
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":2
+ },
+ {
+ "position":{
+ "y":4,
+ "x":28
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":29
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":30
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":31
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":32
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":33
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":34
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":35
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":36
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":37
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":38
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":39
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":40
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":41
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":42
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":43
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":44
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":45
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":46
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":47
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ]
+ ]
+} \ No newline at end of file
diff --git a/2020-overdrive/tests/v1-normal-match/Round 005/OpponentCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 005/OpponentCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 005/OpponentCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 005/PlayerCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 005/PlayerCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 005/PlayerCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 006/JsonMap.json b/2020-overdrive/tests/v1-normal-match/Round 006/JsonMap.json
new file mode 100644
index 0000000..083da96
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 006/JsonMap.json
@@ -0,0 +1,866 @@
+{
+ "currentRound":6,
+ "maxRounds":600,
+ "player":{
+ "id":1,
+ "position":{
+ "y":1,
+ "x":35
+ },
+ "speed":3,
+ "state":"HIT_MUD",
+ "powerups":[],
+ "boosting":false,
+ "boostCounter":0
+ },
+ "opponent":{
+ "id":2,
+ "position":{
+ "y":4,
+ "x":35
+ },
+ "speed":8
+ },
+ "worldMap":[
+ [
+ {
+ "position":{
+ "y":1,
+ "x":30
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":31
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":32
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":33
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":34
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":35
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":1
+ },
+ {
+ "position":{
+ "y":1,
+ "x":36
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":37
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":38
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":39
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":40
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":41
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":42
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":43
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":44
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":45
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":46
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":47
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":48
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":49
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":50
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":51
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":52
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":53
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":54
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":55
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":2,
+ "x":30
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":31
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":32
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":33
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":34
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":35
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":36
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":37
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":38
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":39
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":40
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":41
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":42
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":43
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":44
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":45
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":46
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":47
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":48
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":49
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":50
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":51
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":52
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":53
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":54
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":55
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":3,
+ "x":30
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":31
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":32
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":33
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":34
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":35
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":36
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":37
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":38
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":39
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":40
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":41
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":42
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":43
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":44
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":45
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":46
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":47
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":48
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":49
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":50
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":51
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":52
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":53
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":54
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":55
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":4,
+ "x":30
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":31
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":32
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":33
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":34
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":35
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":2
+ },
+ {
+ "position":{
+ "y":4,
+ "x":36
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":37
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":38
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":39
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":40
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":41
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":42
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":43
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":44
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":45
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":46
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":47
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":48
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":49
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":50
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":51
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":52
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":53
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":54
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":55
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ]
+ ]
+} \ No newline at end of file
diff --git a/2020-overdrive/tests/v1-normal-match/Round 006/OpponentCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 006/OpponentCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 006/OpponentCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 006/PlayerCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 006/PlayerCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 006/PlayerCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 007/JsonMap.json b/2020-overdrive/tests/v1-normal-match/Round 007/JsonMap.json
new file mode 100644
index 0000000..278e6ba
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 007/JsonMap.json
@@ -0,0 +1,866 @@
+{
+ "currentRound":7,
+ "maxRounds":600,
+ "player":{
+ "id":1,
+ "position":{
+ "y":1,
+ "x":41
+ },
+ "speed":3,
+ "state":"HIT_MUD",
+ "powerups":[],
+ "boosting":false,
+ "boostCounter":0
+ },
+ "opponent":{
+ "id":2,
+ "position":{
+ "y":4,
+ "x":44
+ },
+ "speed":8
+ },
+ "worldMap":[
+ [
+ {
+ "position":{
+ "y":1,
+ "x":36
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":37
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":38
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":39
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":40
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":41
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":1
+ },
+ {
+ "position":{
+ "y":1,
+ "x":42
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":43
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":44
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":45
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":46
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":47
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":48
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":49
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":50
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":51
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":52
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":53
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":54
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":55
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":56
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":57
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":58
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":59
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":60
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":61
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":2,
+ "x":36
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":37
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":38
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":39
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":40
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":41
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":42
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":43
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":44
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":45
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":46
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":47
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":48
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":49
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":50
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":51
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":52
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":53
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":54
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":55
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":56
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":57
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":58
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":59
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":60
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":61
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":3,
+ "x":36
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":37
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":38
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":39
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":40
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":41
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":42
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":43
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":44
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":45
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":46
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":47
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":48
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":49
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":50
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":51
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":52
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":53
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":54
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":55
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":56
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":57
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":58
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":59
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":60
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":61
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":4,
+ "x":36
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":37
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":38
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":39
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":40
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":41
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":42
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":43
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":44
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":2
+ },
+ {
+ "position":{
+ "y":4,
+ "x":45
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":46
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":47
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":48
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":49
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":50
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":51
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":52
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":53
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":54
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":55
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":56
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":57
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":58
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":59
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":60
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":61
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ]
+ ]
+} \ No newline at end of file
diff --git a/2020-overdrive/tests/v1-normal-match/Round 007/OpponentCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 007/OpponentCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 007/OpponentCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 007/PlayerCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 007/PlayerCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 007/PlayerCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 008/JsonMap.json b/2020-overdrive/tests/v1-normal-match/Round 008/JsonMap.json
new file mode 100644
index 0000000..5c7f9da
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 008/JsonMap.json
@@ -0,0 +1,866 @@
+{
+ "currentRound":8,
+ "maxRounds":600,
+ "player":{
+ "id":1,
+ "position":{
+ "y":1,
+ "x":47
+ },
+ "speed":3,
+ "state":"HIT_MUD",
+ "powerups":[],
+ "boosting":false,
+ "boostCounter":0
+ },
+ "opponent":{
+ "id":2,
+ "position":{
+ "y":4,
+ "x":53
+ },
+ "speed":6
+ },
+ "worldMap":[
+ [
+ {
+ "position":{
+ "y":1,
+ "x":42
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":43
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":44
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":45
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":46
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":47
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":1
+ },
+ {
+ "position":{
+ "y":1,
+ "x":48
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":49
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":50
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":51
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":52
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":53
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":54
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":55
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":56
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":57
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":58
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":59
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":60
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":61
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":62
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":63
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":64
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":65
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":66
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":67
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":2,
+ "x":42
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":43
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":44
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":45
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":46
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":47
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":48
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":49
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":50
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":51
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":52
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":53
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":54
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":55
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":56
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":57
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":58
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":59
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":60
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":61
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":62
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":63
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":64
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":65
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":66
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":67
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":3,
+ "x":42
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":43
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":44
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":45
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":46
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":47
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":48
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":49
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":50
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":51
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":52
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":53
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":54
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":55
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":56
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":57
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":58
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":59
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":60
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":61
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":62
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":63
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":64
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":65
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":66
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":67
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":4,
+ "x":42
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":43
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":44
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":45
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":46
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":47
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":48
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":49
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":50
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":51
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":52
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":53
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":2
+ },
+ {
+ "position":{
+ "y":4,
+ "x":54
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":55
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":56
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":57
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":58
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":59
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":60
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":61
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":62
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":63
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":64
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":65
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":66
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":67
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ]
+ ]
+} \ No newline at end of file
diff --git a/2020-overdrive/tests/v1-normal-match/Round 008/OpponentCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 008/OpponentCommand.txt
new file mode 100644
index 0000000..46ca975
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 008/OpponentCommand.txt
@@ -0,0 +1 @@
+Command: TURN_LEFT
diff --git a/2020-overdrive/tests/v1-normal-match/Round 008/PlayerCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 008/PlayerCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 008/PlayerCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 009/JsonMap.json b/2020-overdrive/tests/v1-normal-match/Round 009/JsonMap.json
new file mode 100644
index 0000000..dcb7ce2
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 009/JsonMap.json
@@ -0,0 +1,866 @@
+{
+ "currentRound":9,
+ "maxRounds":600,
+ "player":{
+ "id":1,
+ "position":{
+ "y":1,
+ "x":53
+ },
+ "speed":6,
+ "state":"ACCELERATING",
+ "powerups":[],
+ "boosting":false,
+ "boostCounter":0
+ },
+ "opponent":{
+ "id":2,
+ "position":{
+ "y":3,
+ "x":58
+ },
+ "speed":6
+ },
+ "worldMap":[
+ [
+ {
+ "position":{
+ "y":1,
+ "x":48
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":49
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":50
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":51
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":52
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":53
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":1
+ },
+ {
+ "position":{
+ "y":1,
+ "x":54
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":55
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":56
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":57
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":58
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":59
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":60
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":61
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":62
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":63
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":64
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":65
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":66
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":67
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":68
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":69
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":70
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":71
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":72
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":73
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":2,
+ "x":48
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":49
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":50
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":51
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":52
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":53
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":54
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":55
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":56
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":57
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":58
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":59
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":60
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":61
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":62
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":63
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":64
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":65
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":66
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":67
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":68
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":69
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":70
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":71
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":72
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":73
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":3,
+ "x":48
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":49
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":50
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":51
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":52
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":53
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":54
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":55
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":56
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":57
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":58
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":2
+ },
+ {
+ "position":{
+ "y":3,
+ "x":59
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":60
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":61
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":62
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":63
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":64
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":65
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":66
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":67
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":68
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":69
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":70
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":71
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":72
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":73
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":4,
+ "x":48
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":49
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":50
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":51
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":52
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":53
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":54
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":55
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":56
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":57
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":58
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":59
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":60
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":61
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":62
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":63
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":64
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":65
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":66
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":67
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":68
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":69
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":70
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":71
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":72
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":73
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ }
+ ]
+ ]
+} \ No newline at end of file
diff --git a/2020-overdrive/tests/v1-normal-match/Round 009/OpponentCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 009/OpponentCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 009/OpponentCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 009/PlayerCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 009/PlayerCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 009/PlayerCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 010/JsonMap.json b/2020-overdrive/tests/v1-normal-match/Round 010/JsonMap.json
new file mode 100644
index 0000000..ce83a02
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 010/JsonMap.json
@@ -0,0 +1,866 @@
+{
+ "currentRound":10,
+ "maxRounds":600,
+ "player":{
+ "id":1,
+ "position":{
+ "y":1,
+ "x":61
+ },
+ "speed":3,
+ "state":"HIT_MUD",
+ "powerups":[],
+ "boosting":false,
+ "boostCounter":0
+ },
+ "opponent":{
+ "id":2,
+ "position":{
+ "y":3,
+ "x":66
+ },
+ "speed":6
+ },
+ "worldMap":[
+ [
+ {
+ "position":{
+ "y":1,
+ "x":56
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":57
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":58
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":59
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":60
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":61
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":1
+ },
+ {
+ "position":{
+ "y":1,
+ "x":62
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":63
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":64
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":65
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":66
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":67
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":68
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":69
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":70
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":71
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":72
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":73
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":74
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":75
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":76
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":77
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":78
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":79
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":80
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":81
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":2,
+ "x":56
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":57
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":58
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":59
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":60
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":61
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":62
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":63
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":64
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":65
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":66
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":67
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":68
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":69
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":70
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":71
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":72
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":73
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":74
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":75
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":76
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":77
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":78
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":79
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":80
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":81
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":3,
+ "x":56
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":57
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":58
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":59
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":60
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":61
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":62
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":63
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":64
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":65
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":66
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":2
+ },
+ {
+ "position":{
+ "y":3,
+ "x":67
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":68
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":69
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":70
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":71
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":72
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":73
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":74
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":75
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":76
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":77
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":78
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":79
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":80
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":81
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":4,
+ "x":56
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":57
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":58
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":59
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":60
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":61
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":62
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":63
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":64
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":65
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":66
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":67
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":68
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":69
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":70
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":71
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":72
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":73
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":74
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":75
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":76
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":77
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":78
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":79
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":80
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":81
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ]
+ ]
+} \ No newline at end of file
diff --git a/2020-overdrive/tests/v1-normal-match/Round 010/OpponentCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 010/OpponentCommand.txt
new file mode 100644
index 0000000..32cf195
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 010/OpponentCommand.txt
@@ -0,0 +1 @@
+Command: USE_BOOST
diff --git a/2020-overdrive/tests/v1-normal-match/Round 010/PlayerCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 010/PlayerCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 010/PlayerCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 011/JsonMap.json b/2020-overdrive/tests/v1-normal-match/Round 011/JsonMap.json
new file mode 100644
index 0000000..f18bf80
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 011/JsonMap.json
@@ -0,0 +1,866 @@
+{
+ "currentRound":11,
+ "maxRounds":600,
+ "player":{
+ "id":1,
+ "position":{
+ "y":1,
+ "x":67
+ },
+ "speed":3,
+ "state":"HIT_MUD",
+ "powerups":[],
+ "boosting":false,
+ "boostCounter":0
+ },
+ "opponent":{
+ "id":2,
+ "position":{
+ "y":3,
+ "x":81
+ },
+ "speed":9
+ },
+ "worldMap":[
+ [
+ {
+ "position":{
+ "y":1,
+ "x":62
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":63
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":64
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":65
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":66
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":67
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":1
+ },
+ {
+ "position":{
+ "y":1,
+ "x":68
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":69
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":70
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":71
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":72
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":73
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":74
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":75
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":76
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":77
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":78
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":79
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":80
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":81
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":82
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":83
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":84
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":85
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":86
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":87
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":2,
+ "x":62
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":63
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":64
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":65
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":66
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":67
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":68
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":69
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":70
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":71
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":72
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":73
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":74
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":75
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":76
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":77
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":78
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":79
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":80
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":81
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":82
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":83
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":84
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":85
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":86
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":87
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":3,
+ "x":62
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":63
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":64
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":65
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":66
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":67
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":68
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":69
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":70
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":71
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":72
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":73
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":74
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":75
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":76
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":77
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":78
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":79
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":80
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":81
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":2
+ },
+ {
+ "position":{
+ "y":3,
+ "x":82
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":83
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":84
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":85
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":86
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":87
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":4,
+ "x":62
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":63
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":64
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":65
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":66
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":67
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":68
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":69
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":70
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":71
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":72
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":73
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":74
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":75
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":76
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":77
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":78
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":79
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":80
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":81
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":82
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":83
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":84
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":85
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":86
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":87
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ]
+ ]
+} \ No newline at end of file
diff --git a/2020-overdrive/tests/v1-normal-match/Round 011/OpponentCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 011/OpponentCommand.txt
new file mode 100644
index 0000000..46ca975
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 011/OpponentCommand.txt
@@ -0,0 +1 @@
+Command: TURN_LEFT
diff --git a/2020-overdrive/tests/v1-normal-match/Round 011/PlayerCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 011/PlayerCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 011/PlayerCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 012/JsonMap.json b/2020-overdrive/tests/v1-normal-match/Round 012/JsonMap.json
new file mode 100644
index 0000000..e95a7fe
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 012/JsonMap.json
@@ -0,0 +1,866 @@
+{
+ "currentRound":12,
+ "maxRounds":600,
+ "player":{
+ "id":1,
+ "position":{
+ "y":1,
+ "x":73
+ },
+ "speed":6,
+ "state":"ACCELERATING",
+ "powerups":[],
+ "boosting":false,
+ "boostCounter":0
+ },
+ "opponent":{
+ "id":2,
+ "position":{
+ "y":2,
+ "x":89
+ },
+ "speed":8
+ },
+ "worldMap":[
+ [
+ {
+ "position":{
+ "y":1,
+ "x":68
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":69
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":70
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":71
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":72
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":73
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":1
+ },
+ {
+ "position":{
+ "y":1,
+ "x":74
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":75
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":76
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":77
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":78
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":79
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":80
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":81
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":82
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":83
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":84
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":85
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":86
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":87
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":88
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":89
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":90
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":91
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":92
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":93
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":2,
+ "x":68
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":69
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":70
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":71
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":72
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":73
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":74
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":75
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":76
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":77
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":78
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":79
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":80
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":81
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":82
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":83
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":84
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":85
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":86
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":87
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":88
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":89
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":2
+ },
+ {
+ "position":{
+ "y":2,
+ "x":90
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":91
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":92
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":93
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":3,
+ "x":68
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":69
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":70
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":71
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":72
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":73
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":74
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":75
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":76
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":77
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":78
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":79
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":80
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":81
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":82
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":83
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":84
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":85
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":86
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":87
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":88
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":89
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":90
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":91
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":92
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":93
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":4,
+ "x":68
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":69
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":70
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":71
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":72
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":73
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":74
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":75
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":76
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":77
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":78
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":79
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":80
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":81
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":82
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":83
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":84
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":85
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":86
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":87
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":88
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":89
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":90
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":91
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":92
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":93
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ]
+ ]
+} \ No newline at end of file
diff --git a/2020-overdrive/tests/v1-normal-match/Round 012/OpponentCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 012/OpponentCommand.txt
new file mode 100644
index 0000000..32cf195
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 012/OpponentCommand.txt
@@ -0,0 +1 @@
+Command: USE_BOOST
diff --git a/2020-overdrive/tests/v1-normal-match/Round 012/PlayerCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 012/PlayerCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 012/PlayerCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 013/JsonMap.json b/2020-overdrive/tests/v1-normal-match/Round 013/JsonMap.json
new file mode 100644
index 0000000..8d8ede1
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 013/JsonMap.json
@@ -0,0 +1,866 @@
+{
+ "currentRound":13,
+ "maxRounds":600,
+ "player":{
+ "id":1,
+ "position":{
+ "y":1,
+ "x":81
+ },
+ "speed":8,
+ "state":"ACCELERATING",
+ "powerups":[],
+ "boosting":false,
+ "boostCounter":0
+ },
+ "opponent":{
+ "id":2,
+ "position":{
+ "y":2,
+ "x":104
+ },
+ "speed":8
+ },
+ "worldMap":[
+ [
+ {
+ "position":{
+ "y":1,
+ "x":76
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":77
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":78
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":79
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":80
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":81
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":1
+ },
+ {
+ "position":{
+ "y":1,
+ "x":82
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":83
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":84
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":85
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":86
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":87
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":88
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":89
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":90
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":91
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":92
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":93
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":94
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":95
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":96
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":97
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":98
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":99
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":100
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":101
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":2,
+ "x":76
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":77
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":78
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":79
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":80
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":81
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":82
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":83
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":84
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":85
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":86
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":87
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":88
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":89
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":90
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":91
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":92
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":93
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":94
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":95
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":96
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":97
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":98
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":99
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":100
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":101
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":3,
+ "x":76
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":77
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":78
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":79
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":80
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":81
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":82
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":83
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":84
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":85
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":86
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":87
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":88
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":89
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":90
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":91
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":92
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":93
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":94
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":95
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":96
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":97
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":98
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":99
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":100
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":101
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":4,
+ "x":76
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":77
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":78
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":79
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":80
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":81
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":82
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":83
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":84
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":85
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":86
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":87
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":88
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":89
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":90
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":91
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":92
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":93
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":94
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":95
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":96
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":97
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":98
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":99
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":100
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":101
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ]
+ ]
+} \ No newline at end of file
diff --git a/2020-overdrive/tests/v1-normal-match/Round 013/OpponentCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 013/OpponentCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 013/OpponentCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 013/PlayerCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 013/PlayerCommand.txt
new file mode 100644
index 0000000..47076cf
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 013/PlayerCommand.txt
@@ -0,0 +1 @@
+Command: TURN_RIGHT
diff --git a/2020-overdrive/tests/v1-normal-match/Round 014/JsonMap.json b/2020-overdrive/tests/v1-normal-match/Round 014/JsonMap.json
new file mode 100644
index 0000000..2bc7635
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 014/JsonMap.json
@@ -0,0 +1,869 @@
+{
+ "currentRound":14,
+ "maxRounds":600,
+ "player":{
+ "id":1,
+ "position":{
+ "y":2,
+ "x":88
+ },
+ "speed":6,
+ "state":"HIT_MUD",
+ "powerups":[
+ "OIL",
+ "BOOST"
+ ],
+ "boosting":false,
+ "boostCounter":0
+ },
+ "opponent":{
+ "id":2,
+ "position":{
+ "y":2,
+ "x":113
+ },
+ "speed":9
+ },
+ "worldMap":[
+ [
+ {
+ "position":{
+ "y":1,
+ "x":83
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":84
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":85
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":86
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":87
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":88
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":89
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":90
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":91
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":92
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":93
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":94
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":95
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":96
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":97
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":98
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":99
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":100
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":101
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":102
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":103
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":104
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":105
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":106
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":107
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":108
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":2,
+ "x":83
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":84
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":85
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":86
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":87
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":88
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":1
+ },
+ {
+ "position":{
+ "y":2,
+ "x":89
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":90
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":91
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":92
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":93
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":94
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":95
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":96
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":97
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":98
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":99
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":100
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":101
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":102
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":103
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":104
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":105
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":106
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":107
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":108
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":3,
+ "x":83
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":84
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":85
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":86
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":87
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":88
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":89
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":90
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":91
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":92
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":93
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":94
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":95
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":96
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":97
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":98
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":99
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":100
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":101
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":102
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":103
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":104
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":105
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":106
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":107
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":108
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":4,
+ "x":83
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":84
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":85
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":86
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":87
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":88
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":89
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":90
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":91
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":92
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":93
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":94
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":95
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":96
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":97
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":98
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":99
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":100
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":101
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":102
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":103
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":104
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":105
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":106
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":107
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":108
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ]
+ ]
+} \ No newline at end of file
diff --git a/2020-overdrive/tests/v1-normal-match/Round 014/OpponentCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 014/OpponentCommand.txt
new file mode 100644
index 0000000..0d0ef99
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 014/OpponentCommand.txt
@@ -0,0 +1 @@
+Command: USE_OIL
diff --git a/2020-overdrive/tests/v1-normal-match/Round 014/PlayerCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 014/PlayerCommand.txt
new file mode 100644
index 0000000..32cf195
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 014/PlayerCommand.txt
@@ -0,0 +1 @@
+Command: USE_BOOST
diff --git a/2020-overdrive/tests/v1-normal-match/Round 015/JsonMap.json b/2020-overdrive/tests/v1-normal-match/Round 015/JsonMap.json
new file mode 100644
index 0000000..b581996
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 015/JsonMap.json
@@ -0,0 +1,868 @@
+{
+ "currentRound":15,
+ "maxRounds":600,
+ "player":{
+ "id":1,
+ "position":{
+ "y":2,
+ "x":103
+ },
+ "speed":8,
+ "state":"HIT_MUD",
+ "powerups":[
+ "OIL"
+ ],
+ "boosting":false,
+ "boostCounter":0
+ },
+ "opponent":{
+ "id":2,
+ "position":{
+ "y":2,
+ "x":122
+ },
+ "speed":9
+ },
+ "worldMap":[
+ [
+ {
+ "position":{
+ "y":1,
+ "x":98
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":99
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":100
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":101
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":102
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":103
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":104
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":105
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":106
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":107
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":108
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":109
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":110
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":111
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":112
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":113
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":114
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":115
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":116
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":117
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":118
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":119
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":120
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":121
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":122
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":123
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":2,
+ "x":98
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":99
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":100
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":101
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":102
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":103
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":1
+ },
+ {
+ "position":{
+ "y":2,
+ "x":104
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":105
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":106
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":107
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":108
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":109
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":110
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":111
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":112
+ },
+ "surfaceObject":2,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":113
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":114
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":115
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":116
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":117
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":118
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":119
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":120
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":121
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":122
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":2
+ },
+ {
+ "position":{
+ "y":2,
+ "x":123
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":3,
+ "x":98
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":99
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":100
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":101
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":102
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":103
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":104
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":105
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":106
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":107
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":108
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":109
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":110
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":111
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":112
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":113
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":114
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":115
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":116
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":117
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":118
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":119
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":120
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":121
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":122
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":123
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":4,
+ "x":98
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":99
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":100
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":101
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":102
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":103
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":104
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":105
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":106
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":107
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":108
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":109
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":110
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":111
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":112
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":113
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":114
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":115
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":116
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":117
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":118
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":119
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":120
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":121
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":122
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":123
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ]
+ ]
+} \ No newline at end of file
diff --git a/2020-overdrive/tests/v1-normal-match/Round 015/OpponentCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 015/OpponentCommand.txt
new file mode 100644
index 0000000..47076cf
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 015/OpponentCommand.txt
@@ -0,0 +1 @@
+Command: TURN_RIGHT
diff --git a/2020-overdrive/tests/v1-normal-match/Round 015/PlayerCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 015/PlayerCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 015/PlayerCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 016/JsonMap.json b/2020-overdrive/tests/v1-normal-match/Round 016/JsonMap.json
new file mode 100644
index 0000000..26cea55
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 016/JsonMap.json
@@ -0,0 +1,868 @@
+{
+ "currentRound":16,
+ "maxRounds":600,
+ "player":{
+ "id":1,
+ "position":{
+ "y":2,
+ "x":112
+ },
+ "speed":8,
+ "state":"HIT_OIL",
+ "powerups":[
+ "OIL"
+ ],
+ "boosting":false,
+ "boostCounter":0
+ },
+ "opponent":{
+ "id":2,
+ "position":{
+ "y":3,
+ "x":130
+ },
+ "speed":9
+ },
+ "worldMap":[
+ [
+ {
+ "position":{
+ "y":1,
+ "x":107
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":108
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":109
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":110
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":111
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":112
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":113
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":114
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":115
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":116
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":117
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":118
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":119
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":120
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":121
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":122
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":123
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":124
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":125
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":126
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":127
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":128
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":129
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":130
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":131
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":132
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":2,
+ "x":107
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":108
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":109
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":110
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":111
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":112
+ },
+ "surfaceObject":2,
+ "occupiedByPlayerId":1
+ },
+ {
+ "position":{
+ "y":2,
+ "x":113
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":114
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":115
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":116
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":117
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":118
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":119
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":120
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":121
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":122
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":123
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":124
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":125
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":126
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":127
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":128
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":129
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":130
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":131
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":132
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":3,
+ "x":107
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":108
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":109
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":110
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":111
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":112
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":113
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":114
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":115
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":116
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":117
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":118
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":119
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":120
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":121
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":122
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":123
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":124
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":125
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":126
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":127
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":128
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":129
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":130
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":2
+ },
+ {
+ "position":{
+ "y":3,
+ "x":131
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":132
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":4,
+ "x":107
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":108
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":109
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":110
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":111
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":112
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":113
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":114
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":115
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":116
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":117
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":118
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":119
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":120
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":121
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":122
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":123
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":124
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":125
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":126
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":127
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":128
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":129
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":130
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":131
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":132
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ]
+ ]
+} \ No newline at end of file
diff --git a/2020-overdrive/tests/v1-normal-match/Round 016/OpponentCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 016/OpponentCommand.txt
new file mode 100644
index 0000000..0d0ef99
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 016/OpponentCommand.txt
@@ -0,0 +1 @@
+Command: USE_OIL
diff --git a/2020-overdrive/tests/v1-normal-match/Round 016/PlayerCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 016/PlayerCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 016/PlayerCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 017/JsonMap.json b/2020-overdrive/tests/v1-normal-match/Round 017/JsonMap.json
new file mode 100644
index 0000000..ebe6330
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 017/JsonMap.json
@@ -0,0 +1,868 @@
+{
+ "currentRound":17,
+ "maxRounds":600,
+ "player":{
+ "id":1,
+ "position":{
+ "y":2,
+ "x":121
+ },
+ "speed":9,
+ "state":"ACCELERATING",
+ "powerups":[
+ "OIL"
+ ],
+ "boosting":false,
+ "boostCounter":0
+ },
+ "opponent":{
+ "id":2,
+ "position":{
+ "y":3,
+ "x":139
+ },
+ "speed":8
+ },
+ "worldMap":[
+ [
+ {
+ "position":{
+ "y":1,
+ "x":116
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":117
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":118
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":119
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":120
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":121
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":122
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":123
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":124
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":125
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":126
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":127
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":128
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":129
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":130
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":131
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":132
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":133
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":134
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":135
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":136
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":137
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":138
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":139
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":140
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":141
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":2,
+ "x":116
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":117
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":118
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":119
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":120
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":121
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":1
+ },
+ {
+ "position":{
+ "y":2,
+ "x":122
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":123
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":124
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":125
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":126
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":127
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":128
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":129
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":130
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":131
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":132
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":133
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":134
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":135
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":136
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":137
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":138
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":139
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":140
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":141
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":3,
+ "x":116
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":117
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":118
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":119
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":120
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":121
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":122
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":123
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":124
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":125
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":126
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":127
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":128
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":129
+ },
+ "surfaceObject":2,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":130
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":131
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":132
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":133
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":134
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":135
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":136
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":137
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":138
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":139
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":2
+ },
+ {
+ "position":{
+ "y":3,
+ "x":140
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":141
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":4,
+ "x":116
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":117
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":118
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":119
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":120
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":121
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":122
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":123
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":124
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":125
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":126
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":127
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":128
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":129
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":130
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":131
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":132
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":133
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":134
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":135
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":136
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":137
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":138
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":139
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":140
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":141
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ]
+ ]
+} \ No newline at end of file
diff --git a/2020-overdrive/tests/v1-normal-match/Round 017/OpponentCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 017/OpponentCommand.txt
new file mode 100644
index 0000000..32cf195
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 017/OpponentCommand.txt
@@ -0,0 +1 @@
+Command: USE_BOOST
diff --git a/2020-overdrive/tests/v1-normal-match/Round 017/PlayerCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 017/PlayerCommand.txt
new file mode 100644
index 0000000..47076cf
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 017/PlayerCommand.txt
@@ -0,0 +1 @@
+Command: TURN_RIGHT
diff --git a/2020-overdrive/tests/v1-normal-match/Round 018/JsonMap.json b/2020-overdrive/tests/v1-normal-match/Round 018/JsonMap.json
new file mode 100644
index 0000000..96d15a0
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 018/JsonMap.json
@@ -0,0 +1,869 @@
+{
+ "currentRound":18,
+ "maxRounds":600,
+ "player":{
+ "id":1,
+ "position":{
+ "y":3,
+ "x":129
+ },
+ "speed":8,
+ "state":"HIT_OIL",
+ "powerups":[
+ "OIL",
+ "BOOST"
+ ],
+ "boosting":false,
+ "boostCounter":0
+ },
+ "opponent":{
+ "id":2,
+ "position":{
+ "y":3,
+ "x":154
+ },
+ "speed":9
+ },
+ "worldMap":[
+ [
+ {
+ "position":{
+ "y":1,
+ "x":124
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":125
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":126
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":127
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":128
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":129
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":130
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":131
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":132
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":133
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":134
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":135
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":136
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":137
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":138
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":139
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":140
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":141
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":142
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":143
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":144
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":145
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":146
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":147
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":148
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":149
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":2,
+ "x":124
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":125
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":126
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":127
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":128
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":129
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":130
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":131
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":132
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":133
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":134
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":135
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":136
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":137
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":138
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":139
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":140
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":141
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":142
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":143
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":144
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":145
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":146
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":147
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":148
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":149
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":3,
+ "x":124
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":125
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":126
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":127
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":128
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":129
+ },
+ "surfaceObject":2,
+ "occupiedByPlayerId":1
+ },
+ {
+ "position":{
+ "y":3,
+ "x":130
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":131
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":132
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":133
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":134
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":135
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":136
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":137
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":138
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":139
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":140
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":141
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":142
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":143
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":144
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":145
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":146
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":147
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":148
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":149
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":4,
+ "x":124
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":125
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":126
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":127
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":128
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":129
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":130
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":131
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":132
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":133
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":134
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":135
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":136
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":137
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":138
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":139
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":140
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":141
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":142
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":143
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":144
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":145
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":146
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":147
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":148
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":149
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ]
+ ]
+} \ No newline at end of file
diff --git a/2020-overdrive/tests/v1-normal-match/Round 018/OpponentCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 018/OpponentCommand.txt
new file mode 100644
index 0000000..32cf195
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 018/OpponentCommand.txt
@@ -0,0 +1 @@
+Command: USE_BOOST
diff --git a/2020-overdrive/tests/v1-normal-match/Round 018/PlayerCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 018/PlayerCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 018/PlayerCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 019/JsonMap.json b/2020-overdrive/tests/v1-normal-match/Round 019/JsonMap.json
new file mode 100644
index 0000000..892b049
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 019/JsonMap.json
@@ -0,0 +1,869 @@
+{
+ "currentRound":19,
+ "maxRounds":600,
+ "player":{
+ "id":1,
+ "position":{
+ "y":3,
+ "x":138
+ },
+ "speed":8,
+ "state":"HIT_MUD",
+ "powerups":[
+ "OIL",
+ "BOOST"
+ ],
+ "boosting":false,
+ "boostCounter":0
+ },
+ "opponent":{
+ "id":2,
+ "position":{
+ "y":3,
+ "x":169
+ },
+ "speed":8
+ },
+ "worldMap":[
+ [
+ {
+ "position":{
+ "y":1,
+ "x":133
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":134
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":135
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":136
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":137
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":138
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":139
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":140
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":141
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":142
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":143
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":144
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":145
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":146
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":147
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":148
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":149
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":150
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":151
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":152
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":153
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":154
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":155
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":156
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":157
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":158
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":2,
+ "x":133
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":134
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":135
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":136
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":137
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":138
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":139
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":140
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":141
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":142
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":143
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":144
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":145
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":146
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":147
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":148
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":149
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":150
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":151
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":152
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":153
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":154
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":155
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":156
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":157
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":158
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":3,
+ "x":133
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":134
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":135
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":136
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":137
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":138
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":1
+ },
+ {
+ "position":{
+ "y":3,
+ "x":139
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":140
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":141
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":142
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":143
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":144
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":145
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":146
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":147
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":148
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":149
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":150
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":151
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":152
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":153
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":154
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":155
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":156
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":157
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":158
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":4,
+ "x":133
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":134
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":135
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":136
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":137
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":138
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":139
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":140
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":141
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":142
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":143
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":144
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":145
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":146
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":147
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":148
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":149
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":150
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":151
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":152
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":153
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":154
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":155
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":156
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":157
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":158
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ]
+ ]
+} \ No newline at end of file
diff --git a/2020-overdrive/tests/v1-normal-match/Round 019/OpponentCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 019/OpponentCommand.txt
new file mode 100644
index 0000000..46ca975
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 019/OpponentCommand.txt
@@ -0,0 +1 @@
+Command: TURN_LEFT
diff --git a/2020-overdrive/tests/v1-normal-match/Round 019/PlayerCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 019/PlayerCommand.txt
new file mode 100644
index 0000000..32cf195
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 019/PlayerCommand.txt
@@ -0,0 +1 @@
+Command: USE_BOOST
diff --git a/2020-overdrive/tests/v1-normal-match/Round 020/JsonMap.json b/2020-overdrive/tests/v1-normal-match/Round 020/JsonMap.json
new file mode 100644
index 0000000..5c57475
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 020/JsonMap.json
@@ -0,0 +1,869 @@
+{
+ "currentRound":20,
+ "maxRounds":600,
+ "player":{
+ "id":1,
+ "position":{
+ "y":3,
+ "x":153
+ },
+ "speed":9,
+ "state":"HIT_MUD",
+ "powerups":[
+ "OIL",
+ "BOOST"
+ ],
+ "boosting":false,
+ "boostCounter":0
+ },
+ "opponent":{
+ "id":2,
+ "position":{
+ "y":2,
+ "x":176
+ },
+ "speed":8
+ },
+ "worldMap":[
+ [
+ {
+ "position":{
+ "y":1,
+ "x":148
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":149
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":150
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":151
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":152
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":153
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":154
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":155
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":156
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":157
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":158
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":159
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":160
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":161
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":162
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":163
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":164
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":165
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":166
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":167
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":168
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":169
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":170
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":171
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":172
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":173
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":2,
+ "x":148
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":149
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":150
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":151
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":152
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":153
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":154
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":155
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":156
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":157
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":158
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":159
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":160
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":161
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":162
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":163
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":164
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":165
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":166
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":167
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":168
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":169
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":170
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":171
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":172
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":173
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":3,
+ "x":148
+ },
+ "surfaceObject":5,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":149
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":150
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":151
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":152
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":153
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":1
+ },
+ {
+ "position":{
+ "y":3,
+ "x":154
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":155
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":156
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":157
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":158
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":159
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":160
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":161
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":162
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":163
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":164
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":165
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":166
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":167
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":168
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":169
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":170
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":171
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":172
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":173
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":4,
+ "x":148
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":149
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":150
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":151
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":152
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":153
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":154
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":155
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":156
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":157
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":158
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":159
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":160
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":161
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":162
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":163
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":164
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":165
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":166
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":167
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":168
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":169
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":170
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":171
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":172
+ },
+ "surfaceObject":3,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":173
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ]
+ ]
+} \ No newline at end of file
diff --git a/2020-overdrive/tests/v1-normal-match/Round 020/OpponentCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 020/OpponentCommand.txt
new file mode 100644
index 0000000..8ef4270
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 020/OpponentCommand.txt
@@ -0,0 +1 @@
+Command: ACCELERATE
diff --git a/2020-overdrive/tests/v1-normal-match/Round 020/PlayerCommand.txt b/2020-overdrive/tests/v1-normal-match/Round 020/PlayerCommand.txt
new file mode 100644
index 0000000..32cf195
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 020/PlayerCommand.txt
@@ -0,0 +1 @@
+Command: USE_BOOST
diff --git a/2020-overdrive/tests/v1-normal-match/Round 021/JsonMap.json b/2020-overdrive/tests/v1-normal-match/Round 021/JsonMap.json
new file mode 100644
index 0000000..352ac30
--- /dev/null
+++ b/2020-overdrive/tests/v1-normal-match/Round 021/JsonMap.json
@@ -0,0 +1,868 @@
+{
+ "currentRound":21,
+ "maxRounds":600,
+ "player":{
+ "id":1,
+ "position":{
+ "y":3,
+ "x":168
+ },
+ "speed":8,
+ "state":"HIT_MUD",
+ "powerups":[
+ "OIL"
+ ],
+ "boosting":false,
+ "boostCounter":0
+ },
+ "opponent":{
+ "id":2,
+ "position":{
+ "y":2,
+ "x":185
+ },
+ "speed":8
+ },
+ "worldMap":[
+ [
+ {
+ "position":{
+ "y":1,
+ "x":163
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":164
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":165
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":166
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":167
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":168
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":169
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":170
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":171
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":172
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":173
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":174
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":175
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":176
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":177
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":178
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":179
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":180
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":181
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":182
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":183
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":184
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":185
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":186
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":187
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":1,
+ "x":188
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":2,
+ "x":163
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":164
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":165
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":166
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":167
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":168
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":169
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":170
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":171
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":172
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":173
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":174
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":175
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":176
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":177
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":178
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":179
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":180
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":181
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":182
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":183
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":184
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":185
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":2
+ },
+ {
+ "position":{
+ "y":2,
+ "x":186
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":187
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":2,
+ "x":188
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":3,
+ "x":163
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":164
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":165
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":166
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":167
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":168
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":1
+ },
+ {
+ "position":{
+ "y":3,
+ "x":169
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":170
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":171
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":172
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":173
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":174
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":175
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":176
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":177
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":178
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":179
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":180
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":181
+ },
+ "surfaceObject":1,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":182
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":183
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":184
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":185
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":186
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":187
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":3,
+ "x":188
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ }
+ ],
+ [
+ {
+ "position":{
+ "y":4,
+ "x":163
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":164
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":165
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":166
+ },
+ "surfaceObject":0,
+ "occupiedByPlayerId":0
+ },
+ {
+ "position":{
+ "y":4,
+ "x":167