Назад | Начало урока | Вперед
Содержание

Глава 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() {

GENDATA data;
static x = -1, y = -1;

data = GenerateMove(x, y);

while(1) {

switch(data.IsKilled) {

case EMPTY:
case SHIPKILLED:
case SHIPWOUND:
case SHIPNOTKILLED:
}
}
}

Сначала общий абрис. Функция CompMove() вызывает функцию GenerateMove(x, y)
и передает ей координаты x = -1, y = -1 (левее и выше левого верхнего угла)
Функция GenerateMove() возвращает объект GENDATA, который содержит
случайные координаты X и Y, и переменную IsKilled. Переменная IsKilled
содержит одно из 4-х значений, которые и анализируются в switch.

Посмотрим:

LISTDATA listdata;
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++;

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;
}


Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz