Морской бой код ошибки 5

#include<iostream> #include<ctime> #include<iomanip> #include<string> #include<Windows.h> #include<windows.h> using namespace std; HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE); 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]) { cout << "_|"; for (int i = 0; i < FIELD_SIZE + 1; i++) { cout << i << "|"; // верхний ряд } cout << endl; char arr_coord_x[10]{ '1','2','3','4','5','6','7','8','9','10' }; for (int i = 0; i < FIELD_SIZE; i++) { cout << arr_coord_x[i] << "|"; // боковой левый ряд for (int j = 0; j < FIELD_SIZE + 1; 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; bool cell_is_checked = false; 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 && plant_choise_x <= 10 && plant_choise_y <= 10) { 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 /* правая */ && amount_of_checked_cells >= 0 && amount_of_checked_cells < 4 ) { arr[plant_choise_x][plant_choise_y] = Torp; cell_is_checked = true; } if (amount_of_checked_cells >= 4 && amount_of_checked_cells < 10 && 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; cell_is_checked = true; } if (amount_of_checked_cells >= 10 && amount_of_checked_cells < 16 && /// [1][2][3] //[1] (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 + 3][plant_choise_y]) == false // нижняя && 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 + 3][plant_choise_y - 1]) == false // нижнелевая && Cell_checker(PlayerNumber, arr[plant_choise_x + 3][plant_choise_y + 1]) == false // нижнеправая ) || ( // [3] // [2] // [1] 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 - 3][plant_choise_y]) == false // верхняя && 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 - 3][plant_choise_y - 1]) == false // верхнелевая && Cell_checker(PlayerNumber, arr[plant_choise_x - 3][plant_choise_y + 1]) == false // верхнеправая ) || ( // [2] // [1] // [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 - 1][plant_choise_y] == Crui // [1] && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y - 1]) == false // левая && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y + 1]) == false // правая // [2] && Cell_checker(PlayerNumber, arr[plant_choise_x - 2][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 - 2][plant_choise_y - 1]) == false // верхнелевая && Cell_checker(PlayerNumber, arr[plant_choise_x - 2][plant_choise_y + 1]) == false // верхнеправая // [3] && Cell_checker(PlayerNumber, arr[plant_choise_x + 2][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 + 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]) == 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][plant_choise_y] /* само место, куда ставится клетка*/) == false ) ) { arr[plant_choise_x][plant_choise_y] = Crui; cell_is_checked = true; } if (cell_is_checked == true) { amount_of_checked_cells++; cell_is_checked = false; } } else { system("cls"); cout << "Введите допустимые координаты клетки, а не (" << plant_choise_x << ";" << plant_choise_y << ") !" << endl; system("pause"); system("cls"); } } } 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 Введите координаты клетки, в которую вы хотите стрельнуть, "; SetConsoleTextAttribute(h, 1); cout << p1; SetConsoleTextAttribute(h, 0); cout << ": "; 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 (!Win) { 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; }

К сожалению, в играх бывают изъяны: тормоза, низкий FPS, вылеты, зависания, баги и другие мелкие и не очень ошибки. Нередко проблемы начинаются еще до начала игры, когда она не устанавливается, не загружается или даже не скачивается. Да и сам компьютер иногда чудит, и тогда в World of Sea Battle вместо картинки черный экран, не работает управление, не слышно звук или что-нибудь еще.

Что сделать в первую очередь

  1. Скачайте и запустите всемирно известный CCleaner (скачать по прямой ссылке) — это программа, которая очистит ваш компьютер от ненужного мусора, в результате чего система станет работать быстрее после первой же перезагрузки;
  2. Обновите все драйверы в системе с помощью программы Driver Updater (скачать по прямой ссылке) — она просканирует ваш компьютер и обновит все драйверы до актуальной версии за 5 минут;
  3. Установите Advanced System Optimizer (скачать по прямой ссылке) и включите в ней игровой режим, который завершит бесполезные фоновые процессы во время запуска игр и повысит производительность в игре.

Системные требования World of Sea Battle

Второе, что стоит сделать при возникновении каких-либо проблем с World of Sea Battle, это свериться с системными требованиями. По-хорошему делать это нужно еще до покупки, чтобы не пожалеть о потраченных деньгах.

Каждому геймеру следует хотя бы немного разбираться в комплектующих, знать, зачем нужна видеокарта, процессор и другие штуки в системном блоке.

Системные требования World of Sea Battle

Файлы, драйверы и библиотеки

Практически каждое устройство в компьютере требует набор специального программного обеспечения. Это драйверы, библиотеки и прочие файлы, которые обеспечивают правильную работу компьютера.

Начать стоит с драйверов для видеокарты. Современные графические карты производятся только двумя крупными компаниями — Nvidia и AMD. Выяснив, продукт какой из них крутит кулерами в системном блоке, отправляемся на официальный сайт и загружаем пакет свежих драйверов:

  • Скачать драйвер для видеокарты Nvidia GeForce
  • Скачать драйвер для видеокарты AMD Radeon

Обязательным условием для успешного функционирования World of Sea Battle является наличие самых свежих драйверов для всех устройств в системе. Скачайте утилиту Driver Updater, чтобы легко и быстро загрузить последние версии драйверов и установить их одним щелчком мыши:

  • загрузите Driver Updater и запустите программу;
  • произведите сканирование системы (обычно оно занимает не более пяти минут);
  • обновите устаревшие драйверы одним щелчком мыши.

Фоновые процессы всегда влияют на производительность. Вы можете существенно увеличить FPS, очистив ваш ПК от мусорных файлов и включив специальный игровой режим с помощью программы Advanced System Optimizer

  • загрузите Advanced System Optimizer и запустите программу;
  • произведите сканирование системы (обычно оно занимает не более пяти минут);
  • выполните все требуемые действия. Ваша система работает как новая!

Когда с драйверами закончено, можно заняться установкой актуальных библиотек — DirectX и .NET Framework. Они так или иначе используются практически во всех современных играх:

  • Скачать DirectX
  • Скачать Microsoft .NET Framework 3.5
  • Скачать Microsoft .NET Framework 4

