#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 вместо картинки черный экран, не работает управление, не слышно звук или что-нибудь еще.
Что сделать в первую очередь
- Скачайте и запустите всемирно известный CCleaner (скачать по прямой ссылке) — это программа, которая очистит ваш компьютер от ненужного мусора, в результате чего система станет работать быстрее после первой же перезагрузки;
- Обновите все драйверы в системе с помощью программы Driver Updater (скачать по прямой ссылке) — она просканирует ваш компьютер и обновит все драйверы до актуальной версии за 5 минут;
- Установите Advanced System Optimizer (скачать по прямой ссылке) и включите в ней игровой режим, который завершит бесполезные фоновые процессы во время запуска игр и повысит производительность в игре.
Системные требования 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 не скачивается. Долгое скачивание. Решение
Скорость лично вашего интернет-канала не является единственно определяющей скорость загрузки. Если раздающий сервер работает на скорости, скажем, 5 Мб в секунду, то ваши 100 Мб делу не помогут.
Если 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. Также будет полезно заглянуть в крупные игровые сообщества и, конечно, в наш 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, которая сканирует систему и помогает быстро найти недостающие библиотеки.
Если ваша проблема оказалась более специфической или же способ, изложенный в данной статье, не помог, то вы можете спросить у других пользователей в нашей рубрике «Вопросы и ответы». Они оперативно помогут вам!
Благодарим за внимание!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 |
#include<iostream> #include<ctime> #include<iomanip> #include<string> #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; char WaterP1 = '~'; // 1 char WaterP2 = '~'; // 2 char TorpedeP1 = '^'; // 3 char TorpedeP2 = '^'; // 4 char DestroyerP1 = '^'; // 5 char DestroyerP2 = '^'; // 6 char CruiserP1 = '^'; // 7 char CruiserP2 = '^'; // 8 char BattleshipP1 = '^'; // 9 char BattleshipP2 = '^'; // 10 char ShipHit = 'x'; // 12 char HitMiss = '*'; // 13 void ifP1Win(char* p1) { system("cls"); cout << "Игрок " << p1 << " ПОБЕДИЛ!!! Поздравляем!" << endl; system("pause"); exit(1); } void ifP2Win(char* p2) { system("cls"); cout << "Игрок " << p2 << " ПОБЕДИЛ!!! Поздравляем!" << endl; system("pause"); exit(1); } bool Cell_checker(int PlayerNumber, int asked_cell) { for (int i = PlayerNumber; i < 10 + PlayerNumber; i += 2) { if (asked_cell == i) { return true; } } return false; } void Print_table(char arr[][FIELD_SIZE]) { for (int i = 0; i < FIELD_SIZE; i++) { for (int j = 0; j < FIELD_SIZE; j++) { cout << arr[i][j] << " "; } cout << endl; } } void 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]; if (PlayerNumber == 1) strcpy_s(PNEnd, "-ый"); else strcpy_s(PNEnd, "-ой"); int amount_of_checked_cells = 0; while (amount_of_checked_cells < 21) { system("cls"); Print_table(arr); int nmb_of_cells_for_current_ship = 1; char type_of_ship[100]; 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 клетка для размещения)"); int plant_choise_x, plant_choise_y; 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) { arr[plant_choise_x][plant_choise_y] = PlayerNumber + 2; // 3, 4 ([]) amount_of_checked_cells++; if (amount_of_checked_cells >= 4) { arr[plant_choise_x][plant_choise_y] = PlayerNumber + 4; // 5, 6 ([][]) if (nmb_of_cells_for_current_ship == 1) nmb_of_cells_for_current_ship++; if (amount_of_checked_cells >= 10) { if (nmb_of_cells_for_current_ship == 2) nmb_of_cells_for_current_ship++; arr[plant_choise_x][plant_choise_y] = PlayerNumber + 6; // 7, 8 ([][][]) if (amount_of_checked_cells == 16) { if (nmb_of_cells_for_current_ship == 3) nmb_of_cells_for_current_ship++; arr[plant_choise_x][plant_choise_y] = PlayerNumber + 8; // 9, 10 ([][][][]) break; } } } } else { system("cls"); cout << "Введите правильную ячейку! " << endl; Sleep(1250); } } } void Hide_table(char arr[][FIELD_SIZE]) { for (int i = 0; i < FIELD_SIZE; i++) { for (int j = 0; j < FIELD_SIZE; j++) { arr[i][j] = 178; // 178>128 (Отрицательное значение) } } } void Player_move(char arr1[][FIELD_SIZE], char arr2[][FIELD_SIZE], int PlayerNumber, char* p1, char* p2) { int choise_x; int choise_y; while (/*!Win*/true) { system("cls"); if (PlayerNumber == 1) { //Win(amount_of_ship_cells_left_to_drown_P1); if (amount_of_ship_cells_left_to_drown_P1==0) { ifP1Win(p1); } if (amount_of_ship_cells_left_to_drown_P2==0) { ifP2Win(p2); } Print_table(arr1); cout << "n Введите координаты клетки, в которую вы хотите стрельнуть, " << p1 << ": "; choise_x = 0; choise_y = 0;// Чему они должны быть равны на самом деле ????????????????????????????????????????????????????? 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] = ShipHit; else arr2[choise_x][choise_y] = HitMiss; } else { Print_table(arr2); cout << "n Введите координаты клетки, в которую вы хотите стрельнуть, " << p2 << ": "; 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] = ShipHit; else arr1[choise_x][choise_y] = HitMiss; } } } 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, '1'); Create_table(arr2, '2'); //Hide_table(arr1); //Hide_table(arr2); Set_ships(arr1, 1); Pass2AnotherPlayer(); 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); //void Player_move(char arr1[][FIELD_SIZE], char arr2[][FIELD_SIZE], int PlayerNumber, char p1, char p2) { Player_move(arr1, arr2, 1, Player1, Player2); Player_move(arr1, arr2, 2, Player1, Player2); system("pause"); return 0; } |
Странно счетчик произведенных выстрелов работает.
Ситуация.
Стреляю по D3 и топлю одиночный корабль противника.
Пишет, что сделано 39 выстрелов.
Стреляю I6 и топлю последний одиночный корабль противника.
Пишет, что сделан 41 выстрел.
Следующий боя так же счетчик +1 выстрел непроизведенный прибавляет в случае победы.
Счетчик показывает 64 выстрела перед нажатием на E5
После нажатия уже пишет что 66 выстрелов было, когда всего 65 должно быть написано.
Заявка ЦПП ID 141939023, там же отчет ВГчек.
Дополню. После сбора отчета ВГчек зашел в Морской бой и появился экран как на скрине выше но только число выстрелов на 1 меньше и соответствует нормальному числу
Возможно при сборке отчета была устранена ошибка.
Еще дополню. Сыграл еще бой. Но уже открыл во внешнем браузере Морской бой. Играл делая часть выстрелов в клиенте, часть в игре. Завершал партию в клиенте. Счетчик показал, что выполнено 47 выстрелов.
Произвожу 1 выстрел и топлю последний корабль. Прямо на глазах счетчик проматывает 48 и пишет что произведено 49 выстрелов.
(видел 48 доли секунды и поменялось на 49). После чего перешел во внешний браузер там была та же картинка с числом 49. Нажал обновить страницу. Число поменялось как в браузере, так и в игре на 48.
App Store Sea Battle Classic (Морской бой) + откровения разработчика
В закладки
Кто не играл на уроках географии в морской бой? Только ботаны и нудные отличники. Игровое поле 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
Частые апдейты
Субъективно — это неплохая идея. Единственно что, стоит таки добавлять что-то новое, а не отсылать один и тот же бинарник.
Уточнение: сразу же как получаете письмо-уведомление о утверждении приложения, нужно идти в аппстор и менять дату доступности приложения на текущее число (по умолчанию стоит на день загрузки бинарника), тогда есть высокий шанс, что приложение засветится на первых двух страницах «recent apps» — и получит стартовое ускорение.
«Спам» по блоггерам и тематическим изданиям
Если у вас хороший продукт, да еще и бесплатный, да и без рекламы, его будут щупать, описывать и распростанять без вас. Но тем не менее писать нужно в любом случае.
Сложность в том, что популярные ресурсы и без вас завалены кучами промокодов и просьб об обзорах (т. е. которые не завалены вам скорее всего и не интересны).
Выход: заводите связи, общайтесь заранее, а не во время пика продаж (точнее и заранее и во время).
Twitter и прочие социальные сети
На хабре последнее время частенько поднимается вопрос, а нужен ли компаниям twitter? Зарубежом тема социальных медиа тоже более чем популярна.
Единственное, что можно сказать… не пускайте маркетолога, не работавшего с интернетом, (даже очень хорошего) на твиттер. С большой долей вероятности ничего хорошего не получится.
По крайней мере поначалу.
Быстрой отдачи тоже ждать не стоит, зато если постепенно развивать и укреплять свое присутствие, со временем даже один твит может дать очень много.
Комментарий SeaBreeze: у нас на сайте все обзоры бесплатные. Более того, мы всячески подталкиваем разработчиков контактировать с нами и проводить совместные акции.
Баннеры на тех же ресурсах
Стоит дороже предыдущего, а результативность меньше.
Комментарий SeaBreeze: Баннеры софта работают, все зависит от его подачи и тем, чем он окружен (промо, обзоры, пиар). Например, на баннеры Rolando 2 было потрачено несколько десятков тысяч долларов. А какой бум был до этого!
Конкурсы за деньги
Результативность стремится к нулю. Чуть выше чем у баннеров.
Но тут оговорка, если конкурс действительно интересный информация о нем (и соответсвенно о программе) пойдет гулять по блогосфере, что вам собственно и нужно.
Спам «псевдопосоветуйдругу»
В iTunes есть функция — посоветуй другу. Дается форма, и на указанный адрес отправляется письмо с неким завлекающим текстом, причем письмо определенного вида, на стандартной эйпловской формочке.
Есть вариант разослать по листу пару тысяч (десятков/сотен тысяч) писем по подобному шаблону, типо из тунца…
Имхо использовать это не стоит, отдача небольшая, а многие спам (и я в том числе) очень не любят. Я уж не говорю о том, что ваши адреса могут попасть в спам базы, а доменное имя непонравится гуглу.
Но такие способы тоже имеют место быть.
Проплата покупок
Звучит странно, но тем не менее. Идея в том, что положение программы в рейтингах вычисляется по результатам продаж в последние трое суток. И если сделать рывок продаж за три дня можно выйти в топ. А в топе правильной страны деньги отобъются гарантированно, тем более
70% этих денег в любом случае прийдет обратно к вам.
Сложность в том, что для того чтобы попасть в топ правильной страны вам нужно как минимум тысяча (а на самом деле больше) покупок в день, вот и думайте сколько денег и сил нужно вложить.
И еще, вопрос как это реализовать. Успешно реализованных вариантов я пока не видел, но охотно верю что они есть или будут.
Комментарий SeaBreeze: Это не афишируется, но такое есть. Сам однажды принимал участие в написании роботов-покупателей.
Итого
Особенность экоструктуры аппстора такова, что пользователю нет необходимости выходить из него. Как правило большинство и не выходит. То есть не стоит надеятся, что наводнив сотни мелких ресурсов и ресурсиков вы получите огромный рост продаж. Определенный рост будет, но явно не тех размеров что хочется.
Следовательно, очень важно иметь качественную страницу в магазине. Будет обидно, если кто-то не попробует вашу гениальную программу только из-за плохих скриншотов или описания с ошибками.
Безусловно программа должна нравится и делать то, что пользователь от неё ждет. Будет здорово если в ней есть БОНУС. Какой-то очень приятный функционал который пользователь не ожидает увидеть и который вы не рекламировали. Так он получит (по его ощущениям) в два раза больше чем ожидал, и непременно не поленится оставить положительный комментарий.
Программы которые никто не комментирует — никому не нужны. В каждой стране свой аппстор, с отдельными страницами комментариев
И естественно больше верят комментариям на родном языке.
Да, если вашей программе одобрительно отзовутся например на tuaw. com — стоит ожидать немаленького роста продаж. Так что если у вас нет знакомого блоггера на крупном ресурсе — стоит с ним познакомится.
И последнее, мое мнение — не стоит тратить денег на рекламу до тех пор пока ваше приложение не приносит вам хорошую прибыль. Лучше вложите дополнительные ресурсы в разработку. Покачественнее дизайн и тексты. Хорошее тестирование, удобный интерфейс… Потратьте время на общение с пользователями на 2-3 крупных форумах, наконец.
Вполне возможно не вкладывая деньги в рекламу* сделать сверхпопулярный продукт. Творите через это ограничение, через ограничения творится интереснее 
* — если не считать тексты и скриншоты рекламой.
Вот такие дела, т. е. заработать можно, но на ОЧЕНЬ популярном приложении. [Хабрахабр]
Морской бой 2
Дата выхода «Морской бой 2» никогда не станет известна
По словам хейтеров, «Морской бой» – отличный фильм о том, какие парни нравятся избалованным девушкам и ужасный пример того, какие болваны попадают в офицеры ВМФ США. Кроме того, проект принёс больше 40 млн убытков своим продюсерам. Поэтому, о дате выхода «Морской бой 2» фанаты этого фильма в ближайшем будущем ничего не узнают. Уж очень плохо показала себя в прокате первая часть.
Дата выхода «Морской бой 2»до сих пор официально заявлена не была. И, скорее всего, не будет. Проект «Морской бой» оказался слишком убыточным, чтобы кто-либо захотел связываться с ним снова.
Морской бой 2. Кадр из фильма
Отличный парень, но неудачник
Алекс Хоппер – отличный парень, если не знакомиться с ним слишком близко. Украсть шавуху из закрытого магазина ночью, чтобы произвести впечатление на девушку? Легко! Получить по голове от футболиста другой команды, но продолжать делать вид, что ты самый крутой игрок? Ещё легче. Получить приказ осмотреть обломки космического корабля и ничего там не трогать, но всё равно влезть в неприятности? Это конечно сложнее, но тоже возможно.
Благо, подходящий космический корабль как раз упал недалеко от корабля, на котором служит Хоппер. И в самом деле, отличный парень, пока играет за вражескую команду. Зато дочери адмирала он нравится. Девушка изо всех сил старается, чтобы её отец и парень поговорили, нашли общий язык, и сделали её счастливой. Но Хоппер и тут не изменяет своему характеру, разговор «по душам» с отцом своей девушки он проваливает просто феерически.
Вторжение инопланетян – единственный шанс остаться на службе

