public boolean sameState(final Game game) {
		if (this == game) {
			return true;
		}

		if (!slotRng.equals(game.slotRng)) {
			return false;
		}

		if (!player.equals(game.player)) {
			return false;
		}

		if (floors.size() != game.floors.size()) {
			return false;
		}
		for (Map.Entry<Integer, Floor> entry : floors.entrySet()) {
			final int floorId = entry.getKey();
			final Floor expectedFloor = entry.getValue();
			final Floor actualFloor = game.floors.get(floorId);
			if ((actualFloor == null) || !expectedFloor.sameState(actualFloor)) {
				return false;
			}
		}

		return true;
	}