Я строю игру с линкорами, и мне нужны советы, как справиться с этой проблемой.C++ совет, как разбить цикл
Okey, так что проблема в том, что игра заканчивается, когда оба игрока сбивают все корабли, это контролируется петлей while, и я хочу, чтобы она сломалась так же быстро, как один игрок сбил соперника.
Проблема заключается в функции void ShootAtShip(int board1[], int board2[], string names[], int cap)
, а цикл while говорит while ((board1[i] != 0 || board2[i] != 0))
, что я думаю, проблема в том, что цикл while должен проходить весь путь сверху вниз до его окончания, я хочу, чтобы он разбился посередине IF board1 получает все 0.
bool isGameOver(int board1[], int board2[], int cap)
{
bool lost1 = true;
bool lost2 = true;
for (int i = 0; i < cap && lost1 != false; ++i)
if (board1[i] != 0)
lost1 = false;
if (lost1)
return true;
for (int i = 0; i < cap && lost2 != false; ++i)
if (board2[i] != 0)
lost2 = false;
return lost2;
}
void ShootAtShip(int board1[], int board2[], string names[], int cap) {
const int hit = 0;
int shot = 0;
int temp;
isGameOver(board1, board2, cap);
for (int i = 0; i < cap; i++) {
while ((board1[i] != 0 || board2[i] != 0)) { //detects if any board has all their ships shot down
cout << names[1] << " set a position to shoot." << endl;
cin >> shot;
temp = shot;
while ((shot >= cap) || (shot < 0)) { //detects if the number is allowed
cout << "That number is not allowed, " << names[1] << " set a position to shoot." << endl;
cin >> shot;
}
if (board1[shot] != 0) {
board1[shot] = 0;
cout << "Hit!" << endl;
}
else {
cout << "You missed." << endl;
}
shot = 0;
cout << names[0] << " set a position to shoot." << endl;
cin >> shot;
while ((shot >= cap) || (shot < 0)) { //detects if the number is allowed
cout << "That number is not allowed, " << names[0] << " set a position to shoot." << endl;
cin >> shot;
}
if (board2[shot] != 0) {
board2[shot] = 0;
cout << "Hit!" << endl;
}
else {
cout << "You missed." << endl;
}
}
}
cout << "Testing is while loop stops";
}
Действительно ли необходимо опубликовать весь код? Нам гораздо труднее реально помочь вам, если нам придется пройти через все это. Всегда старайтесь максимально упростить проблему. – Jendas
Что именно не так с этим? Разрушено? Или нужна ли оптимизация? – rsethc
изменил код на smaler, проблема в том, что цикл while не будет ломаться, когда ONE из досок получает все нули ТОЛЬКО, когда оба получат все ноль. –