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

Глава 1


int CField::ReceiveMessage(int wParam, long lParam) {
int i, j;
LISTDATA listdata;
switch(wParam) {
case N_MESSAGE:
listdata.x = NetPoint.x;
listdata.y = NetPoint.y;
listdata.str = "ВЫ";
m_Steps++;
if(lParam == N_EMPTY) {
m_Event[NetPoint.y][NetPoint.x] = CANNOT;
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_SET_STEP, 0);
m_Operation = NONE;
listdata.state = EMPTY;
}
if(lParam == N_SHIPWOUND) {
m_GoodSteps++;
m_Event[NetPoint.y][NetPoint.x] = SHIPWOUND;
m_Operation = FIRE;
listdata.state = SHIPWOUND;
}
if(lParam == N_SHIPKILLED) {
m_GoodSteps++;
m_Event[NetPoint.y][NetPoint.x] = SHIPWOUND;
SetShipKilled(NetPoint);
m_Operation = FIRE;
KilledShips++;
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_KILL, 0);
listdata.state = SHIPKILLED;
if(KilledShips == 10) {
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_WIN_YOU, 0);
m_Operation = NONE;
Invalidate();
return 10;
}
}
::SendMessage(m_Parent->m_hWnd, WM_STATIC_TO_DLG, WM_SET_MOVE, (LPARAM)&listdata);
Invalidate();
break;
case WM_FINISH:
m_Operation = NONE;
Invalidate();
break;
case WM_PLACEMENT:
m_Operation = PLACEMENT;
m_Direction = RIGHT;
m_Decks = 4;
m_Position.x = m_Position.y = -1;
m_Draw = false;
for(i=0; i < 10; i++)
for(j=0; j < 10; j++)
m_Event[i][j] = EMPTY;
m_Count = 0;
KilledShips = 0;
m_Steps = m_GoodSteps = 0;
Invalidate();
break;
case WM_NONE:
m_Operation = NONE;
Invalidate();
break;
case WM_IS_PLACEMENT:
if(!m_Decks)
return 1;
else return 0;
case WM_IS_OK:
if(!m_Decks) {
for(i=0; i<10; i++)
for(j=0; j<10; j++) {
if(m_Event[i][j] == CANNOT)
m_Event[i][j] = EMPTY;
if(m_Event[i][j] == SHIPKILLED || m_Event[i][j] == SHIPWOUND)
m_Event[i][j] = SHIP;
if(m_Event[i][j] == NEARKILLEDSHIP)
m_Event[i][j] = NEARSHIP;
}
KilledShips = 0;
m_Steps = m_GoodSteps = 0;
Invalidate();
return 1;
}
else return 0;
case WM_COUNT_PLACEMENT:
m_Operation = NONE;
m_Direction = RIGHT;
m_Decks = 4;
m_Position.x = m_Position.y = -1;
m_Draw = false;
for(i=0; i<10; i++)
for(j=0; j<10; j++)
m_Event[i][j] = EMPTY;
m_Count = 0;
m_Steps = m_GoodSteps = 0;
CountPlacement();
KilledShips = 0;
Invalidate();
break;
case WM_FIRE:
m_Operation = FIRE;
break;
case WM_CLEARFIELD:
m_Operation = NONE;
m_Direction = RIGHT;
m_Decks = 4;
m_Position.x = m_Position.y = -1;
m_Draw = false;
for(i=0; i<10; i++)
for(j=0; j<10; j++)
m_Event[i][j] = EMPTY;

m_Count = 0;
m_Steps = m_GoodSteps = 0;
KilledShips = 0;
Invalidate();
break;
}
return 1;
}


int CField::ReceiveMessage(int wParam, long lParam) {
int i, j;
LISTDATA listdata;
switch(wParam) {
case N_MESSAGE:
...
case WM_FINISH:
...
Invalidate();
break;
case WM_PLACEMENT:
...
Invalidate();
break;
case WM_NONE:
...
Invalidate();
break;
case WM_IS_PLACEMENT:
...
case WM_IS_OK:
...
Invalidate();
return 1;
else return 0;
case WM_COUNT_PLACEMENT:
...
Invalidate();
break;
case WM_FIRE:
...
case WM_CLEARFIELD:
...
Invalidate();
break;
}
return 1;
}

//messages
#define WM_PLACEMENT 11000
#define WM_NONE 11001
#define WM_IS_OK 11003
#define WM_COUNT_PLACEMENT 11004
#define WM_FIRE 11005
#define WM_CLEARFIELD 11006
#define WM_FINISH 11007

#define WM_IS_PLACEMENT 11008


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

Hosted by uCoz