Обдумывал систему рейтингования ходов, начал ее разработку (функции 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 гвардейской. А в прошлом году ходил в зал на юности, где была тренер Наташа и заставляла делать всякие
БТИ. "Что это такое?" - подумаете Вы. А это - бицепсотрицепсовые икстензии. Лично я сомневаюсь в пользе этого упражнения. А что думаете Вы?