Еще одна важная штука — это библиотеки расширения Visual C++, которые также требуются для работы World of Sea Battle. Ссылок много, так что мы решили сделать отдельный список для них:

  • Скачать Microsoft Visual C++ 2005 Service Pack 1
  • Скачать Microsoft Visual C++ 2008 (32-бит) (Скачать Service Pack 1)
  • Скачать Microsoft Visual C++ 2008 (64-бит) (Скачать Service Pack 1)
  • Скачать Microsoft Visual C++ 2010 (32-бит) (Скачать Service Pack 1)
  • Скачать Microsoft Visual C++ 2010 (64-бит) (Скачать Service Pack 1)
  • Скачать Microsoft Visual C++ 2012 Update 4
  • Скачать Microsoft Visual C++ 2013

Если вы дошли до этого места — поздравляем! Наиболее скучная и рутинная часть подготовки компьютера к геймингу завершена. Дальше мы рассмотрим типовые проблемы, возникающие в играх, а также кратко наметим пути их решения.

Драйверы для World of Sea Battle

World of Sea Battle не скачивается. Долгое скачивание. Решение

Скорость лично вашего интернет-канала не является единственно определяющей скорость загрузки. Если раздающий сервер работает на скорости, скажем, 5 Мб в секунду, то ваши 100 Мб делу не помогут.

Если World of Sea Battle совсем не скачивается, то это может происходить сразу по куче причин: неправильно настроен роутер, проблемы на стороне провайдера, кот погрыз кабель или, в конце-концов, упавший сервер на стороне сервиса, откуда скачивается игра.

World of Sea Battle не скачивается

World of Sea Battle не устанавливается. Прекращена установка. Решение

Перед тем, как начать установку World of Sea Battle, нужно еще раз обязательно проверить, какой объем она занимает на диске. Если же проблема с наличием свободного места на диске исключена, то следует провести диагностику диска. Возможно, в нем уже накопилось много «битых» секторов, и он банально неисправен?

В Windows есть стандартные средства проверки состояния HDD- и SSD-накопителей, но лучше всего воспользоваться специализированными программами.

Но нельзя также исключать и вероятность того, что из-за обрыва соединения загрузка прошла неудачно, такое тоже бывает. А если устанавливаете World of Sea Battle с диска, то стоит поглядеть, нет ли на носителе царапин и чужеродных веществ!

World of Sea Battle не устанавливается

World of Sea Battle не запускается. Ошибка при запуске. Решение

World of Sea Battle установилась, но попросту отказывается работать. Как быть?

Выдает ли World of Sea Battle какую-нибудь ошибку после вылета? Если да, то какой у нее текст? Возможно, она не поддерживает вашу видеокарту или какое-то другое оборудование? Или ей не хватает оперативной памяти?

Помните, что разработчики сами заинтересованы в том, чтобы встроить в игры систему описания ошибки при сбое. Им это нужно, чтобы понять, почему их проект не запускается при тестировании.

Обязательно запишите текст ошибки. Если вы не владеете иностранным языком, то обратитесь на официальный форум разработчиков World of Sea Battle. Также будет полезно заглянуть в крупные игровые сообщества и, конечно, в наш FAQ.

Если World of Sea Battle не запускается, мы рекомендуем вам попробовать отключить ваш антивирус или поставить игру в исключения антивируса, а также еще раз проверить соответствие системным требованиям и если что-то из вашей сборки не соответствует, то по возможности улучшить свой ПК, докупив более мощные комплектующие.

В World of Sea Battle черный экран, белый экран, цветной экран. Решение

Проблемы с экранами разных цветов можно условно разделить на 2 категории.

Во-первых, они часто связаны с использованием сразу двух видеокарт. Например, если ваша материнская плата имеет встроенную видеокарту, но играете вы на дискретной, то World of Sea Battle может в первый раз запускаться на встроенной, при этом самой игры вы не увидите, ведь монитор подключен к дискретной видеокарте.

Во-вторых, цветные экраны бывают при проблемах с выводом изображения на экран. Это может происходить по разным причинам. Например, World of Sea Battle не может наладить работу через устаревший драйвер или не поддерживает видеокарту. Также черный/белый экран может выводиться при работе на разрешениях, которые не поддерживаются игрой.

World of Sea Battle вылетает. В определенный или случайный момент. Решение

Играете вы себе, играете и тут — бац! — все гаснет, и вот уже перед вами рабочий стол без какого-либо намека на игру. Почему так происходит? Для решения проблемы стоит попробовать разобраться, какой характер имеет проблема.

Если вылет происходит в случайный момент времени без какой-то закономерности, то с вероятностью в 99% можно сказать, что это ошибка самой игры. В таком случае исправить что-то очень трудно, и лучше всего просто отложить World of Sea Battle в сторону и дождаться патча.

Однако если вы точно знаете, в какие моменты происходит вылет, то можно и продолжить игру, избегая ситуаций, которые провоцируют сбой.

Однако если вы точно знаете, в какие моменты происходит вылет, то можно и продолжить игру, избегая ситуаций, которые провоцируют сбой. Кроме того, можно скачать сохранение World of Sea Battle в нашем файловом архиве и обойти место вылета.

World of Sea Battle зависает. Картинка застывает. Решение

Ситуация примерно такая же, как и с вылетами: многие зависания напрямую связаны с самой игрой, а вернее с ошибкой разработчика при ее создании. Впрочем, нередко застывшая картинка может стать отправной точкой для расследования плачевного состояния видеокарты или процессора.

Так что если картинка в World of Sea Battle застывает, то воспользуйтесь программами для вывода статистики по загрузке комплектующих. Быть может, ваша видеокарта уже давно исчерпала свой рабочий ресурс или процессор греется до опасных температур?

Проверить загрузку и температуры для видеокарты и процессоров проще всего в программе MSI Afterburner. При желании можно даже выводить эти и многие другие параметры поверх картинки World of Sea Battle.

