8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
1

"Морской Бой": найти причины возникновения ошибок в коде

15.07.2018, 18:05. Показов 2039. Ответов 22

Доброго добра Всем тем, кто сейчас зашёл на эту страницу. Помогите понять, почему arr1 и arr2 в вызовах функций Create_table1,2 и Print_table1,2 выдают ошибки. Сам найти не могу:
C++
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
#include<iostream>
#include<ctime>
#include<iomanip>
#include<string>
#include<Windows.h>
using namespace std;
 
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
 
/*
Чутка алгоритма:
 
    1) Рисование таблицы 10х10 (сначала по фасту: важна сама игра пока-что)
    2) Никнеймы игроков
    3) Организация расстановки кораблей первого игрока
    4) Скрывание рассположения кораблей первого игрока
    5) Повтор 1-го и 2-го шагов для второго игрока
    6) Ходы игроков и их условия:
        а) Попадание по кораблю соперника
        б) Попадание "мимо"
        в) Попадание по клетке, которой не существует
        г) Попадание по клетке, которая "заюзана"
    7) Условие победы
    8) Звуки
    9) Дорисовка таблицы (для эстэтики)
    10) Придавание стиля самой игре
 
    Нечётные клетки поля относятся к первому игроку
    Чётные - ко второму
 
 
*/
 
// Имена
 
//void Players_names(char* Player1, char* Player2) {
//
//  cout << "Введите имя";
//  SetConsoleTextAttribute(h, 3);
//  cout << "первого";
//  SetConsoleTextAttribute(h, 7);
//  cout << "игрока() : ";
//
//  cin.ignore(100, '\n');
//  cin.getline(Player1, 100);
//
//  cout << "Введите имя ";
//  SetConsoleTextAttribute(h, 4);
//  cout << "второго";
//  SetConsoleTextAttribute(h, 7);
//  cout << "игрока() : ";
//
//  cin.ignore(100, '\n');
//  cin.getline(Player2, 100);
//}
 
void Create_table1(char arr1[10][10]) {
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            arr1[i][j] = '1';
        }
    }
 
}
 
void Create_table2(char arr2[10][10]) {
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            arr2[i][j] = '2';
        }
    }
}
 
void Set_ships_for_P1(char arr1[10][10]) {
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
 
 
 
 
        }
    }
 
 
}
 
void Set_ships_for_P2(char arr2[10][10]) {
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
 
 
 
 
        }
    }
 
 
}
 
void Print_table1(char arr1[][10]) {
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            cout << arr1[i][j];
        }
        cout << endl;
    }
}
 
void Print_table2(char arr2[][10]) {
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            cout << arr2[i][j];
        }
        cout << endl;
    }
}
 
void Hide_table1(char arr1[]) {
 
}
 
void Hide_table2(char arr2[]) {
 
}
 
void Player1_move(char arr1[], char arr2[]) {
 
}
 
void Player2_move(char arr1[], char arr2[]) {
 
}
 
 
 
 
 
void main()
{
    srand(time(0));
    setlocale(LC_ALL, "Russian");
 
    char arr1[10];
    char arr2[10];
 
    /*char* Player1[100];
    char* Player2[100];
 
    Players_names(*Player1, *Player2);
    
    cout << "Имя первого игрока: " << Player1 << endl;
    cout << "Имя второго игрока" << Player2 << endl;*/
 
    Create_table1(arr1);
    Create_table2(arr2);
    Print_table1(arr1);
    Print_table2(arr2);
 
 
 
 
 
}
Добавлено через 3 минуты
Кстати, и с именами игроков помогите разобраться: ошибки в Players_names.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.07.2018, 18:05
Ответы с готовыми решениями:

Проблемы с реализацией игры "Морской бой": найти и исправить ошибки в коде
Доброго времени суток. У меня вопрос по игре &quot;Морской бой&quot;. Я вывел поле с написанными координатами...

Найти причины возникновения ошибок в коде и исправить эти ошибки
помогите пожалуйста исправить ошибку вот код в с++ // ConsoleApplication9.cpp: определяет точку...

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

Найти причины возникновения ошибок в коде и исправить эти ошибки
не пойму что он от меня хочет #include &lt;math.h&gt; #include &lt;stdio.h&gt; #include &lt;iostream.h&gt;...

22
Модератор
Эксперт С++
12629 / 10127 / 6097
Регистрация: 18.12.2011
Сообщений: 27,158
15.07.2018, 18:22 2
N0VY, Вы, похоже не различаете формальные параметры функции
и фактические параметры (которые заменяют формальные при вызове функции).
C++
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
#include<iostream>
#include<ctime>
#include<iomanip>
#include<string>
#include<Windows.h>
using namespace std;
 
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
 
 
// Имена
 
//void Players_names(char* Player1, char* Player2) {
//
//  cout << "Введите имя";
//  SetConsoleTextAttribute(h, 3);
//  cout << "первого";
//  SetConsoleTextAttribute(h, 7);
//  cout << "игрока() : ";
//
//  cin.ignore(100, '\n');
//  cin.getline(Player1, 100);
//
//  cout << "Введите имя ";
//  SetConsoleTextAttribute(h, 4);
//  cout << "второго";
//  SetConsoleTextAttribute(h, 7);
//  cout << "игрока() : ";
//
//  cin.ignore(100, '\n');
//  cin.getline(Player2, 100);
//}
 
void Create_table(char arr[][10],char c) {
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            arr[i][j] = c;
        }
    }
 
}
 
void Set_ships(char arr[10][10],int PlayerNumber) {
     for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
 
        }
    }
}
void Print_table(char arr[][10]) {
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            cout << arr[i][j];
        }
        cout << endl;
    }
}
 
void Hide_table(char arr1[]) {
 
}
 
void Player_move(char arra[][10], char arrb[][10], int PlayerNumber) {
 
}
int main()
{
    srand((unsigned)time(0));
    setlocale(LC_ALL, "Russian");
 
    char arr1[10][10];
    char arr2[10][10];
 
    /*char* Player1[100];
    char* Player2[100];
 
    Players_names(*Player1, *Player2);
 
    cout << "Имя первого игрока: " << Player1 << endl;
    cout << "Имя второго игрока" << Player2 << endl;*/
 
    Create_table(arr1,'1');
    Create_table(arr2,'2');
    Print_table(arr1);
    Print_table(arr2);
    return 0;
}
1
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
15.07.2018, 18:32  [ТС] 3
То есть? Не понял Ваше высказывание, но можете пояснить, в чём была проблема?
0
Модератор
Эксперт С++
12629 / 10127 / 6097
Регистрация: 18.12.2011
Сообщений: 27,158
15.07.2018, 19:21 4
1. в main
C++
1
char arr1[10][10],arr2[10][10];
2. Не нужно писать несколько функций для разных значений параметра,
формальный параметр arr при вызове заменится на arr1 и arr2 соответственно.
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
15.07.2018, 20:19  [ТС] 5
Кстати, как быть с именами, что-бы они корректно записались и выводились?
0
Модератор
Эксперт С++
12629 / 10127 / 6097
Регистрация: 18.12.2011
Сообщений: 27,158
15.07.2018, 20:28 6
char* Player1[100];...
заменить на
C++
1
2
3
char Player1[100];
char Player2[100];
Players_names(Player1, Player2);
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
15.07.2018, 21:31  [ТС] 7
Спасибо большое, ещё кое-что: компилятор мой не отображает ошибки кода (программирую на Visual Studio 2017) и отменяет сборку кода. В чём может быть дело? Такого не было до тех пор, пока я не сделал функцию кладки кораблей на место указа пользователем (не доделано)
C++
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
#include<iostream>
#include<ctime>
#include<iomanip>
#include<string>
#include<Windows.h>
using namespace std;
 
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
 
// Имена
 
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[][12], char c) {
    for (int i = 0; i < 12; i++)
    {
        for (int j = 0; j < 12; j++)
        {
            arr[i][j] = c;
        }
    }
 
}
 
void Set_ships(char arr[][12], int PlayerNumber) {
 
    int amount_of_checked_cells = 0;
 
    while (true)
    {
        system("cls");
 
        Print_table(arr);
 
        int plant_choise_x, plant_choise_y;
        cout << "Введите порядковый номер клетки, на которую " << PlayerNumber << "-ый (-ой) игрок хочет поместить кораблик (x,y): ";
        cin >> plant_choise_x >> plant_choise_y;
 
        if (arr[plant_choise_x][plant_choise_y] == PlayerNumber && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y])) {
            arr[plant_choise_x][plant_choise_y] = PlayerNumber + 2;
 
            if (amount_of_checked_cells == 4) {
                arr[plant_choise_x][plant_choise_y] = PlayerNumber + 4;
            }
 
            if (amount_of_checked_cells == 10) {
                arr[plant_choise_x][plant_choise_y] = PlayerNumber + 6;
            }
 
            if (amount_of_checked_cells == 16) {
                arr[plant_choise_x][plant_choise_y] = PlayerNumber + 8;
            }
 
            if (amount_of_checked_cells == 20) {
                arr[plant_choise_x][plant_choise_y] = PlayerNumber + 10;
                break;
            }
            amount_of_checked_cells++;
        }
 
        else
        {
            system("cls");
            Sleep(1250);
            cout << "Введите правильную ячейку! " << endl;
            system("pause");
        }
 
        
 
 
    }
 
 
}
 
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[][12]) {
    for (int i = 0; i < 12; i++)
    {
        for (int j = 0; j < 12; j++)
        {
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }
}
 
void Hide_table(char arr1[]) {
 
}
 
void Player_move(char arr1[][12], char arr2[][12], int PlayerNumber) {
 
}
 
int main()
{
    /// Фишки: 
    // 2,3 - 1-клеточная ячейка
    // 4,5 - 2-клеточная ячейка
    // 6,7 - 3-клеточная ячейка
    // 8,9 - 4-клеточная ячейка
 
    srand((unsigned)time(0));
    setlocale(LC_ALL, "Russian");
 
    char arr1[12][12];
    char arr2[12][12];
 
    char Player1[100];
    char Player2[100];
 
    Players_names(Player1, Player2);
 
    system("cls");
 
    cout << "Имя первого игрока: " << Player1 << endl;
    cout << "Имя второго игрока: " << Player2 << endl << endl;
 
    system("pause");
 
    Create_table(arr1, '1');
    Create_table(arr2, '2');
 
    Set_ships(arr1, 1);
    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);
 
 
 
 
 
 
    system("pause");
    return 0;
}
0
sourcerer
16.07.2018, 06:51
  #8
 Комментарий модератора 
N0VY, пожалуйста, прочитайте правила форума.
Особое внимание обратите на пункт 4.3 (порядок именования тем).
0
Модератор
Эксперт С++
12629 / 10127 / 6097
Регистрация: 18.12.2011
Сообщений: 27,158
16.07.2018, 07:45 9
Цитата Сообщение от N0VY Посмотреть сообщение
не отображает ошибки кода
А это что по Вашему:
Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка C3861 Print_table: идентификатор не найден test d:\current\test\test.cpp 51
Ошибка C3861 Cell_checker: идентификатор не найден test d:\current\test\test.cpp 57
После 8 строки кода вставьте
C++
1
2
void Print_table(char arr[][12]);
bool Cell_checker(int PlayerNumber, int asked_cell);
И избавьтесь от волшебного числа 12:
C++
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
#include<iostream>
#include<ctime>
#include<iomanip>
#include<string>
#include<Windows.h>
using namespace std;
 
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
const int FIELD_SIZE = 12;
// Имена
void Print_table(char arr[][FIELD_SIZE]);
bool Cell_checker(int PlayerNumber, int asked_cell);
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 Set_ships(char arr[][FIELD_SIZE], int PlayerNumber) {
 
    int amount_of_checked_cells = 0;
 
    while (true)
    {
        system("cls");
 
        Print_table(arr);
 
        int plant_choise_x, plant_choise_y;
        cout << "Введите порядковый номер клетки, на которую " << PlayerNumber << "-ый (-ой) игрок хочет поместить кораблик (x,y): ";
        cin >> plant_choise_x >> plant_choise_y;
 
        if (arr[plant_choise_x][plant_choise_y] == PlayerNumber && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y])) {
            arr[plant_choise_x][plant_choise_y] = PlayerNumber + 2;
 
            if (amount_of_checked_cells == 4) {
                arr[plant_choise_x][plant_choise_y] = PlayerNumber + 4;
            }
 
            if (amount_of_checked_cells == 10) {
                arr[plant_choise_x][plant_choise_y] = PlayerNumber + 6;
            }
 
            if (amount_of_checked_cells == 16) {
                arr[plant_choise_x][plant_choise_y] = PlayerNumber + 8;
            }
 
            if (amount_of_checked_cells == 20) {
                arr[plant_choise_x][plant_choise_y] = PlayerNumber + 10;
                break;
            }
            amount_of_checked_cells++;
        }
 
        else
        {
            system("cls");
            Sleep(1250);
            cout << "Введите правильную ячейку! " << endl;
            system("pause");
        }
 
 
 
 
    }
 
 
}
 
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 Hide_table(char arr1[]) {
 
}
 
void Player_move(char arr1[][FIELD_SIZE], char arr2[][FIELD_SIZE], int PlayerNumber) {
 
}
 
int main()
{
    /// Фишки: 
    // 2,3 - 1-клеточная ячейка
    // 4,5 - 2-клеточная ячейка
    // 6,7 - 3-клеточная ячейка
    // 8,9 - 4-клеточная ячейка
 
    srand((unsigned)time(0));
    setlocale(LC_ALL, "Russian");
 
    char arr1[FIELD_SIZE][FIELD_SIZE];
    char arr2[FIELD_SIZE][FIELD_SIZE];
 
    char Player1[100];
    char Player2[100];
 
    Players_names(Player1, Player2);
 
    system("cls");
 
    cout << "Имя первого игрока: " << Player1 << endl;
    cout << "Имя второго игрока: " << Player2 << endl << endl;
 
    system("pause");
 
    Create_table(arr1, '1');
    Create_table(arr2, '2');
 
    Set_ships(arr1, 1);
    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);
 
 
 
 
 
 
    system("pause");
    return 0;
}
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
16.07.2018, 13:08  [ТС] 10
12x12 я делал, что-бы нарисовать таблицу (рамку). Кстати, почему-то кладка кораблей не работает: печатаю координаты клетки, на которую, допустим, первый игрок хочет поставить линкор (x, y; ставить по одной клетке, четыре клетки что-бы сформировать линкор, далее перейти к созданию крейсера, по той же схеме и так до тех пор, пока не поставятся все корабли; если это случится - переходим ко второму игроку и делаем то же самое). Кстати, gru74ik, я не специально сделал такое название темы, не знал, как иначе назвать. А правила я читал, знаю, что названия тем должны быть осмысленны. Чуть-чуть подправленный код:
C++
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
#include<iostream>
#include<ctime>
#include<iomanip>
#include<string>
#include<Windows.h>
using namespace std;
 
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
 
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;
}
 
const int FIELD_SIZE = 10;
 
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 Set_ships(char arr[][FIELD_SIZE], int PlayerNumber) {
 
    int amount_of_checked_cells = 0;
 
    while (true)
    {
        system("cls");
 
        Print_table(arr);
 
        int plant_choise_x, plant_choise_y;
        cout << "Введите порядковый номер клетки, на которую " << PlayerNumber << "-ый (-ой) игрок хочет поместить кораблик (x,y): ";
        cin >> plant_choise_x >> plant_choise_y;
 
        if (arr[plant_choise_x][plant_choise_y] == PlayerNumber && Cell_checker(PlayerNumber, arr[plant_choise_x][plant_choise_y])) {
            arr[plant_choise_x][plant_choise_y] = PlayerNumber + 2;
 
            amount_of_checked_cells++;
 
            if (amount_of_checked_cells == 4) {
                arr[plant_choise_x][plant_choise_y] = PlayerNumber + 4;
            }
 
            if (amount_of_checked_cells == 10) {
                arr[plant_choise_x][plant_choise_y] = PlayerNumber + 6;
            }
 
            if (amount_of_checked_cells == 16) {
                arr[plant_choise_x][plant_choise_y] = PlayerNumber + 8;
            }
 
            if (amount_of_checked_cells == 20) {
                arr[plant_choise_x][plant_choise_y] = PlayerNumber + 10;
                break;
            }
        }
 
        else
        {
            system("cls");
            Sleep(1250);
            cout << "Введите правильную ячейку! " << endl;
        }
 
 
 
 
    }
 
 
}
 
 
void Hide_table(char arr1[]) {
 
}
 