Морской бой 2. Кадр из фильма
Короче, Алекс Хоппер, стал командовать кораблём и смог остановить вторжение. Да, он наделал столько ошибок, что о них можно снять полнометражный фильм «Морской бой 2», но благо дата выхода его до сих пор неизвестна.
Трейлер к фильму “Морской бой 2”
Источники:
https://www. iphones. ru/iNotes/30382
https://data-vyhoda. ru/morskoj-boj-2/
#91
Redrick 08.12.2022, 12:05
Много-много всего. Дневник разработки (08/12/2022)
Ахой, капитаны!
Похоже, у нас получается самое крупное обновление за последнее время разработки World of Sea Battle. В обновление войдет намного больше контента, чем было запланировано.
Хорошая новость — потрогать В11 своими руками, можно будет совсем скоро. Давайте смотреть, что утверждено и вовсю готовится к запуску на общий тест в конце декабря.
Новый мир
Вы наверняка уже знаете, что в обновлении В11 будет расширена и переработана карта мира. Площадь Архипелага была увеличена в 1.5 раза, было добавлено 11 новых портов. Детали о карте мы раскроем позже, а в этом дневнике акцентируем внимание на других новых механиках.
Новая система экипажа
Одно из главных нововведений — новая система экипажа.
С выходом обновления В11 экипаж корабля будет делиться на рядовой и офицерский составы. Основная масса экипажа это матросы, бонусы которых зависят от комбинации офицеров.


Рабочие прототипы интерфейса
Специалисты делятся на четыре категории:
- военные
- мореходы
- пираты
- авантюристы

Категории специалистов (концепт)
Специалисты могут как сочетаться между собой, так и быть антагонистами. Поэтому без дебаффов, не получится взять на борт крутых пиратов и военных офицеров. Они не очень любят друг друга…
Мореходы — нейтральны и могут быть на борту вместе со специалистами других категорий.
Авантюристы — редкие и уникальные члены экипажа. Надеемся, за их поиском и коллекционированием вы проведете много приятных часов.

Численность экипажа увеличена на порядок (Внимание: цифры не финальные)
Новый арт
Было решено полностью переработать иконки экипажа и аватарки капитанов. Оптимальным решением по времени и бюджету, выбран вариант использование нейросети, лучшие результаты которой дорабатывают под игровой интерфейс художники. А еще они перерисуют иконки расходных предметов и ресурсов.

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

Кроме того, мы заняты переработкой игрового интерфейса.

Дизайн-концепт панели навыков
Переработка защиты портов. Башни и аванпосты расставлены заново
Статистика портовых боев (ПБ) и отзывы игроков выявили несбалансированное расположение укреплений защиты и аванпостов. Многие из них совершенно не влияют на ход боя. Например, слишком изолированные друг от друга оборонительные сооружения Чарльстона, практически ничем не могут помочь защитникам или, наоборот, слишком мощная защита Сан-Кристобеля оставляем мало шансов атакующей стороне.
Мы постарались переработать их расположение так, чтобы укрепления теперь играли намного более важную роль в ПБ и разнообразили тактики боев.