Какие температуры опасны? Процессоры и видеокарты имеют разные рабочие температуры. У видеокарт они обычно составляют 60-80 градусов по Цельсию. У процессоров немного ниже — 40-70 градусов. Если температура процессора выше, то следует проверить состояние термопасты. Возможно, она уже высохла и требует замены.

Если греется видеокарта, то стоит воспользоваться драйвером или официальной утилитой от производителя. Нужно увеличить количество оборотов кулеров и проверить, снизится ли рабочая температура.

World of Sea Battle тормозит. Низкий FPS. Просадки частоты кадров. Решение

При тормозах и низкой частоте кадров в World of Sea Battle первым делом стоит снизить настройки графики. Разумеется, их много, поэтому прежде чем снижать все подряд, стоит узнать, как именно те или иные настройки влияют на производительность.Разрешение экрана. Если кратко, то это количество точек, из которого складывается картинка игры. Чем больше разрешение, тем выше нагрузка на видеокарту. Впрочем, повышение нагрузки незначительное, поэтому снижать разрешение экрана следует только в самую последнюю очередь, когда все остальное уже не помогает.Качество текстур. Как правило, этот параметр определяет разрешение файлов текстур. Снизить качество текстур следует в случае если видеокарта обладает небольшим запасом видеопамяти (меньше 4 ГБ) или если используется очень старый жесткий диск, скорость оборотов шпинделя у которого меньше 7200.Качество моделей (иногда просто детализация). Эта настройка определяет, какой набор 3D-моделей будет использоваться в игре. Чем выше качество, тем больше полигонов. Соответственно, высокополигональные модели требуют большей вычислительной мощности видекарты (не путать с объемом видеопамяти!), а значит снижать этот параметр следует на видеокартах с низкой частотой ядра или памяти.Тени. Бывают реализованы по-разному. В одних играх тени создаются динамически, то есть они просчитываются в реальном времени в каждую секунду игры. Такие динамические тени загружают и процессор, и видеокарту. В целях оптимизации разработчики часто отказываются от полноценного рендера и добавляют в игру пре-рендер теней. Они статичные, потому как по сути это просто текстуры, накладывающиеся поверх основных текстур, а значит загружают они память, а не ядро видеокарты.Нередко разработчики добавляют дополнительные настройки, связанные с тенями:

  • Разрешение теней — определяет, насколько детальной будет тень, отбрасываемая объектом. Если в игре динамические тени, то загружает ядро видеокарты, а если используется заранее созданный рендер, то «ест» видеопамять.
  • Мягкие тени — сглаживание неровностей на самих тенях, обычно эта опция дается вместе с динамическими тенями. Вне зависимости от типа теней нагружает видеокарту в реальном времени.

Сглаживание. Позволяет избавиться от некрасивых углов на краях объектов за счет использования специального алгоритма, суть которого обычно сводится к тому, чтобы генерировать сразу несколько изображений и сопоставлять их, высчитывая наиболее «гладкую» картинку. Существует много разных алгоритмов сглаживания, которые отличаются по уровню влияния на быстродействие World of Sea Battle.Например, MSAA работает «в лоб», создавая сразу 2, 4 или 8 рендеров, поэтому частота кадров снижается соответственно в 2, 4 или 8 раз. Такие алгоритмы как FXAA и TAA действуют немного иначе, добиваясь сглаженной картинки путем высчитывания исключительно краев и с помощью некоторых других ухищрений. Благодаря этому они не так сильно снижают производительность.Освещение. Как и в случае со сглаживанием, существуют разные алгоритмы эффектов освещения: SSAO, HBAO, HDAO. Все они используют ресурсы видеокарты, но делают это по-разному в зависимости от самой видеокарты. Дело в том, что алгоритм HBAO продвигался в основном на видеокартах от Nvidia (линейка GeForce), поэтому лучше всего работает именно на «зеленых». HDAO же, наоборот, оптимизирован под видеокарты от AMD. SSAO — это наиболее простой тип освещения, он потребляет меньше всего ресурсов, поэтому в случае тормозов в World of Sea Battle стоит переключиться него.Что снижать в первую очередь? Как правило, наибольшую нагрузку вызывают тени, сглаживание и эффекты освещения, так что лучше начать именно с них.Часто геймерам самим приходится заниматься оптимизацией World of Sea Battle. Практически по всем крупным релизам есть различные соответствующие и форумы, где пользователи делятся своими способами повышения производительности.

Один из них — специальная программа под названием Advanced System Optimizer. Она сделана специально для тех, кто не хочет вручную вычищать компьютер от разных временных файлов, удалять ненужные записи реестра и редактировать список автозагрузки. Advanced System Optimizer сама сделает это, а также проанализирует компьютер, чтобы выявить, как можно улучшить производительность в приложениях и играх.

Скачать Advanced System Optimizer

World of Sea Battle лагает. Большая задержка при игре. Решение

Многие путают «тормоза» с «лагами», но эти проблемы имеют совершенно разные причины. World of Sea Battle тормозит, когда снижается частота кадров, с которой картинка выводится на монитор, и лагает, когда задержка при обращении к серверу или любому другому хосту слишком высокая.

Именно поэтому «лаги» могут быть только в сетевых играх. Причины разные: плохой сетевой код, физическая удаленность от серверов, загруженность сети, неправильно настроенный роутер, низкая скорость интернет-соединения.

Впрочем, последнее бывает реже всего. В онлайн-играх общение клиента и сервера происходит путем обмена относительно короткими сообщениями, поэтому даже 10 Мб в секунду должно хватить за глаза.

В World of Sea Battle нет звука. Ничего не слышно. Решение

World of Sea Battle работает, но почему-то не звучит — это еще одна проблема, с которой сталкиваются геймеры. Конечно, можно играть и так, но все-таки лучше разобраться, в чем дело.

Сначала нужно определить масштаб проблемы. Где именно нет звука — только в игре или вообще на компьютере? Если только в игре, то, возможно, это обусловлено тем, что звуковая карта очень старая и не поддерживает DirectX.

Если же звука нет вообще, то дело однозначно в настройке компьютера. Возможно, неправильно установлены драйвера звуковой карты, а может быть звука нет из-за какой-то специфической ошибки нашей любимой ОС Windows.