void Player_move(char arr1[][FIELD_SIZE], char arr2[][FIELD_SIZE], int PlayerNumber) {
 
}
 
int main()
{
    /// Фишки: 
    // 2,3 - 1-клеточная ячейка
    // 4,5 - 2-клеточная ячейка
    // 6,7 - 3-клеточная ячейка
    // 8,9 - 4-клеточная ячейка
 
    srand((unsigned)time(0));
    setlocale(LC_ALL, "Russian");
 
    char arr1[FIELD_SIZE][FIELD_SIZE];
    char arr2[FIELD_SIZE][FIELD_SIZE];
 
    char Player1[100];
    char Player2[100];
 
    Players_names(Player1, Player2);
 
    system("cls");
 
    cout << "Имя первого игрока: " << Player1 << endl;
    cout << "Имя второго игрока: " << Player2 << endl << endl;
 
    system("pause");
 
    Create_table(arr1, '1');
    Create_table(arr2, '2');
 
    Set_ships(arr1, 1);
    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);
 
 
 
 
 
 
    system("pause");
    return 0;
}
0
sourcerer
16.07.2018, 16:42
  #11

Не по теме:

Цитата Сообщение от N0VY Посмотреть сообщение
gru74ik, я не специально сделал такое название темы, не знал, как иначе назвать
Адекватное название темы легко вывести из адекватно поставленной задачи. Просто надо дать себе труд немножко подумать. А уж это - базовое качество программиста: уметь сформулировать задачу или, по крайней мере, внятно очертить круг проблем. У меня же получилось переименовать Вашу тему. Никаких сверхъестественных способностей я при этом не задействовал. Название взял из Вашего же заглавного поста:
Цитата Сообщение от N0VY Посмотреть сообщение
выдают ошибки. Сам найти не могу
Следовательно, что нужно сделать? Найти причины возникновения ошибок в коде. Вуаля. У нас есть название темы.