Пример перестановки башен и аванпостов у Северного Бастиона
«Арабские порты» и новые товары
С вводом на Архипелаг вольных арабских городов, богатых и могущественных, будет расширены торговля и категории товаров.
Товары разделены по регионам и доступны в соответствующих портах. Какие-то из предметов можно найти на островах, а какие-то выбить из NPS. Пиво и зерно также преобразованы в товары.

Чтобы гильдия имела титул наместника и получила под управление арабский порт, ей нужно выиграть тендер основанный на торговом соперничестве.
Что происходит на закрытом тесте
Тем временем, пока вы читаете дневник, наша команда QA усиленно проверяет нововведения и правки обновления В11 на тестовом сервере, а именно:
- Проверяют обновленные статы кораблей;
- Пишут сопроводительное сообщение в гильдии;
- Проверяют обновленный интерфейс и обновленные текстуры;
- Рыбачат на севере. Разработчик сказал, там больше рыбы;
- Считают потери под торговыми флагами, должно быть 20%, вместо 25%;
- Заново проходят обновленное начальное задание и этапы обучения;
- Проверяют трюмы 3-х звездочных легендарок на количество эскудо;
- (Отредактированный пункт, который нельзя было писать);
- Ищут скупщиков в пиратских портах: больше товаров и выше цены;
- Смотрят, добавлено ли достижение за одну из верхних позиций в результатах ПБ, увеличивающее награду в 2 раза?
- Пробуют взять на абордаж союзника (с зеленой полоской хп) — этого теперь невозможно;
- Тестируют патрульные корабли, которые недоступны для атаки при наличии пвп защиты;
- Взаимодействуют между собой в море нажимая мышкой на никнейм;
- Делят доход денежного дома. Теперь его небольшая часть распределяется между всеми участниками гильдии, которые были онлайн в течение 3х дней. Для того, чтобы забрать свое жалование, понадобится прийти в любой порт, где есть штаб;
На этом пока все. До скорой встречи!
оригинал https://forum.worldofseabattle.com/t…2%D0%BA%D0%B8/
#92
Redrick 09.12.2022, 17:35
Хаунд сделал обзор России (торговец V ранга)
#93
Redrick 17.12.2022, 12:28
Обзор КвиСонга (фаворит арены и режимов V ранга) от Хаунда
#94
Redrick 25.12.2022, 19:28
Следующий обзор Хаунда посвящен Чёрному Принцу (BLACK PRINCE)
#95
thehealthreviews4 27.12.2022, 11:06
Thanks for giving us Amazing info.
#96
Redrick 27.12.2022, 11:53
Немного новостей разработки: «..сообщаю — обновление выйдет в январе. Завтра будет анонс с датой старта общего теста и открытие регистрации на него.»
#97
Redrick 28.12.2022, 16:58
Открыта регистрация на общий тест B11.
Капитаны, проведение общего теста обновления В11 запланировано с 14 по 20 января.
Зарегистрироваться для участия в тесте можно в официальном дискорде
https://discord.gg/8GbGz3A
Напомним список изменений, который дополнился новыми пунктами:
- Обновленный открытый мир увеличенного размера с новыми портами и точками интереса. Вместо зон опасности будет 16 регионов со своими названиями и особенностями;
- Обновление системы экипажа: добавление около 50 специальных видов экипажа (таких как мичман, профос, боцман, хирург, гардемарин, комендор, конопатчик, кок и т.д.), которых можно комбинировать для получения дополнительных бонусов;
- Увеличение размера экипажа на всех кораблях в 5 раз;
- Добавлена новая категория ресурсов — товары, которые отображаются отдельно, и будут присутствовать как элемент торговли и перевозок (в том числе у nps). Продажа товаров привязана к регионам, где они производятся, чем дальше оттуда — тем выше цена их продажи;
- В пиратских портах снижен налог биржи и добавлены скупщики с повышенными ценами покупки;
- Система «медалей» — значков рядом с никнеймом, которые можно менять;
- Обновлены характеристики и модели коллизии кораблей;
- Гильдии смогут иметь 3 подпольных штаба, а в Конфедерации 5. При открытии подпольного штаба напряженность будет падать;
- Экипаж можно будет кормить кроме северного и в других регионах для получения бонусов;
- Часть дохода от денежного дома будет делиться между всеми участниками;
- Много приятных мелких изменений, в том числе, обновление интерфейсов, добавление рыбок в воде, увеличение числа эскудо с 3-х звездочных кораблей, обновление моделей и повышения качества текстур;
- Повышение удобства игрового процесса: невозможность взять союзника на абордаж, быстрое перемещение ресурсов по двойному клику, сортировка участников гильдии по последней активности и т.д.
- Добавлено сопроводительное письмо при подаче заявки в гильдию;
- При отсутствии пушки орудийный порт будет всегда закрыт;
- Исправление большого количества багов, в том числе тех, о которых сообщали игроки;
- Изменен принцип подсчета дистанции между кораблями;
- Ferryman будут ремонтироваться, а обычных пиратов на крупных линейных кораблях больше не будет;
- Улучшена производительность игры в целом, и в режиме повышенной частоты монитора особенно;
- Обновление начального этапа игры и начальных квестов.
#98
Redrick 30.12.2022, 15:36
Новогодняя акция:
Капитаны, мы подготовили новые подарки для вас:
- Ежедневный бонус за вход в игру в период с 30 декабря по 8 января: 1 день премиум подписки или эквивалент монетами (30) при её наличии;
- Ежедневное задание, дающее ключ от сундука;
- Фейерверки которые можно найти в море в специальных коробках;
- Особые ядра выпадают при потоплении легендарных кораблей.
#99
Redrick 04.01.2023, 13:58
ПОДКАСТ С ГЛАВНЫМ РАЗРАБОТЧИКОМ WORLD OF SEA BATTLE НА GOHA.RU
Ставим лайки, подписываемся 😊
@mADler от души, спасибо!
#100
Redrick 15.01.2023, 10:25
Сообщение от :
Открыта регистрация на общий тест B11.
Капитаны, проведение общего теста обновления В11 запланировано с 14 по 20 января.
Зарегистрироваться для участия в тесте можно в официальном дискорде
https://discord.gg/8GbGz3A
17 января — старт общего теста обновления В11