В World of Sea Battle не работает управление. World of Sea Battle не видит мышь, клавиатуру или геймпад. Решение

Как играть, если невозможно управлять процессом? Проблемы поддержки специфических устройств тут неуместны, ведь речь идет о привычных девайсах — клавиатуре, мыши и контроллере.

Таким образом, ошибки в самой игре практически исключены, почти всегда проблема на стороне пользователя. Решить ее можно по-разному, но, так или иначе, придется обращаться к драйверу. Обычно при подключении нового устройства операционная система сразу же пытается задействовать один из стандартных драйверов, но некоторые модели клавиатур, мышей и геймпадов несовместимы с ними.

Таким образом, нужно узнать точную модель устройства и постараться найти именно ее драйвер. Часто с устройствами от известных геймерских брендов идут собственные комплекты ПО, так как стандартный драйвер Windows банально не может обеспечить правильную работу всех функций того или иного устройства.

Если искать драйверы для всех устройств по отдельности не хочется, то можно воспользоваться программой Driver Updater. Она предназначена для автоматического поиска драйверов, так что нужно будет только дождаться результатов сканирования и загрузить нужные драйвера в интерфейсе программы.

Нередко тормоза в World of Sea Battle могут быть вызваны вирусами. В таком случае нет разницы, насколько мощная видеокарта стоит в системном блоке. Проверить компьютер и отчистить его от вирусов и другого нежелательного ПО можно с помощью специальных программ. Например NOD32. Антивирус зарекомендовал себя с наилучшей стороны и получили одобрение миллионов пользователей по всему миру.

ZoneAlarm подходит как для личного использования, так и для малого бизнеса, способен защитить компьютер с операционной системой Windows 10, Windows 8, Windows 7, Windows Vista и Windows XP от любых атак: фишинговых, вирусов, вредоносных программ, шпионских программ и других кибер угроз. Новым пользователям предоставляется 30-дневный бесплатный период.

Nod32 — анитивирус от компании ESET, которая была удостоена многих наград за вклад в развитие безопасности. На сайте разработчика доступны версии анивирусных программ как для ПК, так и для мобильных устройств, предоставляется 30-дневная пробная версия. Есть специальные условия для бизнеса.

World of Sea Battle, скачанная с торрента не работает. Решение

Если дистрибутив игры был загружен через торрент, то никаких гарантий работы быть в принципе не может. Торренты и репаки практически никогда не обновляются через официальные приложения и не работают по сети, потому что по ходу взлома хакеры вырезают из игр все сетевые функции, которые часто используются для проверки лицензии.

Такие версии игр использовать не просто неудобно, а даже опасно, ведь очень часто в них изменены многие файлы. Например, для обхода защиты пираты модифицируют EXE-файл. При этом никто не знает, что они еще с ним делают. Быть может, они встраивают само-исполняющееся программное обеспечение. Например, майнер, который при первом запуске игры встроится в систему и будет использовать ее ресурсы для обеспечения благосостояния хакеров. Или вирус, дающий доступ к компьютеру третьим лицам. Тут никаких гарантий нет и быть не может.

К тому же использование пиратских версий — это, по мнению нашего издания, воровство. Разработчики потратили много времени на создание игры, вкладывали свои собственные средства в надежде на то, что их детище окупится. А каждый труд должен быть оплачен.

Поэтому при возникновении каких-либо проблем с играми, скачанными с торрентов или же взломанных с помощью тех или иных средств, следует сразу же удалить «пиратку», почистить компьютер при помощи антивируса и приобрести лицензионную копию игры. Это не только убережет от сомнительного ПО, но и позволит скачивать обновления для игры и получать официальную поддержку от ее создателей.

World of Sea Battle выдает ошибку об отсутствии DLL-файла. Решение

Как правило, проблемы, связанные с отсутствием DLL-библиотек, возникают при запуске World of Sea Battle, однако иногда игра может обращаться к определенным DLL в процессе и, не найдя их, вылетать самым наглым образом.

Чтобы исправить эту ошибку, нужно найти необходимую библиотеку DLL и установить ее в систему. Проще всего сделать это с помощью программы DLL-fixer, которая сканирует систему и помогает быстро найти недостающие библиотеки.

Если ваша проблема оказалась более специфической или же способ, изложенный в данной статье, не помог, то вы можете спросить у других пользователей в нашей рубрике «Вопросы и ответы». Они оперативно помогут вам!

Благодарим за внимание!

App Store Sea Battle Classic (Морской бой) + откровения разработчика

Favorite В закладки

Sea Battle Classic (Морской бой) + откровения разработчика

sea-battle

Кто не играл на уроках географии в морской бой? Только ботаны и нудные отличники. Игровое поле 10х10, четыре лодки, три катера, два крейсера и один фрегат – с таким арсеналом надо противостоять равнозначному противнику. Шепотом произносятся ходы, пока училка объяснет критерии образования подзолистых почв:

Zerto уже писал про бесплатную версию Sea Battle Classic: классического «русского» морского боя (корабли не могут соприкасаться, в отличие от американских правил) нашего разработчика Павла Егоркина, скрывающегося на форуме и в комментариях под ником iАлена. На самом деле, это все знакомая нам компания iSoftru.

Недавно в App Store вышла платная версия игры с возможностью «стрельбы» через WiFi [$0.99, iTunes link].

Но вот тут начались проблемы, о чем расскажет Павел из первых уст.

Павел Егоркин: Этот пост — попытка обобщить мой небольшой опыт продвижения программ в АппСтор и начать обсуждение способов продвижения

Почти год занимаясь раскруткой, продвижением и организацией продаж приложений распространяемых через Cydia (каталог софта для джеилбрейкнутых айфонов) я не имел совершенно никакого опыта в работе с официальным магазином.
И вот, недавно появилось предложение помочь (не бесплатно) в раскрутке продуктов, а в частности игры — игры, которую можно раскрутить, продвинуть и продать.

Сейчас после двух месяцев стремительного набивания шишек, места на моей голове уже почти не осталось — как следствие пора делится опытом и очищать место под новые :)

