It all started with the fact that I wrote the condition of non-contact of ships along the diagonals / verticals / horizontals (in part, I still do, but the problem is different).

It is precisely in the part where the placement of torpedo boats (single-celled ships) occurs that a loop occurs and the same torpedo boat is put in spite of the fact that the counter (at which this cycle actually works, the same amount_of_checked_cells ) counts the number of ship cells and By condition, when placing four single-celled ships, a two-celled ship should be placed, then, when installing six such cells, a three-celled ship and so on ...

(PS: all this rigma happens in the Set_ships function, line 143)

 #include<iostream> #include<ctime> #include<iomanip> #include<string> #include<Windows.h> #include<windows.h> using namespace std; HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE); #define _CRT_NO_SECURITY_WARNINGS const int FIELD_SIZE = 10; char Player1[100]; char Player2[100]; int amount_of_ship_cells_left_to_drown_P1; int amount_of_ship_cells_left_to_drown_P2; // [x][y], где x - вертикаль, y - горизонталь char WaterP1 = '~'; char WaterP2 = '~'; char TorpedeP1 = 'Т'; char TorpedeP2 = 'Т'; char DestroyerP1 = 'К'; char DestroyerP2 = 'К'; char CruiserP1 = 'Э'; char CruiserP2 = 'Э'; char BattleshipP1 = 'Л'; char BattleshipP2 = 'Л'; char ShipHitP1 = 'Х'; char ShipHitP2 = 'X'; char HitMissP1 = '*'; char HitMissP2 = '*'; void ifP1Win(char* p1) { system("cls"); cout << "Игрок " << p1 << " ПОБЕДИЛ!!! Поздравляем!" << endl; system("pause"); } void ifP2Win(char* p2) { system("cls"); cout << "Игрок " << p2 << " ПОБЕДИЛ!!! Поздравляем!" << endl; system("pause"); } bool Cell_checker(int PlayerNumber, int asked_cell) { char T; char D; char C; char BS; switch (PlayerNumber) { case 1: { T = TorpedeP1; D = DestroyerP1; C = CruiserP1; BS = BattleshipP1; } break; case 2: { T = TorpedeP2; D = DestroyerP2; C = CruiserP2; BS = BattleshipP2; } break; } if (asked_cell == T || asked_cell == D || asked_cell == C || asked_cell == BS) return true; else return false; } void Print_table(char arr[][FIELD_SIZE]) { for (int i = 0; i < FIELD_SIZE; i++) { for (int j = 0; j < FIELD_SIZE; j++) { cout << arr[i][j] << " "; } cout << endl; } } void Print_hidden_table(char arr[][FIELD_SIZE]) { for (int i = 0; i < FIELD_SIZE; i++) { for (int j = 0; j < FIELD_SIZE; j++) { cout << '~' << " "; } cout << endl; } } void Players_names(char* Player1, char* Player2) { cout << "Введите имя "; SetConsoleTextAttribute(h, 3); cout << "первого"; SetConsoleTextAttribute(h, 7); cout << " игрока() : "; cin >> Player1; cout << "Введите имя "; SetConsoleTextAttribute(h, 4); cout << "второго"; SetConsoleTextAttribute(h, 7); cout << " игрока() : "; cin >> Player2; } void Create_table(char arr[][FIELD_SIZE], char c) { for (int i = 0; i < FIELD_SIZE; i++) { for (int j = 0; j < FIELD_SIZE; j++) { arr[i][j] = c; } } } void Pass2AnotherPlayer() { system("cls"); cout << "Переход к другому игроку. И не подглядывайте ;)" << endl; Sleep(5000); system("cls"); } void Set_ships(char arr[][FIELD_SIZE], int PlayerNumber) { char PNEnd[5]; char Torp; char Destr; char Crui; char BShip; if (PlayerNumber == 1) { Torp = TorpedeP1; Destr = DestroyerP1; Crui = CruiserP1; BShip = BattleshipP1; strcpy_s(PNEnd, "-ый"); } else { Torp = TorpedeP2; Destr = DestroyerP2; Crui = CruiserP2; BShip = BattleshipP2; strcpy_s(PNEnd, "-ой"); } int nmb_of_cells_for_current_ship = 1; char type_of_ship[100]; int plant_choise_x, plant_choise_y; int amount_of_checked_cells = 0; while (amount_of_checked_cells < 21) { system("cls"); Print_table(arr); if (nmb_of_cells_for_current_ship == 4) strcpy_s(type_of_ship, "линкор (4 клетки для размещения)"); if (nmb_of_cells_for_current_ship == 3) strcpy_s(type_of_ship, "крейсер (3 клетки для размещения)"); if (nmb_of_cells_for_current_ship == 2) strcpy_s(type_of_ship, "эсминец (2 клетки для размещения)"); if (nmb_of_cells_for_current_ship == 1) strcpy_s(type_of_ship, "торпедный катер (1 клетка для размещения)"); cout << "Введите порядковый номер клетки, на которую " << PlayerNumber << PNEnd << " игрок хочет поместить кораблик (x,y)."; cout << endl << "Помещается " << type_of_ship << "." << endl; cout << " Ваши координаты: "; cin >> plant_choise_x >> plant_choise_y; if (Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y] /* само место, куда ставится клетка*/) == false && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y + 1] /* верхняя правая клетка */) == false && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y - 1] /* нижняя левая клетка */) == false && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y - 1] /* верхняя левая клетка */) == false && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y + 1] /* нижняя правая клетка */) == false ) { if ( Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y]) == false /* нижняя */ && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y]) == false /* верхняя */ && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y - 1]) == false /* левая */ && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y + 1]) == false /* правая */ ) { arr[plant_choise_x][plant_choise_y] = Torp; amount_of_checked_cells++; } else if (amount_of_checked_cells > 4 && amount_of_checked_cells < 12) { if (nmb_of_cells_for_current_ship == 1) nmb_of_cells_for_current_ship++; if (arr[plant_choise_x + 1][plant_choise_y] == Destr && (Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y]) == false && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y - 1]) == false /// choise_cords (1) && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y + 1]) == false && Cell_checker(PlayerNumber, arr[plant_choise_x + 2][plant_choise_y - 1]) == false // [1] && Cell_checker(PlayerNumber, arr[plant_choise_x + 2][plant_choise_y + 1]) == false // [2] && Cell_checker(PlayerNumber, arr[plant_choise_x + 2][plant_choise_y]) == false /// choise_cords (2) && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y - 1]) == false && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y + 1]) == false ) || (arr[plant_choise_x - 1][plant_choise_y] == Destr // [2] && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y]) == false // [1] && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y]) == false /// choise_cords (1) // низ && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y - 1]) == false // нижнелевая клетка && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y + 1]) == false // нижнеправая клетка && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y - 1]) == false // лево && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y + 1]) == false // право && Cell_checker(PlayerNumber, arr[plant_choise_x - 2][plant_choise_y]) == false /// choise_cords (2) // верх && Cell_checker(PlayerNumber, arr[plant_choise_x - 2][plant_choise_y - 1]) == false // верхнелевая клетка && Cell_checker(PlayerNumber, arr[plant_choise_x - 2][plant_choise_y + 1]) == false // верхнеправая клетка && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y - 1]) == false // левая && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y + 1]) == false // правая ) || ( arr[plant_choise_x][plant_choise_y + 1] == Destr // ----> && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y]) == false // [1][2] && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y]) == false /// choise_cords (1) // низ && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y]) == false // верх && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y - 1]) == false // нижнелевая клетка && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y - 1]) == false // верхнелевая клетка && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y - 1]) == false // лево && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y + 1]) == false /// choise_cords (2) // верх && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y + 1]) == false // низ && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y + 2]) == false // верхнеправая клетка && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y + 2]) == false // правая && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y + 2]) == false // нижнеправая ) || ( arr[plant_choise_x][plant_choise_y - 1] == Destr // [1] // [2][1] && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y]) == false // верх (1) && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y]) == false // низ && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y + 1]) == false // правая && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y + 1]) == false // верхнеправая клетка && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y + 1]) == false // нижнеправая кллетка // [2] && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y - 2]) == false // верхнелевая клетка && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y - 1]) == false // нижняя && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y - 1]) == false // верхняя && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y - 2]) == false // левая && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y - 2]) == false // верхнелевая ) || ( Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y]) == false // сама клетка && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y]) == false // верхняя && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y]) == false // нижняя && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y - 1]) == false // левая && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y + 1]) == false // правая && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y - 1]) == false // верхнелевая && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y + 1]) == false // верхнеправая && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y - 1]) == false // нижнелевая && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y + 1]) == false // нижнеправая ) ) { arr[plant_choise_x][plant_choise_y] = Destr; amount_of_checked_cells++; } if (amount_of_checked_cells >= 12) { if (nmb_of_cells_for_current_ship == 2) nmb_of_cells_for_current_ship++; /// [1][2][3] //[1] if ((arr[plant_choise_x][plant_choise_y + 1] == Crui && arr[plant_choise_x][plant_choise_y + 2] == Crui && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y]) == false && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y]) == false // верхняя && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y]) == false // нижняя && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y - 1]) == false // левая && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y - 1]) == false // верхнелевая && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y - 1]) == false // нижелевая //[2] && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y + 1]) == false // верхняя && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y + 1]) == false // нижнняя //[3] && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y + 2]) == false // верхняя && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y + 2]) == false // нижняя && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y + 3]) == false // правая && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y + 3]) == false // верхнеправая && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y + 3]) == false // нижнеправая ) || /// [3][2][1] ( Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y]) == false && arr[plant_choise_x][plant_choise_y - 1] == Crui && arr[plant_choise_x][plant_choise_y - 2] == Crui // [1] && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y]) == false // верхняя && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y]) == false // нижняя && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y + 1]) == false // правая && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y + 1]) == false // верхнеправая && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y + 1]) == false // нижнеправая // [2] && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y - 1]) == false // верхняя && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y - 1]) == false // нижняя // [3] && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y - 2]) == false // верхняя && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y - 2]) == false // нижняя && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y - 3]) == false // левая && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y - 3]) == false // верхнелевая && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y - 3]) == false // нижнелевая ) || ( Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y]) == false && arr[plant_choise_x][plant_choise_y - 1] == Crui && arr[plant_choise_x][plant_choise_y + 1] == Crui /// [2][1][3] // [1] && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y]) == false // верхняя && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y]) == false // нижняя // [2] && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y - 1]) == false // верхняя && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y - 1]) == false // нижняя && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y - 2]) == false // левая && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y - 2]) == false // верхнелевая && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y - 2]) == false // нижнелевая // [3] && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y + 1]) == false // верхняя && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y + 1]) == false // нижняя && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y + 2]) == false // правая && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y + 2]) == false // верхнеправая && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y + 2]) == false // нижеправая ) || ( /* [1] [2] [3] */ Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y]) == false && arr[plant_choise_x + 1][plant_choise_y] == Crui && arr[plant_choise_x + 2][plant_choise_y] == Crui // [1] && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y]) == false // верхняя && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y - 1]) == false // левая && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y + 1]) == false // правая && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y - 1]) == false // верхнелевая && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y + 1]) == false // верхнеправая // [2] && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y - 1]) == false // левая && Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y + 1]) == false // правая // [3] && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y + 1]) == false // верхняя && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y + 1]) == false // верхняя && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y + 1]) == false // верхняя && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y + 1]) == false // верхняя && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y + 1]) == false // верхняя ) ) { arr[plant_choise_x][plant_choise_y] = Crui; amount_of_checked_cells++; } if (amount_of_checked_cells == 17) { if (nmb_of_cells_for_current_ship == 3) nmb_of_cells_for_current_ship++; arr[plant_choise_x][plant_choise_y] = BShip; break; } } } } else { system("cls"); cout << "Введите правильную ячейку! " << endl; Sleep(1250); } } } void Player_move(char arr1[][FIELD_SIZE], char arr2[][FIELD_SIZE], int PlayerNumber, char* p1, char* p2) { int choise_x; int choise_y; while (true) { system("cls"); choise_x = 0; choise_y = 0; if (PlayerNumber == 1) { Print_table(arr1); cout << "\n Введите координаты клетки, в которую вы хотите стрельнуть, " << p1 << ": "; cout << "\n Вам осталось потопить клеток кораблей: " << amount_of_ship_cells_left_to_drown_P2; cin >> arr2[choise_x][choise_y]; if ((arr2[choise_x][choise_y] == TorpedeP2 || arr2[choise_x][choise_y] == DestroyerP2 || arr2[choise_x][choise_y] == CruiserP2 || arr2[choise_x][choise_y] == BattleshipP2) && arr2[choise_x][choise_y] != ShipHitP2 && arr2[choise_x][choise_y] != HitMissP2) { arr2[choise_x][choise_y] = ShipHitP2; --amount_of_ship_cells_left_to_drown_P2; system("cls"); cout << "Попадание!" << endl; system("pause"); continue; } else if (arr2[choise_x][choise_y] == ShipHitP2 || arr2[choise_x][choise_y] == HitMissP2) { system("cls"); cout << "Вы по этой клетке уже попадали!" << endl; system("pause"); continue; } else { arr2[choise_x][choise_y] = HitMissP2; system("cls"); Pass2AnotherPlayer(); break; } } else { Print_table(arr2); cout << "\n Введите координаты клетки, в которую вы хотите стрельнуть, " << p2 << ": "; cout << "\n Вам осталось потопить клеток кораблей: " << amount_of_ship_cells_left_to_drown_P1; cin >> arr1[choise_x][choise_y]; if ((arr1[choise_x][choise_y] == TorpedeP1 || arr1[choise_x][choise_y] == DestroyerP1 || arr1[choise_x][choise_y] == CruiserP1 || arr1[choise_x][choise_y] == BattleshipP1) && arr1[choise_x][choise_y] != ShipHitP1 && arr1[choise_x][choise_y] != HitMissP1) { arr1[choise_x][choise_y] = ShipHitP1; --amount_of_ship_cells_left_to_drown_P1; system("cls"); cout << "Попадание!" << endl; system("pause"); continue; } else if (arr1[choise_x][choise_y] == ShipHitP1 || arr1[choise_x][choise_y] == HitMissP1) { system("cls"); cout << "Вы по этой клетке уже попадали!" << endl; system("pause"); continue; } else { arr1[choise_x][choise_y] = HitMissP1; system("cls"); Pass2AnotherPlayer(); break; } } } } bool Win(int ship_cells) { if (ship_cells == 0) return true; return false; } int main() { srand((unsigned)time(0)); setlocale(LC_ALL, "Russian"); char arr1[FIELD_SIZE][FIELD_SIZE]; char arr2[FIELD_SIZE][FIELD_SIZE]; Players_names(Player1, Player2); system("cls"); cout << "Имя первого игрока: " << Player1 << endl; cout << "Имя второго игрока: " << Player2 << endl << endl; system("pause"); Create_table(arr1, WaterP1); Set_ships(arr1, 1); Pass2AnotherPlayer(); Create_table(arr2, WaterP2); Set_ships(arr2, 2); system("pause"); system("cls"); cout << "\t BETA TEST" << endl << endl; cout << "Поле игрока с именем (или никнеймом) " << Player1 << endl; Print_table(arr1); cout << endl; cout << "Поле игрока с именем (или никнеймом) " << Player2 << endl; Print_table(arr2); while (true) { Player_move(arr1, arr2, 1, Player1, Player2); Player_move(arr1, arr2, 2, Player1, Player2); Win(amount_of_ship_cells_left_to_drown_P1); Win(amount_of_ship_cells_left_to_drown_P2); if (Win(amount_of_ship_cells_left_to_drown_P2) == true) { ifP1Win(Player1); } else if (Win(amount_of_ship_cells_left_to_drown_P1) == true) { ifP2Win(Player2); } cout << "Поле игрока с именем (никнеймом) " << Player1 << endl << endl; Print_table(arr1); cout << endl; cout << "Поле игрока с именем (никнеймом) " << Player2 << endl << endl; Print_table(arr2); system("pause"); } system("pause"); return 0; } 
  • 3
    Questions asking for help with debugging (“why does this code not work?”) Should include the desired behavior, a specific problem or error, and a minimum code for playing it right in the question. Questions without an explicit description of the problem are useless for other visitors. - Kromster 5:58 pm
  • Have you ever read what I wrote above the code? This is what you are looking for .. Why delete, then add what you deleted again? In this I somehow do not see the point ... - pragma
  • one
    and the minimum code to play it , not the sheet of the entire program. About deleting and adding - I do not understand you. - Kromster
  • one
    Write again, and better in C ++., I don’t know who will want to understand this chaos (it may have sounded rude, but honestly ...) - AR Hovsepyan
  • This is C ++ and I CLEAR said where the above described problem is .. (remember, line 143) - pragma

