Проблема с использование функции в двух обьектах C++

91
21 февраля 2022, 14:10

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

void Plansza::startgame()
{
for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 10; j++) {
        matrix2[i][j] = '.';
    }
}
for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 10; j++) {
        matrix3[i][j] = '.';
    }
}
int count1 = 0;
int count2 = 0;
for (int i = 0; i < 20000; i++) {
TryAgain: cout << "Your choice: ";
    int x, y;
    cin >> x >> y;
    if (matrix1[x][y] == 'O') {
        cout << "Succes!" << endl;
        count1 = count1 + 1;
        draw_enemy1(x, y);
        if (count1 == 20) {
            cout << "You won!";
            system("pause");
            break;
        }
        goto TryAgain;
    }
    else {
        cout << "Missed" << endl;
        draw_enemy1(x, y);
    }
TryAgain1: cout << "Enemy choice: ";
    int x1, y1;
    cin >> x1 >> y1;
    if (matrix[x1][y1] == 'O') {
        cout << "Succes!" << endl;
        count2 = count2 + 1;
        draw_enemy(x1, y1);
        if (count2 == 20) {
            cout << "You won!";
            system("pause");
            break;
        }
        goto TryAgain1;
    }
    else {
        cout << "Missed" << endl;
        draw_enemy(x1, y1);
    }
    cout << endl;
}
}

Вот так вот использую это в обьектах

yourShips.startgame();
enemyShips.startgame();
Answer 1

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

//эту функцию можете сделать закрытым членом класса
void your_code(char* matrix, const size_t col)
{
    int count = 0;    
    int x, y;
    while (matrix[x * col + y] == 'O') {
        cout << "Your choice: ";
        cin >> x >> y;
        cout << "Succes!" << endl;
        ++count;
        draw_enemy1(x, y);
        if (count == 20) {
            cout << "You won!";
            break;
        }
    }
    cout << "Missed" << endl;
    draw_enemy1(x, y);
    cout << endl;
}
void Plansza::startgame()
{
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            matrix2[i][j] = '.';
            matrix3[i][j] = '.';
        }
    }
    for (int i = 0; i < 20000; i++) {
        your_code(matrix1[0], 10);
        your_code(matrix[0], 10);
    }
}

В вашем коде оператор безусловного перехода goto и команда system("pause");(Это приостановка выполнения пакетного файла, что в вашей функции абсолютно никчему) вполне могут помешать завершению выполнения функции, а пока она не завершит свою работу, для второго обьекта не вызовится, поскольку ни одна инструкция не выполнится. Вот и получается, что до второго обьекта дело не доходит. И всегда старайтесь циклы писать с предусловием типа, например, while (условие) { ... }

READ ALSO
cmake config mode

cmake config mode

Если у меня есть header-only библиотека и есть xxxConfigcmake, я делаю find_package(xxx CONFIG REQUIRED)

108
Программа для поиска анаграмм С++

Программа для поиска анаграмм С++

Дано слово и словарьСловарь должен быть задан файлом *txt

76
jquery подставить ссылку страницы

jquery подставить ссылку страницы

Подскажите пожалуйста, есть такой код:

118
Вывести json как поле mysql

Вывести json как поле mysql

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

146