На момент написания статьи она занимает:
— 7 место top paid apps (места идут по Российскому апп стор)
— 4 место top paid games
— 1 место top paid action games
— 2 место top paid board games
для достижения этих мест нужно иметь 40 — 50 покупок* в течении последних трех дней

Есть «Lite» версия, бесплатная, с баннерной рекламой от AdMob, и невозможностью поиграть через wi-fi.
— 31 место top free apps
— 13 место top free games
— 8 место top free action games
— 1 место top free board games
для достижения этих мест нужно иметь 250 — 300 закачек* в течении последних трех дней
*опять таки по Российскому аппстору

Сперва начну с краткой истории как она появилась и что делалось, а затем попытаюсь подвести итог по работоспособности методов

Замысел был прост: морского боя с привычными русским правилами и симпатичным интерфейсом а аппсторе нет — следовательно нужно делать.

лирическое отступление: я не программист и не менеджер — поэтому ошибки совершенные на этих фронтах комментировать не буду.

С учетом динамики магазина решили работать этапами: сперва выпускаем бой против компьютера, затем дополнение с сетевой игрой по wi-fi, затем дополнение с игрой через интернет, глобальным списком игроков, регистрацией и прочими модностями.

На первом этапе особых проблем не было. Морской бой вышел и был принят на ура и публикой и блоггерами и тематическими ресурсами — достаточно сказать что на текущий момент количество закачек ‘lite’ версии заметно превышает 100 000 копий.

А рынок очень быстрый, средний срок жизни приложения, хорошо если дни.
В процессе ожидания, количество закачек в день упало сначала до десятка тысяч, а затем и до тысяч.

Когда же wi-fi морской бой вышел, мы столкнулись с тем, что сильно переоценили успехи с бесплатной версией. Вот тут-то и начались шишки, эксперименты, и активный поиск источников опыта.

Ошибка первая: разнесение по времени

Бесплатную версию качают куда лучше платной, невзирая на цену. Это аксиома.
Срок жизни развлекательной программы — дни.

За полтора месяца основная аудитория успела наигратся, и даже самые преданые фэны устали ждать возможности заплатить. Мы им такую возможность не дали (вовремя).
Т. Е. вся масса закачек это не ресурс и, скорее всего, не потенциальная аудитория.

Закачек апдейта лайт версии

треть от общего числа закачек.
Количество переходов на платную

1% от числа обновившихся.

Ошибка вторая: неподготовленность

Вот это уже целиком моя ошибка.

Не было подготовленно заранее:
— локализации страниц в аппсторе на основные языки по приоритетным странам.
— интересных скриншотов объясняющих что изменилось (были взяты скриншоты с бесплатной версии)
+
— неправильная оценка успеха бесплатной версии у блоггеров.
— не заготовлена договоренность о обзорах в тематических изданиях.

Ошибка третья: Неправильное распределение усилий по рынкам

На рынках где уже был успех, он не закреплялся, на рынках где его не было он и не появился.

Сейчас пошла только вторая неделя продаж, и ошибки еще можно выправить, но тем не менее они есть и о них стоит помнить.

Основные варианты продвижения

Выпуск бесплатной версии

По очень ненадежной статистике до 10% закачивающих бесплатную версию, покупает платную. И хотя эта цифра зависит от того, что у вас за приложение и за какую цену, давать возможность попробовать ваше приложение — это очень хорошая идея.

Качественное описание на разных языках
Описание должно быть интересным и относительно коротким. Его мало кто читает, но чтоб уж если начали, то нашли всю интересующую информацию.
Хоть английский и международный язык, но читать здоровенное описание на чужом языке сложнее чем на родном, поэтому стоит запастись копией вашего описания как минимум на итальянском, французком и немецком.

И да… не стоит писать на английском с ошибками. Доверьте перевод носителю языка. А еще лучше доверить ему и написание текста.

Выход: стимулировать пользователей писать положительные отзывы, либо писать их самим. И заодно иметь по 3-4 (5-10) аккаунта по стратегически важным странам на случай атаки конкурентов.

Информативные скриншоты
На скриншоты можно ставить любые картинки. В том числе что-то, поясняющее нововведения или игровой процесс. Зайдите на страницу iBeer и FlyControl

scr

Частые апдейты
Субъективно — это неплохая идея. Единственно что, стоит таки добавлять что-то новое, а не отсылать один и тот же бинарник.

Уточнение: сразу же как получаете письмо-уведомление о утверждении приложения, нужно идти в аппстор и менять дату доступности приложения на текущее число (по умолчанию стоит на день загрузки бинарника), тогда есть высокий шанс, что приложение засветится на первых двух страницах «recent apps» — и получит стартовое ускорение.

«Спам» по блоггерам и тематическим изданиям
Если у вас хороший продукт, да еще и бесплатный, да и без рекламы, его будут щупать, описывать и распростанять без вас. Но тем не менее писать нужно в любом случае.

Сложность в том, что популярные ресурсы и без вас завалены кучами промокодов и просьб об обзорах (т. е. которые не завалены вам скорее всего и не интересны).

Выход: заводите связи, общайтесь заранее, а не во время пика продаж (точнее и заранее и во время).

Twitter и прочие социальные сети
На хабре последнее время частенько поднимается вопрос, а нужен ли компаниям twitter? Зарубежом тема социальных медиа тоже более чем популярна.

Единственное, что можно сказать… не пускайте маркетолога, не работавшего с интернетом, (даже очень хорошего) на твиттер. С большой долей вероятности ничего хорошего не получится.
По крайней мере поначалу.
Быстрой отдачи тоже ждать не стоит, зато если постепенно развивать и укреплять свое присутствие, со временем даже один твит может дать очень много.

Комментарий SeaBreeze: у нас на сайте все обзоры бесплатные. Более того, мы всячески подталкиваем разработчиков контактировать с нами и проводить совместные акции.

Баннеры на тех же ресурсах
Стоит дороже предыдущего, а результативность меньше.

