Глава 1
Функция получает координаты точки. Вызывает функцию NetStep(x, y) с этими координатами.
NetStep() возвращает одно из трех значений. Соответственно у вызывающей функции есть
три ветви выполнения. В каждой ветви заполняются структуры NET_DATA и LISTDATA,
и посылаются соответствующие сообщения ::SendMessage.
void CField::RecvNetData(int x, int y)
{
char buf[2];
NET_DATA data;
LISTDATA listdata;
buf[0] = N_MESSAGE;
buf[1] = NetStep(x, y);
listdata.x = x;
listdata.y = y;
listdata.str = "СОП";
listdata.state = SHIPWOUND;
m_Steps++;
if(buf[1] == N_SHIPKILLED)
{
m_GoodSteps++;
KilledShips++;
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_KILL, 0);
if(KilledShips == 10)
{
m_Operation = NONE;
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_WIN_NET, 0);
buf[0] = N_WIN_YOU;
data.buf = &buf[0];
data.lenght = 1;
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_SEND_DATA, (LPARAM)&data);
}
listdata.state = SHIPKILLED;
}
if(buf[1] == N_SHIPWOUND)
m_GoodSteps++;
data.buf = buf;
data.lenght = 2;
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_SEND_DATA, (LPARAM)&data);
if(buf[1] == N_EMPTY)
{
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_OWN_STEP, 0);
listdata.state = EMPTY;
}
Invalidate();
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_SET_MOVE, (LPARAM)&listdata);
}
Анализ:
В функцию передаются координаты точки.
void CField::RecvNetData(int x, int y)
{
Организуется массив символов
NET_DATA data;
В массив символов помещается символ, обозначающий сообщение N_MESSAGE
В массив символов помещается символ, возвращенный функцией NetStep(),
buf[1] = NetStep(x, y);
listdata.x = x;
//-------------
Поместим в NET_DATA data сообщение, что корабль ранен
Пошлем еще сообщение что корабль ранен:
//------------
if(buf[1] == N_EMPTY)
{ Обновить(перерисовать) окно и послать сообщение:
char buf[2];
LISTDATA listdata;
buf[0] = N_MESSAGE;
для того, чтобы можно было вывести нужное сообщение
а мы помним, что эта функция возвращает одно из трех чисел, означающих
корабль убит, корабль ранен, ячейка пуста (мимо)
listdata.y = y;
listdata.str = "СОП";
listdata.state = SHIPWOUND;
m_Steps++;
//-----------
Если корабль убит:
if(buf[1] == N_SHIPKILLED)
{
KilledShips++; //убитые корабли
Пошлем сообщение, что корабль убит
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_KILL, 0);
Если убито уже 10 кораблей
if(KilledShips == 10)
{
Пошлем сообщение о победе
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_WIN_NET, 0);
Поместим в ячейку массива символ, означающий сообщение о победе и поместим в NET_DATA data
эту же информацию:
buf[0] = N_WIN_YOU;
data.buf = &buf[0];
data.lenght = 1;
NET_DATA data - это переменная сетки.
Пошлем еще сообщение о победе:
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_SEND_DATA, (LPARAM)&data);
Поместим в list значение, что корабль убит:
listdata.state = SHIPKILLED;
Если корабль ранен:
if(buf[1] == N_SHIPWOUND)
m_GoodSteps++;//хороший шаг
data.buf = buf;
data.lenght = 2;
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_SEND_DATA, (LPARAM)&data);
Если клетка пуста
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_OWN_STEP, 0);
Поместим в list значение, что клетка пуста:
listdata.state = EMPTY;
Invalidate();
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_SET_MOVE, (LPARAM)&listdata);
Найти структуры LISTDATA и NET_DATA о познакомиться с ними.
Назад |
Начало урока |
Вверх |
Вперед
Содержание