Глава 1
void CField::CompMove()
{
GENDATA data;
LISTDATA listdata;
static x = -1, y = -1;
data = GenerateMove(x, y);
while(1)
{
m_Steps++;
listdata.x = data.x;
listdata.y = data.y;
listdata.str = "КОМП";
switch(data.IsKilled)
{
case EMPTY:
listdata.state = EMPTY;
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_SET_MOVE, (LPARAM)&listdata);
x = -1;
y = -1;
return;
case SHIPKILLED:
x = -1;
y = -1;
listdata.state = SHIPKILLED;
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_SET_MOVE, (LPARAM)&listdata);
KilledShips++;
m_GoodSteps++;
if(KilledShips == 10)
{
Invalidate();
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_WIN_COMP, 0);
return;
}
data = GenerateMove();
break;
case SHIPWOUND:
m_GoodSteps++;
x = -1;
y = -1;
listdata.state = SHIPWOUND;
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_SET_MOVE, (LPARAM)&listdata);
data = GenerateMove(data.x, data.y);
break;
case SHIPNOTKILLED:
listdata.x = data.x%10;
listdata.y = data.y%10;
data.x /= 10;
data.y /= 10;
listdata.state = EMPTY;
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_SET_MOVE, (LPARAM)&listdata);
x = data.x;
y = data.y;
return;
}//end case
}//end while
}
Анализ:
void CField::CompMove()
{
data = GenerateMove(x, y);
while(1)
{
switch(data.IsKilled)
{
static x = -1, y = -1;
case SHIPKILLED:
case SHIPWOUND:
case SHIPNOTKILLED:
Сначала общий абрис. Функция CompMove() вызывает функцию GenerateMove(x, y)
и передает ей координаты x = -1, y = -1 (левее и выше левого верхнего угла)
Функция GenerateMove() возвращает объект GENDATA, который содержит
случайные координаты X и Y, и переменную IsKilled. Переменная IsKilled
содержит одно из 4-х значений, которые и анализируются в switch.
Посмотрим:
LISTDATA listdata;
if(KilledShips == 10)
{
case SHIPWOUND:
case SHIPNOTKILLED:
listdata.x = data.x;
listdata.y = data.y;
listdata.str = "КОМП";
case EMPTY:
listdata.state = EMPTY;
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_SET_MOVE, (LPARAM)&listdata);
x = -1;
y = -1;
return;
case SHIPKILLED:
x = -1;
y = -1;
listdata.state = SHIPKILLED;
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_SET_MOVE, (LPARAM)&listdata);
KilledShips++;
m_GoodSteps++;
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_WIN_COMP, 0);
return;
data = GenerateMove();
break;
m_GoodSteps++;
x = -1;
y = -1;
listdata.state = SHIPWOUND;
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_SET_MOVE, (LPARAM)&listdata);
data = GenerateMove(data.x, data.y);
break;
listdata.x = data.x%10;
listdata.y = data.y%10;
data.x /= 10;
data.y /= 10;
listdata.state = EMPTY;
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_SET_MOVE, (LPARAM)&listdata);
x = data.x;
y = data.y;
return;
}
Назад |
Начало урока |
Вверх |
Вперед
Содержание