Комментарий SeaBreeze: Баннеры софта работают, все зависит от его подачи и тем, чем он окружен (промо, обзоры, пиар). Например, на баннеры Rolando 2 было потрачено несколько десятков тысяч долларов. А какой бум был до этого!

Конкурсы за деньги
Результативность стремится к нулю. Чуть выше чем у баннеров.
Но тут оговорка, если конкурс действительно интересный информация о нем (и соответсвенно о программе) пойдет гулять по блогосфере, что вам собственно и нужно.

Спам «псевдопосоветуйдругу»
В iTunes есть функция — посоветуй другу. Дается форма, и на указанный адрес отправляется письмо с неким завлекающим текстом, причем письмо определенного вида, на стандартной эйпловской формочке.
Есть вариант разослать по листу пару тысяч (десятков/сотен тысяч) писем по подобному шаблону, типо из тунца…

Имхо использовать это не стоит, отдача небольшая, а многие спам (и я в том числе) очень не любят. Я уж не говорю о том, что ваши адреса могут попасть в спам базы, а доменное имя непонравится гуглу.
Но такие способы тоже имеют место быть.

Проплата покупок
Звучит странно, но тем не менее. Идея в том, что положение программы в рейтингах вычисляется по результатам продаж в последние трое суток. И если сделать рывок продаж за три дня можно выйти в топ. А в топе правильной страны деньги отобъются гарантированно, тем более

70% этих денег в любом случае прийдет обратно к вам.

Сложность в том, что для того чтобы попасть в топ правильной страны вам нужно как минимум тысяча (а на самом деле больше) покупок в день, вот и думайте сколько денег и сил нужно вложить.

И еще, вопрос как это реализовать. Успешно реализованных вариантов я пока не видел, но охотно верю что они есть или будут.
Комментарий SeaBreeze: Это не афишируется, но такое есть. Сам однажды принимал участие в написании роботов-покупателей.

Итого

Особенность экоструктуры аппстора такова, что пользователю нет необходимости выходить из него. Как правило большинство и не выходит. То есть не стоит надеятся, что наводнив сотни мелких ресурсов и ресурсиков вы получите огромный рост продаж. Определенный рост будет, но явно не тех размеров что хочется.
Следовательно, очень важно иметь качественную страницу в магазине. Будет обидно, если кто-то не попробует вашу гениальную программу только из-за плохих скриншотов или описания с ошибками.

Безусловно программа должна нравится и делать то, что пользователь от неё ждет. Будет здорово если в ней есть БОНУС. Какой-то очень приятный функционал который пользователь не ожидает увидеть и который вы не рекламировали. Так он получит (по его ощущениям) в два раза больше чем ожидал, и непременно не поленится оставить положительный комментарий.
Программы которые никто не комментирует — никому не нужны. В каждой стране свой аппстор, с отдельными страницами комментариев ;) И естественно больше верят комментариям на родном языке.

Да, если вашей программе одобрительно отзовутся например на tuaw. com — стоит ожидать немаленького роста продаж. Так что если у вас нет знакомого блоггера на крупном ресурсе — стоит с ним познакомится.

И последнее, мое мнение — не стоит тратить денег на рекламу до тех пор пока ваше приложение не приносит вам хорошую прибыль. Лучше вложите дополнительные ресурсы в разработку. Покачественнее дизайн и тексты. Хорошее тестирование, удобный интерфейс… Потратьте время на общение с пользователями на 2-3 крупных форумах, наконец.
Вполне возможно не вкладывая деньги в рекламу* сделать сверхпопулярный продукт. Творите через это ограничение, через ограничения творится интереснее :)

* — если не считать тексты и скриншоты рекламой.

Вот такие дела, т. е. заработать можно, но на ОЧЕНЬ популярном приложении. [Хабрахабр]

Морской бой 2

Дата выхода «Морской бой 2» никогда не станет известна

По словам хейтеров, «Морской бой» – отличный фильм о том, какие парни нравятся избалованным девушкам и ужасный пример того, какие болваны попадают в офицеры ВМФ США. Кроме того, проект принёс больше 40 млн убытков своим продюсерам. Поэтому, о дате выхода «Морской бой 2» фанаты этого фильма в ближайшем будущем ничего не узнают. Уж очень плохо показала себя в прокате первая часть.

Дата выхода «Морской бой 2»до сих пор официально заявлена не была. И, скорее всего, не будет. Проект «Морской бой» оказался слишком убыточным, чтобы кто-либо захотел связываться с ним снова.

Морской бой 2 дата выхода

Морской бой 2. Кадр из фильма

Отличный парень, но неудачник

Алекс Хоппер – отличный парень, если не знакомиться с ним слишком близко. Украсть шавуху из закрытого магазина ночью, чтобы произвести впечатление на девушку? Легко! Получить по голове от футболиста другой команды, но продолжать делать вид, что ты самый крутой игрок? Ещё легче. Получить приказ осмотреть обломки космического корабля и ничего там не трогать, но всё равно влезть в неприятности? Это конечно сложнее, но тоже возможно.

Благо, подходящий космический корабль как раз упал недалеко от корабля, на котором служит Хоппер. И в самом деле, отличный парень, пока играет за вражескую команду. Зато дочери адмирала он нравится. Девушка изо всех сил старается, чтобы её отец и парень поговорили, нашли общий язык, и сделали её счастливой. Но Хоппер и тут не изменяет своему характеру, разговор «по душам» с отцом своей девушки он проваливает просто феерически.

Вторжение инопланетян – единственный шанс остаться на службе

Морской бой 2 дата выхода2

Морской бой 2. Кадр из фильма

Короче, Алекс Хоппер, стал командовать кораблём и смог остановить вторжение. Да, он наделал столько ошибок, что о них можно снять полнометражный фильм «Морской бой 2», но благо дата выхода его до сих пор неизвестна.

Трейлер к фильму “Морской бой 2”

Источники:

https://www. iphones. ru/iNotes/30382

https://data-vyhoda. ru/morskoj-boj-2/

Странно счетчик произведенных выстрелов работает.
Ситуация.
Стреляю по D3 и топлю одиночный корабль противника.
Пишет, что сделано 39 выстрелов.