0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
17.07.2018, 14:34  [ТС] 12
Добавлено через нисколько минут
Так я не могу их найти: отладчиком не вариант, проблема в том, что при попытке поставить клетку это не срабатывает, но срабатывает условие else. Я не понимаю, почему. Если-бы знал, как разрешить свою проблему - я бы не спрашивал про это.
0
Модератор
Эксперт С++
12629 / 10127 / 6097
Регистрация: 18.12.2011
Сообщений: 27,158
17.07.2018, 15:51 13
Как раз отладчиком все прекрасно находится
Цитата Сообщение от N0VY Посмотреть сообщение
if (arr[plant_choise_x][plant_choise_y] == PlayerNumber &
Ставим останов на эту строку и видим
PlayerNumber - число равное 1
arr[plant_choise_x][plant_choise_y] - буква '1', код которой 49
49 Не равно 1
Приплыли!!!!!
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
18.07.2018, 14:10  [ТС] 14
Проблема решилась тем, что я убрал лишнее условие в первом ифе функции Set_ship. Теперь исправляю код. Если что ещё возникнет - обращусь. Ошибка, кстати говоря, была в этом: arr[plant_choise_x][plant_choise_y] == PlayerNumber. Это условие ложно, так как у меня клетка моря != PlayerNumber. Теперь всё работает. Спасибо Всем за помощь.

Добавлено через 2 часа 24 минуты
Ещё кое-что и игра будет готова. С чего такие ошибки? (смотрите ошибки по следующей ссылке): https://cl.ly/2b2A1D0i2h2y
"Морской Бой": найти причины возникновения ошибок в коде

C++
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
#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
 
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;
        }
    }
}
 
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) {
        system("cls");
 
        if (PlayerNumber == 1) {
            Win(amount_of_ship_cells_left_to_drown_P1);
 
            if (Win(amount_of_ship_cells_left_to_drown_P1) == true) {
                ifP1Win(p1);
            }
 
            if (Win(amount_of_ship_cells_left_to_drown_P2) == true) {
                ifP2Win(p2);
            }
 
            Print_table(arr1);
            
            cout << "\n Введите координаты клетки, в которую вы хотите стрельнуть, " << p1 << ": ";
            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;
        }
    }
 
 
    
}
 
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 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);
 
    Player_move(arr1, arr2, 1, Player1, Player2);
    Player_move(arr1, arr2, 2, Player1, Player2);
 
 
 
 
 
    system("pause");
    return 0;
}
0
Модератор
Эксперт С++
12629 / 10127 / 6097
Регистрация: 18.12.2011
Сообщений: 27,158
18.07.2018, 19:06 15
Исправил ошибки компиляции
C++
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;
}
Обратите внимание на строки 205 и 233
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
19.07.2018, 10:14  [ТС] 16
Отвечаю: в строке 233 должны быть координаты хода игрока и на этих координатах может быть расположен или любой из кораблей, или вода (условия того, имеются ли они по ним я учёл), а в строке 205 почему-то, когда набираю символ 219 - выходит символ 'Ю'. В чём причина сего поведения программы (или может быть)? Увидел я, что Вы закомментировали Win в Player_move. Но чем он мешал? Куда мне его класть тогда?
0
Модератор
Эксперт С++
12629 / 10127 / 6097
Регистрация: 18.12.2011
Сообщений: 27,158
19.07.2018, 10:52 17
Я же не знаю, что Вы имели ввиду указав имя функции вместо имени переменной.
Еще раз:
Как пользоваться отладчиком
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
19.07.2018, 14:50  [ТС] 18
Функию Win Вы закомментировали почему-то в строке 216. Это и имеется в виду.
0
Модератор
Эксперт С++
12629 / 10127 / 6097
Регистрация: 18.12.2011
Сообщений: 27,158
19.07.2018, 17:37 19
Цитата Сообщение от zss Посмотреть сообщение
while (/*!Win*/true) {
Это не вызов функции, а переменная с именем Win.
Может быть Вы имели ввиду
C++
1
While (Win(amount_of_ship_cells_left_to_drown_P1)){
А в 220 строке результат вызова этой функции не используется,
поэтому ее вызывать бесполезно.

Кстати, если все же надумаете ее использовать, то перенесите ее в начало файла.
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
20.07.2018, 13:19  [ТС] 20
Перенёс функцию Win() в main() в цикл с такими параметрами:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    while (true)
    {
        Player_move(arr1, arr2, 1, Player1, Player2);
        Player_move(arr1, arr2, 2, Player1, Player2);
        Win(amount_of_ship_cells_left_to_drown_P1);
        Win(amount_of_ship_cells_left_to_drown_P2);
 
        if (Win(amount_of_ship_cells_left_to_drown_P2) == true) {
            ifP1Win(Player1);
        }
 
        else if (Win(amount_of_ship_cells_left_to_drown_P1) == true) {
            ifP2Win(Player2);
        }
    }
Сейчас делаю механизм программы на основе Cell_checker() с проверкой того, есть ли кораблик на месте клетки, в которое хочется игроку поставить кораблик или то же условие, только с диагоналями и ещё пару условий в случае стыковки кораблей. Будут вопросы - спрошу.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.07.2018, 13:19
Помогаю со студенческими работами здесь

Найти причины возникновения ошибок в коде и исправить эти ошибки
Имеется две формулы (поиск следующего приближения для метода SOR):...

Найти причины возникновения ошибок в коде и исправить эти ошибки
Всем хай. Во-первых, vs не видит в мейне V и говорит, что она не инициализирована, но на идеоне оно...

Найти причины возникновения ошибок в коде и исправить эти ошибки
#include &lt;vcl.h&gt; #include &lt;iostream.h&gt; #include &lt;vector&gt; #include &lt;algorithm&gt; #pragma hdrstop ...

Найти причины возникновения ошибок в коде и исправить эти ошибки
Уважаемые пользователи просьба помочь с одной проблемой,смысл в том что при создании записи она...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru