Написал код поворота кораблика + случаи если при повороте, он выходит за границу, то поворот в противоположную сторону. Но код вышел слишком большой. Возможно ли сделать его более компактным?
(shipSize - размер кораблика. Field.ceils[yMove + i][xMove].type = 0 - клетка становится пустой; Field.ceils[yMove + i][xMove].type = 1 - клетка занята корабликом; direct - сторона кораблика, 0 - юг, 1 - запад, 2 - север, 3 - восток; yMove - положение кораблика по y; xMove - положение кораблика по x;).
Сам кодcase SPACE:
if (direct == 0 && xMove + 1 > shipSize - 1) { // direct 0 --> direct 1
for (i = 0; i < shipSize; i++) {
Field.ceils[yMove + i][xMove].type = 0;
Field.ceils[yMove][xMove - i].type = 1;
}
direct = 1;
}
else if (direct == 1 && yMove + 1 >= shipSize) { // direct 1 --> direct 2
for (i = 0; i < shipSize; i++) {
Field.ceils[yMove][xMove - i].type = 0;
Field.ceils[yMove - i][xMove].type = 1;
}
direct = 2;
}
else if (direct == 2 && SIZE >= shipSize + xMove) { // direct 2 --> direct 3
for (i = 0; i < shipSize; i++) {
Field.ceils[yMove - i][xMove].type = 0;
Field.ceils[yMove][xMove + i].type = 1;
}
direct = 3;
}
else if (direct == 3 && yMove + shipSize < SIZE + 1) { // direct 3 --> direct 0
for (i = 0; i < shipSize; i++) {
Field.ceils[yMove][xMove + i].type = 0;
Field.ceils[yMove + i][xMove].type = 1;
}
direct = 0;
}
else if (direct == 0 && xMove + 1 < shipSize) { // direct 0 --> direct 3
for (i = 0; i < shipSize; i++) {
Field.ceils[yMove + i][xMove].type = 0;
Field.ceils[yMove][xMove + i].type = 1;
}
direct = 3;
}
else if (direct == 1 && yMove + 1 < shipSize) { // direct 1 --> direct 0
for (i = 0; i < shipSize; i++) {
Field.ceils[yMove][xMove - i].type = 0;
Field.ceils[yMove + i][xMove].type = 1;
}
direct = 0;
}
else if (direct == 2 && xMove + shipSize > SIZE) { // direct 2 --> direct 1
for (i = 0; i < shipSize; i++) {
Field.ceils[yMove - i][xMove].type = 0;
Field.ceils[yMove][xMove - i].type = 1;
}
direct = 1;
}
else if (direct == 3 && yMove + shipSize + 1> SIZE) { // direct 3 --> direct 2
for (i = 0; i < shipSize; i++) {
Field.ceils[yMove][xMove + i].type = 0;
Field.ceils[yMove - i][xMove].type = 1;
}
direct = 2;
}
break;