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

Глава 4

Далее, после того, как мы рассмотрели функцию OnRButtonDown(), вполне логично рассмотреть
функцию OnLButtonDown(). При щелчке левой кнопкой на нашем поле корабль, который
перед этим тащился за курсором, должен встать в то место, в котором щелкнули.


void CField::OnLButtonDown(UINT nFlags, CPoint point) {

if(m_Operation == PLACEMENT

&& m_Mode == OWN_FIELD
&& m_Parent
&& m_Draw)
{
if(ConvertPropertiesToMassive()) {
m_Count++;
switch(m_Count) {
case 1:
m_Decks = 3;
break;
case 3:
m_Decks = 2;
break;
case 6:
m_Decks = 1;
break;
case 10:
m_Decks = 0;
break;
}
}
}

CStatic::OnLButtonDown(nFlags, point);
}

Анализ:

Первая проверка. Если операция - постановка корабля, режим - наше поле,
родительское окно (указатель m_Parent уже не NULL), и можно рисовать
if(m_Operation == PLACEMENT

&& m_Mode == OWN_FIELD
&& m_Parent
&& m_Draw)
{
if(ConvertPropertiesToMassive()) {

Если функция ConvertPropertiesToMassive() возвратила true, то это значит, что она уже
присвоила всем ячейкам, на которых должен находиться корабль значение SHIP,
а всем смежным ячейкам значение NEARSHIP. И теперь надо переменной m_Decks присвоить
новое значение (это следующий по порядку корабль) и инкременировать m_Count -
число кораблей. Напомню, что первоначальное значение m_Decks равно 4. То есть
первый корабль всегда четырехклеточный. Следующих два - терхклеточный. Далее три
двухклеточных, и наконец четыре одноклеточных.

m_Count++;
switch(m_Count) {

case 1:
m_Decks = 3;
break;
case 3:
m_Decks = 2;
break;
case 6:
m_Decks = 1;
break;
case 10:
m_Decks = 0;
break;
}

Ясно, что если в условии m_Mode == OWN_FIELD (наше поле), то мы будем садить на него
корабли при каждом щелчке, пока не посадим 10 кораблей. При этом значение m_Count
постепенно станет равно 10, а переменной m_Decks равно 0. После чего щелчки на своем
поле будут неэффективны.

Резюме

Очень мало работы делает функция OnLButtonDown() на нашем поле. Она при каждом
вызове увеличивает значение переменной m_Count, пока оно не достигнет 10,
и присваивает то или иное (зависщее от значения переменной m_Count) значение
переменной m_Decks - количество палуб.
Служебную функцию ConvertPropertiesToMassive() рассмотрим позднее.


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

Hosted by uCoz