Отчет 13 июля 2011 г

Jul 30, 2011 22:20

Обдумывал систему рейтингования ходов, начал ее разработку (функции Rayting и RateLine).
Завершил разработку функции RateLine (подсчет рейтинга отрезка). Работал над функцией Rayting (обобщает результаты, полученные от функций RateLine).

//Подсчитываем рейтинг клетки на линии
//вход - флаг comp (кого рейтинг будем считать)
//выход - число рейтинг
short RateLine(bool comp)
{
    //продолжительность 9 клеток
    // 0000[0]0000
    char i, j = 0;
    bool n30000 = 0, n20000 = 0;
    struct series
    {
        char n0, n1;
    } L[5] = {0};
    double base = 5.0;
    double rate = 1.0;
    short Rate = 0;
    bool flag = 0;
    double s = 0.0;
    char n = 0;
    double n2 = 5.0, n1 = 4.0;
    char RateEmpty = 0;
    char Begin = 0, End = 8;
    //Начало и конец////////////////////////
    for (i = 5; i < 9; i++)
        if (line[i].content == -2)
        {
            End = i-1;
            break;
        }
    for (i = 3; i >= 0; i--)
        if (line[i].content == -2)
        {
            Begin = i + 1;
            break;
        }
    ////////////////////////////////////////
    line[4].content = 0;
    //Нахождение максимального расстояния
    for (i = 5; i <= End; i++)
        if (line[i].content == ((comp) ? 2 : 1) || line[i].content == 0)
            j++;
        else
            break;
    for (i = 3; i >= Begin; i--)
        if (line[i].content == ((comp) ? 2 : 1) || line[i].content == 0)
            j++;
        else
            break;
    /////////////////////////////////////
    //Если расстояние <5
    if (j + 1 < 5)
        return 0;
    //Учет кол-ва пробелов, своих и врагов
    for (i = 5; i <= End; i++)
        if (line[i].content == ((comp) ? 2 : 1) && !flag)
        {
            s = s + n2 - n;
            n2 = ceil(n2 / 2);
        }
        else
        if (line[i].content == ((comp) ? 2 : 1) && flag)
            break;
        else
        if (line[i].content == ((comp) ? 1 : 2))
        {
            s = s + n1 - n;
            n1 = ceil(n1 / 2);
            flag = 1;
        }
        else
            n++;
    RateEmpty += s;
    flag = 0;
    s = 0.0;
    n = 0;
    n2 = 5.0;
    n1 = 4.0;
    for (i = 3; i >= Begin; i--)
        if (line[i].content == ((comp) ? 2 : 1) && !flag)
        {
            s = s + n2 - n;
            n2 = ceil(n2 / 2);
        }
        else
        if (line[i].content == ((comp) ? 2 : 1) && flag)
            break;
        else
        if (line[i].content == ((comp) ? 1 : 2))
        {
            s = s + n1 - n;
            n1 = ceil(n1 / 2);
            flag = 1;
        }
        else
            n++;
    RateEmpty += s;
    flag = 0;
    n = -1;
    ////////////////////////////////////////
    //1 или 2 хода до 5///////////////////
    //Проверка | xxx | и | xxx |
    if ((line[3].content==0 && line[5].content == ((comp) ? 2 : 1) && line[6].content == ((comp) ? 2 : 1) && line[7].content == ((comp) ? 2 : 1) && line[8].content == 0) || (line[5].content == 0 && line[3].content == ((comp) ? 2:1) && line[2].content == ((comp) ? 2:1) && line[1].content == ((comp) ? 2:1) && line[0].content == 0))
        flag = 1;
    if (!flag)
        if ((line[2].content == 0 && line[3].content == ((comp) ? 2 : 1) && line[5].content == ((comp) ? 2 : 1) && line[6].content == ((comp) ? 2 : 1) && line[7].content == 0) || (line[6].content == 0 && line[5].content == ((comp) ? 2 : 1) && line[3].content == ((comp) ? 2 : 1) && line[2].content == ((comp) ? 2 : 1) && line[1].content == 0))
            flag = 1;
    for (i = Begin; i < End - 3; i++)
    {
        n++;
        for (j = i; j < i + 5; j++)
            if (line[j].content == ((comp) ? 2 : 1))
                L[n].n1++;
            else
            if (line[j].content == 0)
                L[n].n0++;
            else
                break;
    }
    for (i = 0; i < 10; i++)
        if (L[i].n1 == 4 && L[i].n0 == 1)
        {
            n30000 = 1;
            break;
        }
    if (flag)
        n20000 = 1;
    if (n30000)
        return 30000 + RateEmpty;
    else
    if (n20000)
        return 20000 + RateEmpty;
    ////////////////////////////////////////
    for (i = 5; i <= End; i++)
        if (line[i].content == ((comp) ? 2 : 1))
        {
            rate *= base;
            flag = 1;
        }
        else
        if (line[i].content == 0)
        {
            if (flag)
                Rate += rate;
            rate = 1.0;
            base -= 1.0;
            flag = 0;
        }
        else
            break;
    if (flag == 1)
    {
        Rate += rate;
        rate = 1.0;
    }
    base = 5.0;
    flag = 0;
    for (i = 3; i >= Begin; i--)
        if (line[i].content == ((comp) ? 2 : 1))
        {
            rate *= base;
            flag = 1;
        }
        else
        if (line[i].content == 0)
        {
            if (flag)
                Rate += rate;
            rate = 1.0;
            base -= 1.0;
        }
        else
            break;
    if (flag == 1)
        Rate += rate;
    return Rate + RateEmpty;
}
P.S. Сейчас хожу в тренажерный зал на 39 гвардейской. А в прошлом году ходил в зал на юности, где была тренер Наташа и заставляла делать всякие БТИ. "Что это такое?" - подумаете Вы. А это - бицепсотрицепсовые икстензии. Лично я сомневаюсь в пользе этого упражнения. А что думаете Вы?

Программирование, Лето, Информатика, Компьютер, Бодибилдинг

Previous post Next post
Up