shot-22_09.17_17_55.24-0288.thumb.jpg.30430bb0dca5def8a81a844c75d7fbb1.jpg

Стреляю I6 и топлю последний одиночный корабль противника.

Пишет, что сделан 41 выстрел.

shot-22_09.17_17_55.36-0498.thumb.jpg.0eb264071d92f9cd25af5bbc083e115f.jpg

Следующий боя так же счетчик +1 выстрел непроизведенный прибавляет в случае победы.
Счетчик показывает 64 выстрела перед нажатием на E5

3.thumb.jpg.d97b64016018aecadb4ee1f4ec5bcbae.jpg

После нажатия уже пишет что 66 выстрелов было, когда всего 65 должно быть написано.

4.thumb.jpg.1edb9f55f94d516cb333fc7fe53387a7.jpg

Заявка ЦПП ID 141939023, там же отчет ВГчек.
Дополню. После сбора отчета ВГчек зашел в Морской бой и появился экран как на скрине выше но только число выстрелов на 1 меньше и соответствует нормальному числу

5.thumb.jpg.2360ca85c9b0cd7a17f2c54521b4cf02.jpg

Возможно при сборке отчета была устранена ошибка.

Еще дополню. Сыграл еще бой. Но уже открыл во внешнем браузере Морской бой. Играл делая часть выстрелов в клиенте, часть в игре. Завершал партию в клиенте. Счетчик показал, что выполнено 47 выстрелов. 

6.thumb.jpg.2985729f5635e0ef4aece2dfd9332bd8.jpg

Произвожу 1 выстрел и топлю последний корабль. Прямо на глазах счетчик проматывает 48 и пишет что произведено 49 выстрелов. 

7.thumb.jpg.c1c4c45d4281799cdc6864ac9e36c1c9.jpg

(видел 48 доли секунды и поменялось на 49). После чего перешел во внешний браузер там была та же картинка с числом 49. Нажал обновить страницу. Число поменялось как в браузере, так и в игре на 48.

8.thumb.jpg.b6ea128422738a18ada34e077e0231f8.jpg

#include<iostream>
#include<ctime>
#include<iomanip>
#include<string>
#include<Windows.h>
#include<windows.h>
using namespace std;

HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);

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]) {

    cout << "_|";
    for (int i = 0; i < FIELD_SIZE + 1; i++)
    {
        cout << i << "|"; // верхний ряд
    }
    cout << endl;
    char arr_coord_x[10]{ '1','2','3','4','5','6','7','8','9','10' };

    for (int i = 0; i < FIELD_SIZE; i++)
    {
        cout << arr_coord_x[i] << "|"; // боковой левый ряд

        for (int j = 0; j < FIELD_SIZE + 1; 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;   
    bool cell_is_checked = false;

    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
            && plant_choise_x <= 10 && plant_choise_y <= 10)
        {
            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 /* правая */
                && amount_of_checked_cells >= 0 && amount_of_checked_cells < 4
                ) {
                arr[plant_choise_x][plant_choise_y] = Torp;
                cell_is_checked = true;
            }

            if (amount_of_checked_cells >= 4 && amount_of_checked_cells < 10
                && 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;
                cell_is_checked = true;
            }

            if (amount_of_checked_cells >= 10 && amount_of_checked_cells < 16 &&

                /// [1][2][3]

                //[1]
                (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 + 3][plant_choise_y]) == false // нижняя
                    && 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 + 3][plant_choise_y - 1]) == false // нижнелевая
                    && Cell_checker(PlayerNumber, arr[plant_choise_x + 3][plant_choise_y + 1]) == false // нижнеправая
                    )
                    ||
                    (
                        // [3]
                        // [2]
                        // [1]

                        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 - 3][plant_choise_y]) == false // верхняя
                        && 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 - 3][plant_choise_y - 1]) == false // верхнелевая
                        && Cell_checker(PlayerNumber, arr[plant_choise_x - 3][plant_choise_y + 1]) == false // верхнеправая
                    )
                        ||
                        (
                            // [2]
                            // [1]
                            // [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 - 1][plant_choise_y] == Crui

                            // [1]

                            && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y - 1]) == false // левая
                            && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y + 1]) == false // правая

                            // [2]

                            && Cell_checker(PlayerNumber, arr[plant_choise_x - 2][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 - 2][plant_choise_y - 1]) == false // верхнелевая
                            && Cell_checker(PlayerNumber, arr[plant_choise_x - 2][plant_choise_y + 1]) == false // верхнеправая

                            // [3]

                            && Cell_checker(PlayerNumber, arr[plant_choise_x + 2][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 + 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]) == 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][plant_choise_y] /* само место, куда ставится клетка*/) == false
                            )
                    )
            {
                arr[plant_choise_x][plant_choise_y] = Crui;
                cell_is_checked = true;
            }



            if (cell_is_checked == true) {
                amount_of_checked_cells++;
                cell_is_checked = false;
            }
        }
            else
            {
                system("cls");
                cout << "Введите допустимые координаты клетки, а не (" << plant_choise_x << ";" << plant_choise_y << ") !" << endl;
                system("pause");
                system("cls");
            }
    }
}

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 Введите координаты клетки, в которую вы хотите стрельнуть, ";
            SetConsoleTextAttribute(h, 1);
            cout << p1;
            SetConsoleTextAttribute(h, 0);
            cout << ": ";
            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 (!Win)
    {
        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;
}

The Cycle: Frontier

The Cycle: Frontier is an exciting first-person shooter video game that was developed and published by Yager Development in 2022. The game is categorized as a «competitive quest shooter» and features a unique cross-genre gameplay element labeled «PvEvP», which combines player versus environment and player versus player gameplay. The game was initially launched in August 2019, through early access on the Windows platform. It was then officially released on June 8, 2022, after undergoing a series of updates and improvements to enhance the gaming experience. In the game, players take on the role of a Prospector, a fortune seeker tasked with exploring and gathering resources from a hostile alien planet known as Fortuna III. The ultimate goal is to complete contracts, gain resources, and earn points while fending off other Prospectors who are competing for the same resources.

