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

Глава 4

Добавим в функцию OnPaint() код, который рисует корабли в нашем поле.
Используя данные объекта Field и вызывая соответствующую функцию DrawShip().



//расставим корабли for(i=0; i<10; i++){
for(j=0; j<10; j++) {
count = 0;
if(m_Event[i][j] == SHIP) {
if((m_Event[i][j+1] == SHIP) && j+1 < 10) {
count = 1;
do {
count++;
} while( (m_Event[i][j+count] == SHIP)&& (j+count<10) );


DrawShip(CRect(j*20, i*20, (j+count)*20, (i+1)*20), &dc);
j+=count;
continue;

}
else {
if((m_Event[i+1][j] == SHIP)
&&((m_Event[i-1][j] != SHIP) || i-1<0)
&& i+1<10) {
count = 1;
do {
count++;
} while(
(m_Event[i+count][j] == SHIP)&& i+count<10);
DrawShip(CRect(j*20, i*20, (j+1)*20, (i+count)*20), &dc);
continue;
}


if(((m_Event[i+1][j] != SHIP) && i+1<10)||(i+1==10))
if(((m_Event[i-1][j] != SHIP) && i-1 >= 0) || (i-1<0))
if(((m_Event[i][j+1] != SHIP) && j+1<10) || (j+1==10))
if(((m_Event[i][j-1] != SHIP) && j-1>=0) || (j-1<0))
DrawShip(CRect(j*20, i*20, (j+1)*20, (i+1)*20), &dc);

}//else
}//if(m_Event[i][j] == SHIP)
}//for(j=0; j<10; j++)
}//for(i=0; i<10; i++)


if(m_Draw && m_Operation == PLACEMENT)
DrawShip(GetRect(), &dc);

}//if(m_Mode == OWN_FIELD)


//расставим корабли
for(i=0; i<10; i++){

for(j=0; j<10; j++) {
count = 0;
ЕСЛИ (это корабль)
{
ЕСЛИ(
на одну клетку вниз - корабль и это еще поле
//Ясно, что это корабль и он направлен вниз.
{
//сосчитаем двигаясь вниз количество клеток корабля.
// оно не может быть больше 4 но начнем с единицы
count = 1;
ДЕЛАЙ{
count++ (еще одна клетка)
делаем шаг вниз
}ПОКА (следующая клетка вниз - корабль и она еще на поле)
//рисуем корабль в этих координатах вниз
DrawShip(CRect(j*20, i*20, (j+count)*20, (i+1)*20), &dc);
j+=count;
continue;
}
ИНАЧЕ {
ЕСЛИ(
на одну клетку вправо - корабль и
((на одну влево - не корабль или уже не поле) И на одну вправо - еще поле))
//Ясно, что это корабль и он направлен вправо.
{
//сосчитаем двигаясь вправо количество клеток корабля.
// оно не может быть больше 4 но начнем с единицы
count = 1; ДЕЛАЙ{
count++ (еще одна клетка)
делаем шаг вправо
}ПОКА (следующая клетка справа - корабль и она еще на поле)
//рисуем корабль в этих координатах вправо
DrawShip(CRect(j*20, i*20, (j+1)*20, (i+count)*20), &dc);
continue;//вернуться
}

ЕСЛИ (все клетки вокруг исследуемой не являются кораблем
и находятся на поле, не ближе одной клетки от любого его края)
{

//рисуем корабль в этих координатах (естественно это одноклеточный корабль)
DrawShip(CRect(j*20, i*20, (j+1)*20, (i+1)*20), &dc);
}
}//end ИНАЧЕ это корабль вправо или одноклеточный
}//end ЕСЛИ это корабль
}//end for
}//end for

if(m_Draw && m_Operation == PLACEMENT) {

//клик левой кнопкой на клетке,
//нарисовать корабль в переданных координатах
DrawShip(GetRect(), &dc);
}
}//end if(m_Mode == OWN_FIELD)


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

Hosted by uCoz