1 package cz.cuni.amis.pogamut.defcon.generator;
2
3
4 import cz.cuni.amis.pogamut.defcon.agent.module.sensor.GameInfo;
5 import cz.cuni.amis.pogamut.defcon.consts.UnitType;
6
7
8
9
10
11
12
13 public class FleetGenerator {
14
15 public enum FleetType {
16 SUBS,
17 CARRIERS,
18 BATTLESHIPS,
19 CARRIERS_WITH_SUBS,
20 CARRIERS_WITH_BATTLESHIPS,
21 BATTLESHIPS_WITH_SUBS,
22 MIXED
23 }
24
25 public static UnitType[] getNewFleet(FleetType type, GameInfo info) {
26
27 UnitType[] output = null;
28 switch (type) {
29 case SUBS:
30 output = fillWith(UnitType.SUB, info);
31 break;
32 case CARRIERS:
33 output = fillWith(UnitType.CARRIER, info);
34 break;
35 case BATTLESHIPS:
36 output = fillWith(UnitType.BATTLE_SHIP, info);
37 break;
38 case CARRIERS_WITH_SUBS:
39 output = new UnitType[] {
40 UnitType.CARRIER,
41 UnitType.CARRIER,
42 UnitType.CARRIER,
43 UnitType.SUB,
44 UnitType.SUB,
45 UnitType.SUB };
46 break;
47 case CARRIERS_WITH_BATTLESHIPS:
48 output = new UnitType[] {
49 UnitType.BATTLE_SHIP,
50 UnitType.BATTLE_SHIP,
51 UnitType.BATTLE_SHIP,
52 UnitType.CARRIER,
53 UnitType.CARRIER,
54 UnitType.CARRIER };
55 break;
56 case BATTLESHIPS_WITH_SUBS:
57 output = new UnitType[] {
58 UnitType.BATTLE_SHIP,
59 UnitType.BATTLE_SHIP,
60 UnitType.BATTLE_SHIP,
61 UnitType.SUB,
62 UnitType.SUB,
63 UnitType.SUB };
64 break;
65 case MIXED:
66 output = new UnitType[] {
67 UnitType.BATTLE_SHIP,
68 UnitType.BATTLE_SHIP,
69 UnitType.CARRIER,
70 UnitType.CARRIER,
71 UnitType.SUB,
72 UnitType.SUB };
73 default:
74 break;
75 }
76
77 return output;
78 }
79
80 private static UnitType[] fillWith(UnitType type, GameInfo info) {
81 int creds_left = info.getUnitCredits();
82 int price_for_one = info.getUnitValue(type);
83
84 if (creds_left < price_for_one)
85 return null;
86
87 UnitType[] output = new UnitType[6];
88
89 int i = 0;
90 for (; i < 6 && creds_left >= price_for_one; ++i) {
91 output[i] = type;
92 creds_left -= price_for_one;
93 }
94 for (; i < 6; ++i) {
95 output[i] = null;
96 }
97 return output;
98 }
99 }