The game’s PvPvE gameplay allows for unique and exciting moments, as players must navigate through hostile alien creatures and environments while also battling other players. The game offers a range of weapons, gear, and abilities that players can use to outsmart their opponents and gain an edge in the game. The game’s graphics are stunning, and the environment is immersive, with the alien planet Fortuna III providing a unique and visually impressive backdrop for the game’s action. The game also offers a range of customizable characters, allowing players to personalize their Prospector and stand out from the crowd. Overall, The Cycle: Frontier is an exciting addition to the first-person shooter genre, with its unique blend of player versus environment and player versus player gameplay, stunning graphics, and immersive environment. The game has garnered a growing fanbase and positive reviews, making it a must-play for fans of the genre.

How to Fix the cycle Frontier  Error Code 5?

The Cycle Frontier is a new online game that has been experiencing technical difficulties since its release. One of the most common errors players encounter is the Cycle Frontier Error Code 5, which causes players to be disconnected from the game and lose their progress. Unfortunately, there is no official solution to this error as of yet. The only options available to players are to wait for the server to reconnect or to relaunch the game. The official Discord for The Cycle Frontier has received numerous reports of this bug, but there has been no official response from the game’s developers.

During the beta testing phase of the game, there was a similar error known as error code 4. One possible solution for that error was to uninstall and reinstall the anti-cheat software BattlEye. Therefore, players experiencing the Cycle Frontier Error Code 5 may want to check if their version of BattlEye is up to date. However, changing beta participation settings on the Steam version of the game, which was a solution for error code 4, may not be valid anymore for the official release. In any case, players will have to wait for an official fix from the developers.

The Cycle Frontier Error Code 5 is particularly frustrating because it usually occurs during a match, causing players to lose all of their progress and items. This problem is just one of many issues the game has been experiencing since its release. Other issues players have reported include crashes, equipment upgrades failing, loot not registering upon extraction, matchmaking not working, and servers disconnecting. These issues have been documented in the #bug-reports channel on the game’s Discord. It’s not uncommon for games to experience bugs during their launch, even if the beta phase was smooth. Players can only hope that Yager, the developer of The Cycle Frontier, will address these issues with a hotfix or patch soon. In the meantime, players may want to check out other games, such as Call of Duty: Modern Warfare II, and keep an eye out for updates from The Cycle Frontier’s official channels.

TRENDING

What is the Cycle Frontier  Error Code 5?

The Cycle: Frontier is a new online game that has been experiencing login issues since its launch. Many players have reported encountering the “Login Failed” error, often accompanied by a “server offline” message that states, “Could not establish backend connection, will retry connection in a couple of seconds.” Sometimes, this error may also come with a specific error code, displayed as “ERROR CODE ##”. This login issue can be very frustrating for players, as it prevents them from accessing the game and playing with their friends.

Fortunately, there are several potential solutions to this problem that players can try.

  1. One of the first things players should do is check their internet connection. A poor or unstable internet connection can prevent the game from connecting to the server and cause the login error. Players can try resetting their router, checking for any network outages, and running a speed test to ensure their internet is stable and fast enough to support online gaming.

  2. If the internet connection is not the issue, players should try restarting the game or their device. Sometimes, the game client or device may encounter an error that causes the login failed issue, and a simple restart can fix it.

  3. Another possible solution is to clear the game cache. To do this, players can go to the game settings and look for the option to clear the cache. This will delete any temporary files that may be causing the log in issue and force the game to download fresh data from the server.

  4. Players can also try verifying the game files to ensure that all game data is intact and up-to-date. To do this, players can go to the game settings and select the option to verify game files. This will check for any corrupted or missing files and replace them if necessary.

  5. If none of these solutions work, players can try contacting the game’s customer support team for assistance. The game’s official website or social media pages should have contact information for customer support.

In summary, The Cycle Frontier login failed error is a common issue that can be caused by a variety of factors, including poor internet connection, game client errors, or corrupted game data. Players can try several solutions, such as restarting the game, clearing the cache, verifying game files, or contacting customer support, to fix this issue and enjoy the game.

  • Next Article ››

Disclaimer: The above information is for general informational purposes only. All information on the Site is provided in good faith, however we make no representation or warranty of any kind, express or implied, regarding the accuracy, adequacy, validity, reliability, availability or completeness of any information on the Site.

How to fix the Cycle Frontier Error Code 5 — FAQs

1. What is The Cycle: Frontier?
 

The Cycle: Frontier is a first-person shooter video game developed and published by Yager Development. It is categorized as a «competitive quest shooter» and features a unique cross-genre gameplay element labeled as «PvEvP», which combines player versus environment and player versus player gameplay.

2. When was The Cycle: Frontier released?
 

The game was initially launched in August 2019 through early access on the Windows platform. It was then officially released on June 8, 2022, after undergoing a series of updates and improvements to enhance the gaming experience.

3. What is the goal of The Cycle: Frontier?
 

In the game, players take on the role of a Prospector, a fortune seeker tasked with exploring and gathering resources from a hostile alien planet known as Fortuna III. The ultimate goal is to complete contracts, gain resources, and earn points while fending off other Prospectors who are competing for the same resources.

4. What sets The Cycle: Frontier apart from other first-person shooter games?
 

The game’s PvPvE gameplay allows for unique and exciting moments, as players must navigate through hostile alien creatures and environments while also battling other players. The game offers a range of weapons, gear, and abilities that players can use to outsmart their opponents and gain an edge in the game.

5. What are some features of The Cycle: Frontier?
 

The game offers stunning graphics, an immersive environment, and a range of customizable characters, allowing players to personalize their Prospector and stand out from the crowd. The game has garnered a growing fanbase and positive reviews, making it a must-play for fans of the genre.

Понравилась статья? Поделить с друзьями:
  • Морровинд фуллрест репак ошибка подключения к серверу
  • Морровинд ошибка при запуске
  • Морровинд анасси особый друг ошибка скрипта
  • Морозова ошибка серия 49
  • Морозильник полаир ошибка ah