kaggle-environments 0.2.1__py3-none-any.whl → 1.20.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of kaggle-environments might be problematic. Click here for more details.
- kaggle_environments/__init__.py +49 -13
- kaggle_environments/agent.py +177 -124
- kaggle_environments/api.py +31 -0
- kaggle_environments/core.py +295 -170
- kaggle_environments/envs/cabt/cabt.js +164 -0
- kaggle_environments/envs/cabt/cabt.json +28 -0
- kaggle_environments/envs/cabt/cabt.py +186 -0
- kaggle_environments/envs/cabt/cg/__init__.py +0 -0
- kaggle_environments/envs/cabt/cg/cg.dll +0 -0
- kaggle_environments/envs/cabt/cg/game.py +75 -0
- kaggle_environments/envs/cabt/cg/libcg.so +0 -0
- kaggle_environments/envs/cabt/cg/sim.py +48 -0
- kaggle_environments/envs/cabt/test_cabt.py +120 -0
- kaggle_environments/envs/chess/chess.js +4289 -0
- kaggle_environments/envs/chess/chess.json +60 -0
- kaggle_environments/envs/chess/chess.py +4241 -0
- kaggle_environments/envs/chess/test_chess.py +60 -0
- kaggle_environments/envs/connectx/connectx.ipynb +3186 -0
- kaggle_environments/envs/connectx/connectx.js +1 -1
- kaggle_environments/envs/connectx/connectx.json +15 -1
- kaggle_environments/envs/connectx/connectx.py +6 -23
- kaggle_environments/envs/connectx/test_connectx.py +70 -24
- kaggle_environments/envs/football/football.ipynb +75 -0
- kaggle_environments/envs/football/football.json +91 -0
- kaggle_environments/envs/football/football.py +277 -0
- kaggle_environments/envs/football/helpers.py +95 -0
- kaggle_environments/envs/football/test_football.py +360 -0
- kaggle_environments/envs/halite/__init__.py +0 -0
- kaggle_environments/envs/halite/halite.ipynb +44741 -0
- kaggle_environments/envs/halite/halite.js +199 -83
- kaggle_environments/envs/halite/halite.json +31 -18
- kaggle_environments/envs/halite/halite.py +164 -303
- kaggle_environments/envs/halite/helpers.py +720 -0
- kaggle_environments/envs/halite/test_halite.py +190 -0
- kaggle_environments/envs/hungry_geese/__init__.py +0 -0
- kaggle_environments/envs/{battlegeese/battlegeese.js → hungry_geese/hungry_geese.js} +38 -22
- kaggle_environments/envs/{battlegeese/battlegeese.json → hungry_geese/hungry_geese.json} +21 -14
- kaggle_environments/envs/hungry_geese/hungry_geese.py +316 -0
- kaggle_environments/envs/hungry_geese/test_hungry_geese.py +0 -0
- kaggle_environments/envs/identity/identity.json +6 -5
- kaggle_environments/envs/identity/identity.py +15 -2
- kaggle_environments/envs/kore_fleets/__init__.py +0 -0
- kaggle_environments/envs/kore_fleets/helpers.py +1005 -0
- kaggle_environments/envs/kore_fleets/kore_fleets.ipynb +114 -0
- kaggle_environments/envs/kore_fleets/kore_fleets.js +658 -0
- kaggle_environments/envs/kore_fleets/kore_fleets.json +164 -0
- kaggle_environments/envs/kore_fleets/kore_fleets.py +555 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/Bot.java +54 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/README.md +26 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/jars/hamcrest-core-1.3.jar +0 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/jars/junit-4.13.2.jar +0 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Board.java +518 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Cell.java +61 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Configuration.java +24 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Direction.java +166 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Fleet.java +72 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/kore/KoreJson.java +97 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Observation.java +72 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Pair.java +13 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Player.java +68 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Point.java +65 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Shipyard.java +70 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/kore/ShipyardAction.java +59 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/main.py +73 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/test/BoardTest.java +567 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/test/ConfigurationTest.java +25 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/test/KoreJsonTest.java +62 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/test/ObservationTest.java +46 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/test/PointTest.java +21 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/test/ShipyardTest.java +22 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/test/configuration.json +1 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/test/fullob.json +1 -0
- kaggle_environments/envs/kore_fleets/starter_bots/java/test/observation.json +1 -0
- kaggle_environments/envs/kore_fleets/starter_bots/python/__init__.py +0 -0
- kaggle_environments/envs/kore_fleets/starter_bots/python/main.py +27 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/Bot.ts +34 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/DoNothingBot.ts +12 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/MinerBot.ts +62 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/README.md +55 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/interpreter.ts +402 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Board.ts +514 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Cell.ts +63 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Configuration.ts +25 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Direction.ts +169 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Fleet.ts +76 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/KoreIO.ts +70 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Observation.ts +45 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Pair.ts +11 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Player.ts +68 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Point.ts +65 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Shipyard.ts +72 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/ShipyardAction.ts +58 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/main.py +73 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/miner.py +73 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/package.json +23 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/test/BoardTest.ts +551 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/test/ConfigurationTest.ts +16 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/test/ObservationTest.ts +33 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/test/PointTest.ts +17 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/test/ShipyardTest.ts +18 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/test/configuration.json +1 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/test/fullob.json +1 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/test/observation.json +1 -0
- kaggle_environments/envs/kore_fleets/starter_bots/ts/tsconfig.json +22 -0
- kaggle_environments/envs/kore_fleets/test_kore_fleets.py +331 -0
- kaggle_environments/envs/lux_ai_2021/README.md +3 -0
- kaggle_environments/envs/lux_ai_2021/__init__.py +0 -0
- kaggle_environments/envs/lux_ai_2021/agents.py +11 -0
- kaggle_environments/envs/lux_ai_2021/dimensions/754.js +2 -0
- kaggle_environments/envs/lux_ai_2021/dimensions/754.js.LICENSE.txt +296 -0
- kaggle_environments/envs/lux_ai_2021/dimensions/main.js +1 -0
- kaggle_environments/envs/lux_ai_2021/index.html +43 -0
- kaggle_environments/envs/lux_ai_2021/lux_ai_2021.json +100 -0
- kaggle_environments/envs/lux_ai_2021/lux_ai_2021.py +231 -0
- kaggle_environments/envs/lux_ai_2021/test_agents/__init__.py +0 -0
- kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/game_constants.js +6 -0
- kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/game_constants.json +59 -0
- kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/game_objects.js +145 -0
- kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/io.js +14 -0
- kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/kit.js +209 -0
- kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/map.js +107 -0
- kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/parser.js +79 -0
- kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/main.js +88 -0
- kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/main.py +75 -0
- kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/simple.tar.gz +0 -0
- kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/__init__.py +0 -0
- kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/annotate.py +20 -0
- kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/constants.py +25 -0
- kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/game.py +86 -0
- kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/game_constants.json +59 -0
- kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/game_constants.py +7 -0
- kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/game_map.py +106 -0
- kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/game_objects.py +154 -0
- kaggle_environments/envs/lux_ai_2021/test_agents/python/random_agent.py +38 -0
- kaggle_environments/envs/lux_ai_2021/test_agents/python/simple_agent.py +82 -0
- kaggle_environments/envs/lux_ai_2021/test_lux.py +19 -0
- kaggle_environments/envs/lux_ai_2021/testing.md +23 -0
- kaggle_environments/envs/lux_ai_2021/todo.md.og +18 -0
- kaggle_environments/envs/lux_ai_s3/README.md +21 -0
- kaggle_environments/envs/lux_ai_s3/agents.py +5 -0
- kaggle_environments/envs/lux_ai_s3/index.html +42 -0
- kaggle_environments/envs/lux_ai_s3/lux_ai_s3.json +47 -0
- kaggle_environments/envs/lux_ai_s3/lux_ai_s3.py +178 -0
- kaggle_environments/envs/lux_ai_s3/luxai_s3/__init__.py +1 -0
- kaggle_environments/envs/lux_ai_s3/luxai_s3/env.py +819 -0
- kaggle_environments/envs/lux_ai_s3/luxai_s3/globals.py +9 -0
- kaggle_environments/envs/lux_ai_s3/luxai_s3/params.py +101 -0
- kaggle_environments/envs/lux_ai_s3/luxai_s3/profiler.py +141 -0
- kaggle_environments/envs/lux_ai_s3/luxai_s3/pygame_render.py +222 -0
- kaggle_environments/envs/lux_ai_s3/luxai_s3/spaces.py +27 -0
- kaggle_environments/envs/lux_ai_s3/luxai_s3/state.py +464 -0
- kaggle_environments/envs/lux_ai_s3/luxai_s3/utils.py +12 -0
- kaggle_environments/envs/lux_ai_s3/luxai_s3/wrappers.py +156 -0
- kaggle_environments/envs/lux_ai_s3/test_agents/python/agent.py +78 -0
- kaggle_environments/envs/lux_ai_s3/test_agents/python/lux/__init__.py +0 -0
- kaggle_environments/envs/lux_ai_s3/test_agents/python/lux/kit.py +31 -0
- kaggle_environments/envs/lux_ai_s3/test_agents/python/lux/utils.py +17 -0
- kaggle_environments/envs/lux_ai_s3/test_agents/python/main.py +66 -0
- kaggle_environments/envs/lux_ai_s3/test_lux.py +9 -0
- kaggle_environments/envs/mab/__init__.py +0 -0
- kaggle_environments/envs/mab/agents.py +12 -0
- kaggle_environments/envs/mab/mab.js +100 -0
- kaggle_environments/envs/mab/mab.json +74 -0
- kaggle_environments/envs/mab/mab.py +146 -0
- kaggle_environments/envs/open_spiel/__init__.py +0 -0
- kaggle_environments/envs/open_spiel/games/__init__.py +0 -0
- kaggle_environments/envs/open_spiel/games/chess/chess.js +441 -0
- kaggle_environments/envs/open_spiel/games/chess/image_config.jsonl +20 -0
- kaggle_environments/envs/open_spiel/games/chess/openings.jsonl +20 -0
- kaggle_environments/envs/open_spiel/games/connect_four/__init__.py +0 -0
- kaggle_environments/envs/open_spiel/games/connect_four/connect_four.js +284 -0
- kaggle_environments/envs/open_spiel/games/connect_four/connect_four_proxy.py +86 -0
- kaggle_environments/envs/open_spiel/games/go/__init__.py +0 -0
- kaggle_environments/envs/open_spiel/games/go/go.js +481 -0
- kaggle_environments/envs/open_spiel/games/go/go_proxy.py +99 -0
- kaggle_environments/envs/open_spiel/games/tic_tac_toe/__init__.py +0 -0
- kaggle_environments/envs/open_spiel/games/tic_tac_toe/tic_tac_toe.js +345 -0
- kaggle_environments/envs/open_spiel/games/tic_tac_toe/tic_tac_toe_proxy.py +98 -0
- kaggle_environments/envs/open_spiel/games/universal_poker/__init__.py +0 -0
- kaggle_environments/envs/open_spiel/games/universal_poker/universal_poker.js +431 -0
- kaggle_environments/envs/open_spiel/games/universal_poker/universal_poker_proxy.py +159 -0
- kaggle_environments/envs/open_spiel/html_playthrough_generator.py +31 -0
- kaggle_environments/envs/open_spiel/observation.py +128 -0
- kaggle_environments/envs/open_spiel/open_spiel.py +565 -0
- kaggle_environments/envs/open_spiel/proxy.py +138 -0
- kaggle_environments/envs/open_spiel/test_open_spiel.py +191 -0
- kaggle_environments/envs/rps/__init__.py +0 -0
- kaggle_environments/envs/rps/agents.py +84 -0
- kaggle_environments/envs/rps/helpers.py +25 -0
- kaggle_environments/envs/rps/rps.js +117 -0
- kaggle_environments/envs/rps/rps.json +63 -0
- kaggle_environments/envs/rps/rps.py +90 -0
- kaggle_environments/envs/rps/test_rps.py +110 -0
- kaggle_environments/envs/rps/utils.py +7 -0
- kaggle_environments/envs/tictactoe/test_tictactoe.py +43 -77
- kaggle_environments/envs/tictactoe/tictactoe.ipynb +1397 -0
- kaggle_environments/envs/tictactoe/tictactoe.json +10 -2
- kaggle_environments/envs/tictactoe/tictactoe.py +1 -1
- kaggle_environments/errors.py +2 -4
- kaggle_environments/helpers.py +377 -0
- kaggle_environments/main.py +340 -0
- kaggle_environments/schemas.json +23 -18
- kaggle_environments/static/player.html +206 -74
- kaggle_environments/utils.py +46 -73
- kaggle_environments-1.20.0.dist-info/METADATA +25 -0
- kaggle_environments-1.20.0.dist-info/RECORD +211 -0
- {kaggle_environments-0.2.1.dist-info → kaggle_environments-1.20.0.dist-info}/WHEEL +1 -2
- kaggle_environments-1.20.0.dist-info/entry_points.txt +3 -0
- kaggle_environments/envs/battlegeese/battlegeese.py +0 -223
- kaggle_environments/temp.py +0 -14
- kaggle_environments-0.2.1.dist-info/METADATA +0 -393
- kaggle_environments-0.2.1.dist-info/RECORD +0 -32
- kaggle_environments-0.2.1.dist-info/entry_points.txt +0 -3
- kaggle_environments-0.2.1.dist-info/top_level.txt +0 -1
- {kaggle_environments-0.2.1.dist-info → kaggle_environments-1.20.0.dist-info/licenses}/LICENSE +0 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import atexit
|
|
2
|
+
import os
|
|
3
|
+
import sys
|
|
4
|
+
from queue import Empty, Queue
|
|
5
|
+
from subprocess import PIPE, Popen
|
|
6
|
+
from threading import Thread
|
|
7
|
+
|
|
8
|
+
agent_processes = [None, None, None, None]
|
|
9
|
+
t = None
|
|
10
|
+
q = None
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def cleanup_process():
|
|
14
|
+
global agent_processes
|
|
15
|
+
for proc in agent_processes:
|
|
16
|
+
if proc is not None:
|
|
17
|
+
proc.kill()
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def enqueue_output(out, queue):
|
|
21
|
+
for line in iter(out.readline, b""):
|
|
22
|
+
queue.put(line)
|
|
23
|
+
out.close()
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def agent(observation, configuration):
|
|
27
|
+
global agent_processes, t, q
|
|
28
|
+
|
|
29
|
+
agent_process = agent_processes[observation.player]
|
|
30
|
+
### Do not edit ###
|
|
31
|
+
if agent_process is None:
|
|
32
|
+
if "__raw_path__" in configuration:
|
|
33
|
+
cwd = os.path.dirname(configuration["__raw_path__"])
|
|
34
|
+
else:
|
|
35
|
+
cwd = os.path.dirname(__file__)
|
|
36
|
+
agent_process = Popen(["java", "Bot"], stdin=PIPE, stdout=PIPE, stderr=PIPE, cwd=cwd)
|
|
37
|
+
agent_processes[observation.player] = agent_process
|
|
38
|
+
atexit.register(cleanup_process)
|
|
39
|
+
|
|
40
|
+
# following 4 lines from https://stackoverflow.com/questions/375427/a-non-blocking-read-on-a-subprocess-pipe-in-python
|
|
41
|
+
q = Queue()
|
|
42
|
+
t = Thread(target=enqueue_output, args=(agent_process.stderr, q))
|
|
43
|
+
t.daemon = True # thread dies with the program
|
|
44
|
+
t.start()
|
|
45
|
+
|
|
46
|
+
# print observations to agent
|
|
47
|
+
import json
|
|
48
|
+
|
|
49
|
+
agent_process.stdin.write((json.dumps(observation) + "\n").encode())
|
|
50
|
+
agent_process.stdin.write((json.dumps(configuration) + "\n").encode())
|
|
51
|
+
agent_process.stdin.flush()
|
|
52
|
+
|
|
53
|
+
# wait for data written to stdout
|
|
54
|
+
agent1res = (agent_process.stdout.readline()).decode()
|
|
55
|
+
|
|
56
|
+
while True:
|
|
57
|
+
try:
|
|
58
|
+
line = q.get_nowait()
|
|
59
|
+
except Empty:
|
|
60
|
+
# no standard error received, break
|
|
61
|
+
break
|
|
62
|
+
else:
|
|
63
|
+
# standard error output received, print it out
|
|
64
|
+
print(line.decode(), file=sys.stderr, end="")
|
|
65
|
+
|
|
66
|
+
agent1res = agent1res.strip()
|
|
67
|
+
outputs = agent1res.split(",")
|
|
68
|
+
actions = {}
|
|
69
|
+
for cmd in outputs:
|
|
70
|
+
if cmd != "":
|
|
71
|
+
shipyard_id, action_str = cmd.split(":")
|
|
72
|
+
actions[shipyard_id] = action_str
|
|
73
|
+
return actions
|
|
@@ -0,0 +1,567 @@
|
|
|
1
|
+
package test;
|
|
2
|
+
|
|
3
|
+
import java.io.IOException;
|
|
4
|
+
import java.nio.file.Files;
|
|
5
|
+
import java.nio.file.Path;
|
|
6
|
+
import java.nio.file.Paths;
|
|
7
|
+
import java.util.Optional;
|
|
8
|
+
|
|
9
|
+
import org.junit.Assert;
|
|
10
|
+
import org.junit.Test;
|
|
11
|
+
|
|
12
|
+
import kore.Board;
|
|
13
|
+
import kore.Direction;
|
|
14
|
+
import kore.Fleet;
|
|
15
|
+
import kore.Point;
|
|
16
|
+
import kore.Shipyard;
|
|
17
|
+
import kore.ShipyardAction;
|
|
18
|
+
|
|
19
|
+
public class BoardTest {
|
|
20
|
+
|
|
21
|
+
@Test
|
|
22
|
+
public void givenValidConfigAndObservation_createsSuccessful() throws IOException {
|
|
23
|
+
Path configPath = Paths.get("bin", "test", "configuration.json");
|
|
24
|
+
String rawConfig = Files.readString(configPath);
|
|
25
|
+
Path obsPath = Paths.get("bin", "test", "observation.json");
|
|
26
|
+
String rawObs = Files.readString(obsPath);
|
|
27
|
+
|
|
28
|
+
Board board = new Board(rawObs, rawConfig);
|
|
29
|
+
|
|
30
|
+
Assert.assertEquals(16, board.step);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@Test
|
|
34
|
+
public void koreRegenerates() throws IOException {
|
|
35
|
+
Board board = getStarterBoard();
|
|
36
|
+
|
|
37
|
+
Board nextBoard = board.next();
|
|
38
|
+
|
|
39
|
+
Assert.assertTrue("cells should regen", board.cells[3].kore < nextBoard.cells[3].kore);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@Test
|
|
43
|
+
public void spawnShips_spawnsShips() throws IOException {
|
|
44
|
+
Board board = getStarterBoard();
|
|
45
|
+
|
|
46
|
+
String shipyardId = board.players[0].shipyardIds.get(0);
|
|
47
|
+
Shipyard shipyard = board.shipyards.get(shipyardId);
|
|
48
|
+
|
|
49
|
+
shipyard.setNextAction(ShipyardAction.spawnShips(1));
|
|
50
|
+
|
|
51
|
+
Board nextBoard = board.next();
|
|
52
|
+
Shipyard nextShipyard = nextBoard.shipyards.get(shipyardId);
|
|
53
|
+
|
|
54
|
+
Assert.assertEquals(0, shipyard.shipCount);
|
|
55
|
+
Assert.assertEquals(1, nextShipyard.shipCount);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@Test
|
|
59
|
+
public void spawnShips_shawnZeroShipsDoesNothing() throws IOException {
|
|
60
|
+
Board board = getStarterBoard();
|
|
61
|
+
|
|
62
|
+
String shipyardId = board.players[0].shipyardIds.get(0);
|
|
63
|
+
Shipyard shipyard = board.shipyards.get(shipyardId);
|
|
64
|
+
|
|
65
|
+
shipyard.setNextAction(ShipyardAction.spawnShips(0));
|
|
66
|
+
|
|
67
|
+
Board nextBoard = board.next();
|
|
68
|
+
Shipyard nextShipyard = nextBoard.shipyards.get(shipyardId);
|
|
69
|
+
|
|
70
|
+
Assert.assertEquals(0, shipyard.shipCount);
|
|
71
|
+
Assert.assertEquals(0, nextShipyard.shipCount);
|
|
72
|
+
Assert.assertEquals(board.players[0].kore, nextBoard.players[0].kore, .01);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
@Test
|
|
76
|
+
public void launchShips_launchesCorrectly() throws IOException {
|
|
77
|
+
Board board = getStarterBoard();
|
|
78
|
+
|
|
79
|
+
String shipyardId = board.players[0].shipyardIds.get(0);
|
|
80
|
+
Shipyard shipyard = board.shipyards.get(shipyardId);
|
|
81
|
+
shipyard.shipCount = 100;
|
|
82
|
+
|
|
83
|
+
shipyard.setNextAction(ShipyardAction.launchFleetWithFlightPlan(10, "N"));
|
|
84
|
+
|
|
85
|
+
Board nextBoard = board.next();
|
|
86
|
+
Shipyard nextShipyard = nextBoard.shipyards.get(shipyardId);
|
|
87
|
+
|
|
88
|
+
Assert.assertEquals(100, shipyard.shipCount);
|
|
89
|
+
Assert.assertEquals(90, nextShipyard.shipCount);
|
|
90
|
+
|
|
91
|
+
Assert.assertTrue("should have launched a fleet", nextBoard.getFleetAtPoint(shipyard.position.add(Direction.NORTH)).isPresent());
|
|
92
|
+
Fleet launchedFleet = nextBoard.getFleetAtPoint(shipyard.position.add(Direction.NORTH)).get();
|
|
93
|
+
Assert.assertEquals(10, launchedFleet.shipCount);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
@Test
|
|
97
|
+
public void fleetsCoalescence() throws IOException {
|
|
98
|
+
Board board = getStarterBoard();
|
|
99
|
+
|
|
100
|
+
Point p = new Point(10, 10);
|
|
101
|
+
|
|
102
|
+
Fleet f1 = new Fleet("f1", 100, Direction.SOUTH, p.add(Direction.NORTH), 100.0, "", 0, board);
|
|
103
|
+
board.addFleet(f1);
|
|
104
|
+
Fleet f2 = new Fleet("f2", 60, Direction.NORTH, p.add(Direction.SOUTH), 100.0, "", 0, board);
|
|
105
|
+
board.addFleet(f2);
|
|
106
|
+
Fleet f3 = new Fleet("f3", 60, Direction.EAST, p.add(Direction.WEST), 100.0, "", 0, board);
|
|
107
|
+
board.addFleet(f3);
|
|
108
|
+
|
|
109
|
+
Board nextBoard = board.next();
|
|
110
|
+
|
|
111
|
+
Fleet nextFleet = nextBoard.getFleetAtPoint(p).get();
|
|
112
|
+
Assert.assertTrue(nextFleet.id.equals("f1"));
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
@Test
|
|
116
|
+
public void fleetsPickUpKore() throws IOException {
|
|
117
|
+
Board board = getStarterBoard();
|
|
118
|
+
|
|
119
|
+
Point p = new Point(10, 10);
|
|
120
|
+
board.getCellAtPosition(p).kore = 100;
|
|
121
|
+
board.getCellAtPosition(p.add(Direction.SOUTH)).kore = 100;
|
|
122
|
+
|
|
123
|
+
Fleet fleet = new Fleet("test-fleet", 100, Direction.SOUTH, p, 100.0, "8N", 0, board);
|
|
124
|
+
|
|
125
|
+
board.addFleet(fleet);
|
|
126
|
+
|
|
127
|
+
Board nextBoard = board.next();
|
|
128
|
+
|
|
129
|
+
Fleet nextFleet = nextBoard.getFleetAtPoint(p.add(Direction.SOUTH)).get();
|
|
130
|
+
Assert.assertTrue(nextFleet.kore > fleet.kore);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
@Test
|
|
134
|
+
public void updatesFlightPlan_decrements() throws IOException {
|
|
135
|
+
Board board = getStarterBoard();
|
|
136
|
+
|
|
137
|
+
Point p = new Point(10, 11);
|
|
138
|
+
|
|
139
|
+
Fleet f = new Fleet("test-fleet", 10, Direction.SOUTH, p, 100.0, "8N", 0, board);
|
|
140
|
+
|
|
141
|
+
board.addFleet(f);
|
|
142
|
+
|
|
143
|
+
Board nextBoard = board.next();
|
|
144
|
+
|
|
145
|
+
Fleet nextFleet = nextBoard.getFleetAtPoint(new Point(10, 10)).get();
|
|
146
|
+
Assert.assertEquals(Direction.SOUTH.toChar(), nextFleet.direction.toChar());
|
|
147
|
+
Assert.assertEquals("7N", nextFleet.flightPlan);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
@Test
|
|
151
|
+
public void updatesFlightPlan_changesDirection() throws IOException {
|
|
152
|
+
Board board = getStarterBoard();
|
|
153
|
+
|
|
154
|
+
Point p = new Point(10, 11);
|
|
155
|
+
|
|
156
|
+
Fleet f = new Fleet("test-fleet", 10, Direction.NORTH, p, 100.0, "S", 0, board);
|
|
157
|
+
|
|
158
|
+
board.addFleet(f);
|
|
159
|
+
|
|
160
|
+
Board nextBoard = board.next();
|
|
161
|
+
|
|
162
|
+
Fleet nextFleet = nextBoard.getFleetAtPoint(new Point(10, 10)).get();
|
|
163
|
+
Assert.assertEquals(Direction.SOUTH.toChar(), nextFleet.direction.toChar());
|
|
164
|
+
Assert.assertEquals("", nextFleet.flightPlan);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
@Test
|
|
168
|
+
public void updatesFlightPlan_convertsToShipyard() throws IOException {
|
|
169
|
+
Board board = getStarterBoard();
|
|
170
|
+
|
|
171
|
+
Point p = new Point(10, 11);
|
|
172
|
+
|
|
173
|
+
Fleet f = new Fleet("test-fleet", 100, Direction.NORTH, p, 100.0, "C", 0, board);
|
|
174
|
+
|
|
175
|
+
board.addFleet(f);
|
|
176
|
+
|
|
177
|
+
Board nextBoard = board.next();
|
|
178
|
+
|
|
179
|
+
Assert.assertTrue("should have made a shipyard", nextBoard.getShipyardAtPoint(p).isPresent());
|
|
180
|
+
Shipyard nextShipyard = nextBoard.getShipyardAtPoint(p).get();
|
|
181
|
+
Assert.assertEquals(0, nextShipyard.playerId);
|
|
182
|
+
Assert.assertEquals(50, nextShipyard.shipCount);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
@Test
|
|
186
|
+
public void updatesFlightPlan_doesNotConvertIfNotEnoughShips() throws IOException {
|
|
187
|
+
Board board = getStarterBoard();
|
|
188
|
+
|
|
189
|
+
Point p = new Point(10, 11);
|
|
190
|
+
|
|
191
|
+
Fleet f = new Fleet("test-fleet", 10, Direction.SOUTH, p, 100.0, "C", 0, board);
|
|
192
|
+
|
|
193
|
+
board.addFleet(f);
|
|
194
|
+
|
|
195
|
+
Board nextBoard = board.next();
|
|
196
|
+
|
|
197
|
+
Assert.assertTrue("should not have made a shipyard", nextBoard.getShipyardAtPoint(p).isEmpty());
|
|
198
|
+
Fleet nextFleet = nextBoard.getFleetAtPoint(new Point(10, 10)).get();
|
|
199
|
+
Assert.assertEquals(Direction.SOUTH.toChar(), nextFleet.direction.toChar());
|
|
200
|
+
Assert.assertEquals(10, nextFleet.shipCount);
|
|
201
|
+
Assert.assertEquals("", nextFleet.flightPlan);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
@Test
|
|
205
|
+
public void updatesFlightPlan_worksWithMultipleConverts() throws IOException {
|
|
206
|
+
Board board = getStarterBoard();
|
|
207
|
+
|
|
208
|
+
Point p = new Point(10, 11);
|
|
209
|
+
|
|
210
|
+
Fleet f = new Fleet("test-fleet", 10, Direction.SOUTH, p, 100.0, "CCC", 0, board);
|
|
211
|
+
|
|
212
|
+
board.addFleet(f);
|
|
213
|
+
|
|
214
|
+
board = board.next();
|
|
215
|
+
board = board.next();
|
|
216
|
+
board = board.next();
|
|
217
|
+
|
|
218
|
+
Assert.assertTrue("should not have crashed", true);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
@Test
|
|
222
|
+
public void correctlyJoinAlliedFleet() throws IOException {
|
|
223
|
+
Board board = getStarterBoard();
|
|
224
|
+
|
|
225
|
+
Point p1 = new Point(10, 11);
|
|
226
|
+
Point p2 = new Point(10, 9);
|
|
227
|
+
|
|
228
|
+
Fleet f1 = new Fleet("f1", 10, Direction.SOUTH, p1, 100.0, "", 0, board);
|
|
229
|
+
Fleet f2 = new Fleet("f2", 11, Direction.NORTH, p2, 100.0, "", 0, board);
|
|
230
|
+
|
|
231
|
+
board.addFleet(f1);
|
|
232
|
+
board.addFleet(f2);
|
|
233
|
+
|
|
234
|
+
Board nextBoard = board.next();
|
|
235
|
+
|
|
236
|
+
Fleet combinedFleet = nextBoard.getFleetAtPoint(new Point(10, 10)).get();
|
|
237
|
+
Assert.assertEquals(Direction.NORTH.toChar(), combinedFleet.direction.toChar());
|
|
238
|
+
Assert.assertEquals(21, combinedFleet.shipCount);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
@Test
|
|
242
|
+
public void correctlyJoinAlliedFleet_onFirstTieBreak() throws IOException {
|
|
243
|
+
Board board = getStarterBoard();
|
|
244
|
+
|
|
245
|
+
Point p1 = new Point(10, 11);
|
|
246
|
+
Point p2 = new Point(10, 9);
|
|
247
|
+
|
|
248
|
+
Fleet f1 = new Fleet("f1", 10, Direction.SOUTH, p1, 100.0, "", 0, board);
|
|
249
|
+
Fleet f2 = new Fleet("f2", 10, Direction.NORTH, p2, 101.0, "10S", 0, board);
|
|
250
|
+
|
|
251
|
+
board.addFleet(f1);
|
|
252
|
+
board.addFleet(f2);
|
|
253
|
+
|
|
254
|
+
Board nextBoard = board.next();
|
|
255
|
+
|
|
256
|
+
Fleet combinedFleet = nextBoard.getFleetAtPoint(new Point(10, 10)).get();
|
|
257
|
+
Assert.assertEquals(Direction.NORTH.toChar(), combinedFleet.direction.toChar());
|
|
258
|
+
Assert.assertEquals(20, combinedFleet.shipCount);
|
|
259
|
+
Assert.assertEquals("9S", combinedFleet.flightPlan);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
@Test
|
|
263
|
+
public void correctlyJoinAlliedFleet_onSecondTieBreak() throws IOException {
|
|
264
|
+
Board board = getStarterBoard();
|
|
265
|
+
|
|
266
|
+
Point p1 = new Point(10, 11);
|
|
267
|
+
Point p2 = new Point(10, 9);
|
|
268
|
+
|
|
269
|
+
Fleet f1 = new Fleet("f1", 10, Direction.SOUTH, p1, 100.0, "", 0, board);
|
|
270
|
+
Fleet f2 = new Fleet("f2", 10, Direction.NORTH, p2, 100.0, "", 0, board);
|
|
271
|
+
|
|
272
|
+
board.addFleet(f1);
|
|
273
|
+
board.addFleet(f2);
|
|
274
|
+
|
|
275
|
+
Board nextBoard = board.next();
|
|
276
|
+
|
|
277
|
+
Fleet combinedFleet = nextBoard.getFleetAtPoint(new Point(10, 10)).get();
|
|
278
|
+
Assert.assertEquals(Direction.NORTH.toChar(), combinedFleet.direction.toChar());
|
|
279
|
+
Assert.assertEquals(20, combinedFleet.shipCount);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
@Test
|
|
283
|
+
public void correctlyResolvesFleetBattles_whenThereIsAWinner() throws IOException {
|
|
284
|
+
Board board = getStarterBoard();
|
|
285
|
+
|
|
286
|
+
Point p1 = new Point(9, 11);
|
|
287
|
+
Point p2 = new Point(10, 9);
|
|
288
|
+
|
|
289
|
+
Fleet f1 = new Fleet("f1", 10, Direction.SOUTH, p1, 100.0, "", 0, board);
|
|
290
|
+
Fleet f2 = new Fleet("f2", 11, Direction.NORTH, p2, 100.0, "", 1, board);
|
|
291
|
+
|
|
292
|
+
board.addFleet(f1);
|
|
293
|
+
board.addFleet(f2);
|
|
294
|
+
|
|
295
|
+
Board nextBoard = board.next();
|
|
296
|
+
|
|
297
|
+
Assert.assertTrue("should have a surviving fleet", nextBoard.getFleetAtPoint(new Point(10, 10)).isPresent());
|
|
298
|
+
Fleet survivingFleet = nextBoard.getFleetAtPoint(new Point(10, 10)).get();
|
|
299
|
+
Assert.assertEquals(Direction.NORTH.toChar(), survivingFleet.direction.toChar());
|
|
300
|
+
Assert.assertEquals(1, survivingFleet.shipCount);
|
|
301
|
+
Assert.assertEquals(1, survivingFleet.playerId);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
@Test
|
|
305
|
+
public void correctlyResolvesFleetBattles_whenThereIsATie() throws IOException {
|
|
306
|
+
Board board = getStarterBoard();
|
|
307
|
+
|
|
308
|
+
Point p1 = new Point(10, 11);
|
|
309
|
+
Point p2 = new Point(10, 9);
|
|
310
|
+
|
|
311
|
+
Fleet f1 = new Fleet("f1", 10, Direction.SOUTH, p1, 100.0, "", 0, board);
|
|
312
|
+
Fleet f2 = new Fleet("f2", 10, Direction.NORTH, p2, 100.0, "", 1, board);
|
|
313
|
+
|
|
314
|
+
board.addFleet(f1);
|
|
315
|
+
board.addFleet(f2);
|
|
316
|
+
|
|
317
|
+
Board nextBoard = board.next();
|
|
318
|
+
|
|
319
|
+
Point collision = new Point(10, 10);
|
|
320
|
+
Assert.assertTrue("should not have a surviving fleet", nextBoard.getFleetAtPoint(collision).isEmpty());
|
|
321
|
+
Assert.assertTrue("should have dropped halite", board.getCellAtPosition(collision).kore + 100 < nextBoard.getCellAtPosition(collision).kore);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
@Test
|
|
325
|
+
public void correctlyResolvesFleetCollisions_whenThereIsAWinner() throws IOException {
|
|
326
|
+
Board board = getStarterBoard();
|
|
327
|
+
|
|
328
|
+
Point p1 = new Point(10, 11);
|
|
329
|
+
Point p2 = new Point(10, 9);
|
|
330
|
+
|
|
331
|
+
Fleet f1 = new Fleet("f1", 10, Direction.SOUTH, p1, 100.0, "", 0, board);
|
|
332
|
+
Fleet f2 = new Fleet("f2", 11, Direction.NORTH, p2, 100.0, "", 1, board);
|
|
333
|
+
|
|
334
|
+
board.addFleet(f1);
|
|
335
|
+
board.addFleet(f2);
|
|
336
|
+
|
|
337
|
+
Board nextBoard = board.next();
|
|
338
|
+
|
|
339
|
+
Assert.assertTrue("should have a surviving fleet", nextBoard.getFleetAtPoint(new Point(10, 10)).isPresent());
|
|
340
|
+
Fleet survivingFleet = nextBoard.getFleetAtPoint(new Point(10, 10)).get();
|
|
341
|
+
Assert.assertEquals(Direction.NORTH.toChar(), survivingFleet.direction.toChar());
|
|
342
|
+
Assert.assertEquals(1, survivingFleet.shipCount);
|
|
343
|
+
Assert.assertEquals(1, survivingFleet.playerId);
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
@Test
|
|
347
|
+
public void correctlyResolvesFleetCollisions_whenThereAreMultipleFromOnePlayer() throws IOException {
|
|
348
|
+
Board board = getStarterBoard();
|
|
349
|
+
|
|
350
|
+
Point p1 = new Point(10, 11);
|
|
351
|
+
Point p2 = new Point(10, 9);
|
|
352
|
+
Point p3 = new Point(9, 10);
|
|
353
|
+
|
|
354
|
+
Fleet f1 = new Fleet("f1", 10, Direction.SOUTH, p1, 100.0, "", 0, board);
|
|
355
|
+
Fleet f2 = new Fleet("f2", 11, Direction.NORTH, p2, 100.0, "", 1, board);
|
|
356
|
+
Fleet f3 = new Fleet("f3", 2, Direction.EAST, p3, 100.0, "", 0, board);
|
|
357
|
+
|
|
358
|
+
board.addFleet(f1);
|
|
359
|
+
board.addFleet(f2);
|
|
360
|
+
board.addFleet(f3);
|
|
361
|
+
|
|
362
|
+
Board nextBoard = board.next();
|
|
363
|
+
|
|
364
|
+
Assert.assertTrue("should have a surviving fleet", nextBoard.getFleetAtPoint(new Point(10, 10)).isPresent());
|
|
365
|
+
Fleet survivingFleet = nextBoard.getFleetAtPoint(new Point(10, 10)).get();
|
|
366
|
+
Assert.assertEquals(Direction.SOUTH.toChar(), survivingFleet.direction.toChar());
|
|
367
|
+
Assert.assertEquals(1, survivingFleet.shipCount);
|
|
368
|
+
Assert.assertEquals(0, survivingFleet.playerId);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
@Test
|
|
372
|
+
public void correctlyResolvesFleetCollisions_whenThereAreThreeFleets() throws IOException {
|
|
373
|
+
Board board = getStarterBoard();
|
|
374
|
+
|
|
375
|
+
Point p1 = new Point(10, 11);
|
|
376
|
+
Point p2 = new Point(10, 9);
|
|
377
|
+
Point p3 = new Point(9, 10);
|
|
378
|
+
|
|
379
|
+
Fleet f1 = new Fleet("f1", 10, Direction.SOUTH, p1, 100.0, "", 0, board);
|
|
380
|
+
Fleet f2 = new Fleet("f2", 11, Direction.NORTH, p2, 100.0, "", 1, board);
|
|
381
|
+
Fleet f3 = new Fleet("f3", 2, Direction.EAST, p3, 100.0, "", 2, board);
|
|
382
|
+
|
|
383
|
+
board.addFleet(f1);
|
|
384
|
+
board.addFleet(f2);
|
|
385
|
+
board.addFleet(f3);
|
|
386
|
+
|
|
387
|
+
Board nextBoard = board.next();
|
|
388
|
+
|
|
389
|
+
Assert.assertTrue("should have a surviving fleet", nextBoard.getFleetAtPoint(new Point(10, 10)).isPresent());
|
|
390
|
+
Fleet survivingFleet = nextBoard.getFleetAtPoint(new Point(10, 10)).get();
|
|
391
|
+
Assert.assertEquals(Direction.NORTH.toChar(), survivingFleet.direction.toChar());
|
|
392
|
+
Assert.assertEquals(1, survivingFleet.shipCount);
|
|
393
|
+
Assert.assertEquals(1, survivingFleet.playerId);
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
@Test
|
|
397
|
+
public void correctlyResolvesFleetCollisions_whenThereIsATie() throws IOException {
|
|
398
|
+
Board board = getStarterBoard();
|
|
399
|
+
|
|
400
|
+
Point p1 = new Point(10, 11);
|
|
401
|
+
Point p2 = new Point(10, 9);
|
|
402
|
+
|
|
403
|
+
Fleet f1 = new Fleet("f1", 10, Direction.SOUTH, p1, 100.0, "", 0, board);
|
|
404
|
+
Fleet f2 = new Fleet("f2", 10, Direction.NORTH, p2, 100.0, "", 1, board);
|
|
405
|
+
|
|
406
|
+
board.addFleet(f1);
|
|
407
|
+
board.addFleet(f2);
|
|
408
|
+
|
|
409
|
+
Board nextBoard = board.next();
|
|
410
|
+
|
|
411
|
+
Point collision = new Point(10, 10);
|
|
412
|
+
Assert.assertTrue("should not have a surviving fleet", nextBoard.getFleetAtPoint(collision).isEmpty());
|
|
413
|
+
Assert.assertTrue("should have dropped halite", board.getCellAtPosition(collision).kore + 100 < nextBoard.getCellAtPosition(collision).kore);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
@Test
|
|
417
|
+
public void fleetShipyardCollision_worksWhenTheyAreAllied() throws IOException {
|
|
418
|
+
Board board = getStarterBoard();
|
|
419
|
+
|
|
420
|
+
Point p1 = new Point(10, 11);
|
|
421
|
+
Point p2 = new Point(10, 10);
|
|
422
|
+
|
|
423
|
+
Fleet f1 = new Fleet("f1", 10, Direction.SOUTH, p1, 100.0, "", 0, board);
|
|
424
|
+
Shipyard s1 = new Shipyard("s1", 0, p2, 0, 100, board, Optional.empty());
|
|
425
|
+
|
|
426
|
+
board.addFleet(f1);
|
|
427
|
+
board.addShipyard(s1);
|
|
428
|
+
|
|
429
|
+
Board nextBoard = board.next();
|
|
430
|
+
|
|
431
|
+
Assert.assertTrue("should not have a fleet on the square", nextBoard.getFleetAtPoint(p2).isEmpty());
|
|
432
|
+
Assert.assertTrue("should have a shipyard on the square", nextBoard.getShipyardAtPoint(p2).isPresent());
|
|
433
|
+
Shipyard nextShipyard = nextBoard.getShipyardAtPoint(p2).get();
|
|
434
|
+
Assert.assertEquals(10, nextShipyard.shipCount);
|
|
435
|
+
Assert.assertEquals(0, nextShipyard.playerId);
|
|
436
|
+
Assert.assertEquals(100, s1.turnsControlled);
|
|
437
|
+
Assert.assertEquals(101, nextShipyard.turnsControlled);
|
|
438
|
+
Assert.assertEquals(nextBoard.players[0].kore, board.players[0].kore + 100, .01);
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
@Test
|
|
442
|
+
public void fleetShipyardCollision_smallerFleetDoesNotTakeOverLargerShipyard() throws IOException {
|
|
443
|
+
Board board = getStarterBoard();
|
|
444
|
+
|
|
445
|
+
Point p1 = new Point(10, 11);
|
|
446
|
+
Point p2 = new Point(10, 10);
|
|
447
|
+
|
|
448
|
+
Fleet f1 = new Fleet("f1", 10, Direction.SOUTH, p1, 100.0, "", 1, board);
|
|
449
|
+
Shipyard s1 = new Shipyard("s1", 100, p2, 0, 100, board, Optional.empty());
|
|
450
|
+
|
|
451
|
+
board.addFleet(f1);
|
|
452
|
+
board.addShipyard(s1);
|
|
453
|
+
|
|
454
|
+
Board nextBoard = board.next();
|
|
455
|
+
|
|
456
|
+
Assert.assertTrue("should not have a fleet on the square", nextBoard.getFleetAtPoint(p2).isEmpty());
|
|
457
|
+
Assert.assertTrue("should have a shipyard on the square", nextBoard.getShipyardAtPoint(p2).isPresent());
|
|
458
|
+
Shipyard nextShipyard = nextBoard.getShipyardAtPoint(p2).get();
|
|
459
|
+
Assert.assertEquals(90, nextShipyard.shipCount);
|
|
460
|
+
Assert.assertEquals(0, nextShipyard.playerId);
|
|
461
|
+
Assert.assertEquals(100, s1.turnsControlled);
|
|
462
|
+
Assert.assertEquals(101, nextShipyard.turnsControlled);
|
|
463
|
+
Assert.assertEquals(nextBoard.players[0].kore, board.players[0].kore + 100, .01);
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
@Test
|
|
467
|
+
public void fleetShipyardCollision_equalFleetDoesNotTakeOverLargerShipyard() throws IOException {
|
|
468
|
+
Board board = getStarterBoard();
|
|
469
|
+
|
|
470
|
+
Point p1 = new Point(10, 11);
|
|
471
|
+
Point p2 = new Point(10, 10);
|
|
472
|
+
|
|
473
|
+
Fleet f1 = new Fleet("f1", 100, Direction.SOUTH, p1, 100.0, "", 1, board);
|
|
474
|
+
Shipyard s1 = new Shipyard("s1", 100, p2, 0, 100, board, Optional.empty());
|
|
475
|
+
|
|
476
|
+
board.addFleet(f1);
|
|
477
|
+
board.addShipyard(s1);
|
|
478
|
+
|
|
479
|
+
Board nextBoard = board.next();
|
|
480
|
+
|
|
481
|
+
Assert.assertTrue("should not have a fleet on the square", nextBoard.getFleetAtPoint(p2).isEmpty());
|
|
482
|
+
Assert.assertTrue("should have a shipyard on the square", nextBoard.getShipyardAtPoint(p2).isPresent());
|
|
483
|
+
Shipyard nextShipyard = nextBoard.getShipyardAtPoint(p2).get();
|
|
484
|
+
Assert.assertEquals(0, nextShipyard.shipCount);
|
|
485
|
+
Assert.assertEquals(0, nextShipyard.playerId);
|
|
486
|
+
Assert.assertEquals(100, s1.turnsControlled);
|
|
487
|
+
Assert.assertEquals(101, nextShipyard.turnsControlled);
|
|
488
|
+
Assert.assertEquals(nextBoard.players[0].kore, board.players[0].kore + 100, .01);
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
@Test
|
|
492
|
+
public void fleetShipyardCollision_largerFleetDoesTakeOverSmallerShipyard() throws IOException {
|
|
493
|
+
Board board = getStarterBoard();
|
|
494
|
+
|
|
495
|
+
Point p1 = new Point(10, 11);
|
|
496
|
+
Point p2 = new Point(10, 10);
|
|
497
|
+
|
|
498
|
+
Fleet f1 = new Fleet("f1", 110, Direction.SOUTH, p1, 100.0, "", 1, board);
|
|
499
|
+
Shipyard s1 = new Shipyard("s1", 100, p2, 0, 100, board, Optional.empty());
|
|
500
|
+
|
|
501
|
+
board.addFleet(f1);
|
|
502
|
+
board.addShipyard(s1);
|
|
503
|
+
|
|
504
|
+
Board nextBoard = board.next();
|
|
505
|
+
|
|
506
|
+
Assert.assertTrue("should not have a fleet on the square", nextBoard.getFleetAtPoint(p2).isEmpty());
|
|
507
|
+
Assert.assertTrue("should have a shipyard on the square", nextBoard.getShipyardAtPoint(p2).isPresent());
|
|
508
|
+
Shipyard nextShipyard = nextBoard.getShipyardAtPoint(p2).get();
|
|
509
|
+
Assert.assertEquals(10, nextShipyard.shipCount);
|
|
510
|
+
Assert.assertEquals(1, nextShipyard.playerId);
|
|
511
|
+
Assert.assertEquals(100, s1.turnsControlled);
|
|
512
|
+
Assert.assertEquals(1, nextShipyard.turnsControlled);
|
|
513
|
+
Assert.assertEquals(nextBoard.players[1].kore, board.players[1].kore + 100, .01);
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
@Test
|
|
517
|
+
public void fleetAdjacentBattle_dropsKoreCorrectlyWhenBothDie() throws IOException {
|
|
518
|
+
Board board = getStarterBoard();
|
|
519
|
+
|
|
520
|
+
Point p1 = new Point(10, 11);
|
|
521
|
+
Fleet f1 = new Fleet("f1", 100, Direction.NORTH, p1, 100.0, "", 0, board);
|
|
522
|
+
double p1Kore = board.getCellAtPosition(p1.add(Direction.NORTH)).kore;
|
|
523
|
+
board.addFleet(f1);
|
|
524
|
+
|
|
525
|
+
Point p2 = p1.add(Direction.NORTH).add(Direction.NORTH).add(Direction.EAST);
|
|
526
|
+
Fleet f2 = new Fleet("f2", 100, Direction.SOUTH, p2, 100.0, "", 1, board);
|
|
527
|
+
board.addFleet(f2);
|
|
528
|
+
|
|
529
|
+
Board nextBoard = board.next();
|
|
530
|
+
|
|
531
|
+
double p1NextKore = nextBoard.getCellAtPosition(p1.add(Direction.NORTH)).kore;
|
|
532
|
+
Assert.assertTrue("should have been destroyed", !nextBoard.fleets.containsKey("f1"));
|
|
533
|
+
Assert.assertTrue("should dump all kore", p1Kore + 100 < p1NextKore);
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
@Test
|
|
537
|
+
public void fleetAdjacentBattle_dropsKoreCorrectlyWhenOneDies() throws IOException {
|
|
538
|
+
Board board = getStarterBoard();
|
|
539
|
+
|
|
540
|
+
Point p1 = new Point(10, 11);
|
|
541
|
+
Fleet f1 = new Fleet("f1", 50, Direction.NORTH, p1, 100.0, "", 0, board);
|
|
542
|
+
double p1Kore = board.getCellAtPosition(p1.add(Direction.NORTH)).kore;
|
|
543
|
+
board.addFleet(f1);
|
|
544
|
+
|
|
545
|
+
Point p2 = p1.add(Direction.NORTH).add(Direction.NORTH).add(Direction.EAST);
|
|
546
|
+
Fleet f2 = new Fleet("f2", 100, Direction.SOUTH, p2, 100.0, "", 1, board);
|
|
547
|
+
board.addFleet(f2);
|
|
548
|
+
|
|
549
|
+
Board nextBoard = board.next();
|
|
550
|
+
|
|
551
|
+
double p1NextKore = nextBoard.getCellAtPosition(p1.add(Direction.NORTH)).kore;
|
|
552
|
+
Assert.assertTrue("should have been destroyed", !nextBoard.fleets.containsKey("f1"));
|
|
553
|
+
Assert.assertTrue("should dump half kore", p1Kore + 50 < p1NextKore && p1Kore + 55 > p1NextKore);
|
|
554
|
+
|
|
555
|
+
Fleet f2next = nextBoard.fleets.get("f2");
|
|
556
|
+
Assert.assertTrue("Should have picked up half", f2.kore + 50 <= f2next.kore && f2.kore + 55 > f2next.kore);
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
private Board getStarterBoard() throws IOException {
|
|
560
|
+
Path configPath = Paths.get("bin", "test", "configuration.json");
|
|
561
|
+
String rawConfig = Files.readString(configPath);
|
|
562
|
+
Path obsPath = Paths.get("bin", "test", "observation.json");
|
|
563
|
+
String rawObs = Files.readString(obsPath);
|
|
564
|
+
|
|
565
|
+
return new Board(rawObs, rawConfig);
|
|
566
|
+
}
|
|
567
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
package test;
|
|
2
|
+
|
|
3
|
+
import java.io.IOException;
|
|
4
|
+
import java.nio.file.Files;
|
|
5
|
+
import java.nio.file.Path;
|
|
6
|
+
import java.nio.file.Paths;
|
|
7
|
+
|
|
8
|
+
import org.junit.Assert;
|
|
9
|
+
import org.junit.Test;
|
|
10
|
+
|
|
11
|
+
import kore.Configuration;
|
|
12
|
+
|
|
13
|
+
public class ConfigurationTest {
|
|
14
|
+
|
|
15
|
+
@Test
|
|
16
|
+
public void givenValidConfiguration_createSuccessful() throws IOException {
|
|
17
|
+
Path configPath = Paths.get("bin", "test", "configuration.json");
|
|
18
|
+
String rawConfig = Files.readString(configPath);
|
|
19
|
+
|
|
20
|
+
Configuration config = new Configuration(rawConfig);
|
|
21
|
+
|
|
22
|
+
Assert.assertEquals(0.02, config.regenRate, .001);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
}
|