2 answers 2

I didn’t understand much about the code, but you have the variable nmb_of_cells_for_current_ship,

 if (nmb_of_cells_for_current_ship == 4) strcpy_s(type_of_ship, "линкор (4 клетки для размещения)"); if (nmb_of_cells_for_current_ship == 3) strcpy_s(type_of_ship, "крейсер (3 клетки для размещения)"); if (nmb_of_cells_for_current_ship == 2) strcpy_s(type_of_ship, "эсминец (2 клетки для размещения)"); if (nmb_of_cells_for_current_ship == 1) strcpy_s(type_of_ship, "торпедный катер (1 клетка для размещения)"); 

which is incremented in the case of:

  if ( Cell_checker(PlayerNumber, arr[plant_choise_x + 1][plant_choise_y]) == false /* нижняя */ && Cell_checker(PlayerNumber, arr[plant_choise_x - 1][plant_choise_y]) == false /* верхняя */ && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y - 1]) == false /* левая */ && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y + 1]) == false /* правая */ ) { arr[plant_choise_x][plant_choise_y] = Torp; amount_of_checked_cells++; } else if (amount_of_checked_cells > 4 && amount_of_checked_cells < 12) { if (nmb_of_cells_for_current_ship == 1) nmb_of_cells_for_current_ship++; ... } 

These 2 conditional blocks are in conflict, the first condition checks that a valid cell is specified (horizontally) and, thus, as long as we indicate a valid cell, the else if block is never executed.

In general, the if else block works like this:

 if (условие1) { ... } else if (условие2) { ... } else if (условиеN) { ... } else { ... } 

If condition1 is true, then code 1 block is executed, conditions 2 and further are not even checked. If the condition1 is incorrect, then the next one is checked before the first one is successful, and if there is none, then the else block is executed.

PS you can confirm my guess by entering coordinates that are incorrect vertically or horizontally, after placing 4 single-column guns, then the code will slip through the first condition and move on to the next one, which we need.

  • I found the cause of this case: the code was compiled by me as I did. The fact is that I did IF in IFE, in which there is another IF, in which there are other IFs, including that IF, which is responsible for the count of ship cells. Something like this. Now I forward the code. - pragma

Solved the problem by putting extra. the condition that allows you to switch to the delivery of double-deck, not single-deck ships: amount_of_checked_cells >= 0 && amount_of_checked_cells < 4