public static void startGame(final BattleContainer container,
			final Channel<String> channel, final Map<String, Coordinate> map,
			final Map<String, BLabel> units) {
		final IconResource goldIcon = new IconResource("players/gold.png");
		final IconResource silverIcon = new IconResource("players/silver.png");

		while (true) {
			final String message = channel.receive();
			final String[] arguments = message.split(" ");
			if (arguments.length == 0) {
				System.err.println("Invalid message.");
				continue;

			} else if (arguments.length == 1) {
				final String unitId = arguments[0];
				final BLabel unit = units.get(unitId);
				units.remove(unit);
				container.remove(unit);
				container.repaint();

			} else {
				final String unitId = arguments[0];
				final String destination = arguments[1];
				final String rate = arguments.length > 2 ? arguments[2] : "1.0";

				if (map.get(destination) == null) {
					System.err.println("Unknown destination \"" + destination
							+ "\" for unit " + unitId);
					continue;
				}

				BLabel unit = units.get(unitId);
				if (unit == null) {
					unit = new BLabel(unitId.startsWith("g") ? goldIcon
							: silverIcon, BLabel.CENTER);
					units.put(unitId, unit);
					System.out.println("Added unit: " + unitId);
				}

				float factor;
				try {
					factor = Float.parseFloat(rate);
				} catch (final NumberFormatException e) {
					System.err.println("Invalid movement factor: " + rate);
					factor = 1.0f;
				}

				ConcurBattles.move(container, unit, map.get(destination),
						factor);
				if (factor == 1.0f) {
					System.out.println(unitId + " arrived to " + destination);
				}
			}
		}
	}