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

Глава 5

Функция ConvertPropertiesToMassive(POINT pos, int decks, int dir)

Этой функции передается позиция корабля, число палуб и направление.
Функция поставит корабль на поле боя если есть такая возможность и возвратит
true, в противном случае возвратит false.


bool CField::ConvertPropertiesToMassive(POINT pos, int decks, int dir) {
int i;
int x, y, cx, cy;

if(dir == RIGHT && (pos.x/20)*20 + decks*20 > 200) return 0;
if(dir == TOP && (pos.y/20)*20 - (decks-1)*20 < 0) return 0;
if(dir == BOTTOM && (pos.y/20)*20 + decks*20 > 200) return 0;
if(dir == LEFT && (pos.x/20)*20 - (decks-1)*20 < 0) return 0;
for(i=0; i < decks; i++) {

switch(dir) {
case LEFT:
if(m_Event[pos.y/20][pos.x/20-i] != EMPTY) return 0;
break;
case TOP:
if(m_Event[pos.y/20-i][pos.x/20] != EMPTY) return 0;
break;
case RIGHT:
if(m_Event[pos.y/20][pos.x/20+i] != EMPTY) return 0;
break;
case BOTTOM:
if(m_Event[pos.y/20+i][pos.x/20] != EMPTY) return 0;
break;
}
}
if(pos.y-20>=0) y = pos.y/20-1;
else y = pos.y/20;
if(pos.x-20>=0) x = pos.x/20-1;
else x = pos.x/20;
switch(dir) {
case RIGHT:
if(pos.x+decks*20+20<=200) {cx = pos.x/20+decks+1;}
else {cx = pos.x/20+decks;}
if(pos.y+40<=200) cy = pos.y/20+2;
else cy = pos.y/20+1;
break;
case BOTTOM:
if(pos.y+decks*20+20<=200) cy = pos.y/20+decks+1;
else cy = pos.y/20+decks;
if(pos.x+40<=200) cx = pos.x/20+2;
else cx = pos.x/20+1;
break;
case LEFT:
if(pos.x+40<=200) cx = pos.x/20+2;
else cx = pos.x/20+1;
if(pos.y+40<=200) cy = pos.y/20+2;
else cy = pos.y/20+1;
if(pos.x-decks*20>=0) x = pos.x/20-decks;
else x = pos.x/20-decks+1;
break;
case TOP:
if(pos.y-decks*20>=0) y = pos.y/20-decks;
else y = pos.y/20-decks+1;
if(pos.y+40<=200) cy = pos.y/20+2;
else cy = pos.y/20+1;
if(pos.x+40<=200) cx = pos.x/20+2;
else cx = pos.x/20+1;
break;
}
cx--;
cy--;
for(; y<= cy; y++)
for(i = x; i<= cx; i++)
m_Event[y][i] = NEARSHIP;
for(i=0; i < decks; i++) {
switch(dir) {
case LEFT:
m_Event[pos.y/20][pos.x/20-i] = SHIP;
break;
case TOP:
m_Event[pos.y/20-i][pos.x/20] = SHIP;
break;
case RIGHT:
m_Event[pos.y/20][pos.x/20+i] = SHIP;
break;
case BOTTOM:
m_Event[pos.y/20+i][pos.x/20] = SHIP;
break;
}
}
return 1;
}


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

Hosted by uCoz