View Javadoc

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    * Provides a fleet composition based on the given fleet type.
9    * 
10   * @author Radek 'Black_Hand' Pibil
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  		// int creds_left = info.getUnitCredits();
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  }