コード例 #1
0
ファイル: luminesrobot.cpp プロジェクト: kaikai2/luminesk5
//LuminesRobot::LuminesRobot(){}
//LuminesRobot::~LuminesRobot(){}
void LuminesRobot::thinkNextBlockI(
    Sets &baseSet,
    ::std::vector< int > &tops,
    ::std::vector< Sets > &sets,
    int level,
    btype *map, int width, int height, const BlockSet coming[3])
{
    int i, r, t;
    int top1, top2, score;
    BlockSet bs;
    top2 = tops[0];
    for (i=0; i < width-1; i++)
    {
        top1 = tops[i];
        top2 = tops[i+1];
        tops[i] = max(0, top1 - 2);
        tops[i+1] = max(0, top2 - 2);
        for (r = 0; r < 4; r++)
        {
            score = 0;
            bs = s_rotmap[coming[level]][r]; // rotate by y times
            if (top1>=0)
            {
                score += getlink(map, width, height, i, top1, s_posbt[bs][2]);
                t = i+top1*width;
                assert(t >=0 && t < width*height);
                map[t] = s_posbt[bs][2];
                if (top1>0)
                {
                    score += getlink(map, width, height, i, top1-1, s_posbt[bs][0]);
                    t = i+(top1-1)*width;
                    assert(t >=0 && t < width*height);
                    map[t] = s_posbt[bs][0];
                }
            }
            if (top2>=0)
            {
                score += getlink(map, width, height, i+1, top2, s_posbt[bs][3]);
                t = i+1+top2*width;
                assert(t >=0 && t < width*height);
                map[t] = s_posbt[bs][3];
                if (top2>0)
                {
                    score += getlink(map, width, height, i+1, top2-1, s_posbt[bs][1]);
                    t = i+1+(top2-1)*width;
                    assert(t >=0 && t < width*height);
                    map[t] = s_posbt[bs][1];
                }
            }
            if (level < MAX_LEVEL - 1)
            {

                thinkNextBlockI(
                    Sets(baseSet, i, r, score, max(0, min(top1,top2)-1)), 
                    tops, 
                    sets, 
                    level+1, map, width, height, coming);
            }
            else
            {
                sets.push_back(
                    Sets(baseSet, i, r, score, max(0, min(top1,top2)-1))
                    );
            }

            if (top1>=0)
            {
                map[i+top1*width] = BT_NONE;
                if (top1>0)
                    map[i+(top1-1)*width] = BT_NONE;
            }
            if (top2>=0)
            {
                map[i+1+top2*width] = BT_NONE;
                if (top2>0)
                    map[i+1+(top2-1)*width] = BT_NONE;
            }
        }
        tops[i] = top1;
        tops[i+1] = top2;
    }
}
コード例 #2
0
ファイル: LiftingActivity.cpp プロジェクト: msimms/Exert
ActivityAttributeType LiftingActivity::QueryActivityAttribute(const std::string& attributeName) const
{
	ActivityAttributeType result;

	result.startTime = 0;
	result.endTime = 0;
	result.unitSystem = UnitMgr::GetUnitSystem();

	if (attributeName.compare(ACTIVITY_ATTRIBUTE_REPS) == 0)
	{
		result.value.intVal = Total();
		result.valueType = TYPE_INTEGER;
		result.measureType = MEASURE_COUNT;
		result.valid = result.value.intVal > 0;
	}
	else if (attributeName.compare(ACTIVITY_ATTRIBUTE_REPS_COMPUTED) == 0)
	{
		result.value.intVal = ComputedTotal();
		result.valueType = TYPE_INTEGER;
		result.measureType = MEASURE_COUNT;
		result.valid = result.value.intVal > 0;
	}
	else if (attributeName.compare(ACTIVITY_ATTRIBUTE_REPS_CORRECTED) == 0)
	{
		result.value.intVal = CorrectedTotal();
		result.valueType = TYPE_INTEGER;
		result.measureType = MEASURE_COUNT;
		result.valid = result.value.intVal > 0;
	}
	else if (attributeName.compare(ACTIVITY_ATTRIBUTE_CURRENT_PACE) == 0)
	{
		uint16_t total = Total();
		result.value.timeVal = Pace();
		result.valueType = TYPE_TIME;
		result.measureType = MEASURE_TIME;
		result.valid = total > 0;
	}
	else if (attributeName.compare(ACTIVITY_ATTRIBUTE_SETS) == 0)
	{
		uint16_t total = Total();
		result.value.intVal = Sets();
		result.valueType = TYPE_INTEGER;
		result.measureType = MEASURE_COUNT;
		result.valid = total > 0;
	}
	else if (attributeName.find(ACTIVITY_ATTRIBUTE_GRAPH_PEAK) == 0)
	{
		if (m_analyzer)
		{
			const char* numStr = attributeName.c_str() + strlen(ACTIVITY_ATTRIBUTE_GRAPH_PEAK);
			uint16_t num = atol(numStr);
			
			if ((num > 0) && (num <= m_computedRepList.size()))
			{
				GraphPeak peak = m_computedRepList.at(num - 1);
				result.valueType = TYPE_INTEGER;
				result.measureType = MEASURE_INDEX;
				result.value.intVal = peak.peak.index;
				result.valid = true;
			}
			else
			{
				result.valid = false;
			}
		}
		else
		{
			result.valid = false;
		}
	}
	else if (attributeName.find(ACTIVITY_ATTRIBUTE_MEAN_PEAK_AREA) == 0)
	{
		uint16_t total = Total();
		result.value.doubleVal = GetPeakAreaMean();
		result.valueType = TYPE_DOUBLE;
		result.measureType = MEASURE_NOT_SET;
		result.valid = total > 0;
	}
	else if (attributeName.find(ACTIVITY_ATTRIBUTE_STDDEV_PEAK_AREA) == 0)
	{
		uint16_t total = Total();
		result.value.doubleVal = GetPeakAreaStdDev();
		result.valueType = TYPE_DOUBLE;
		result.measureType = MEASURE_NOT_SET;
		result.valid = total > 0;
	}
	else
	{
		result = Activity::QueryActivityAttribute(attributeName);
	}
	return result;
}