У меня есть программа, которая является игровым турниром, который рекурсивно сражается и удаляет игроков из контейнера игрока, пока не останется только один игрок. Это карточная игра "Война", и для каждой битвы мне нужно вывести победителя каждой битвы в игре в файл. Так, например, это выглядело бы примерно так
John vs James
Battle 1: James wins
Battle 2: John wins
...
Battle 5: James wins, John is out of cards. James wins the game
но тогда, поскольку это турнир, Джон убирается из контейнера, а следующие два человека сражаются, поэтому мы идем от 16 до 8 до 4 - 2 игроков, а затем, наконец, победителем. У меня уже есть код для этого все разработано Мне нужно знать, как я могу сделать эту часть рекурсивно:
ofstream outFile;
outFile.open(argv[2]);
outFile << player1Name << " vs. " << player2Name << endl;
outFile << "Battle" << //number battle & winner etc, etc
Я хочу сделать это так, чтобы каждый раз, когда запускается PROGRAM, он переопределяет все в файле, но каждый раз, когда игра проводится в турнире, она добавляется только к концу предыдущего боя. У меня есть несколько идей, но я не уверен, что лучший способ сделать это. Я думал о том, чтобы
ofstream outFile;
outFile.open(argv[2]);
В файле driver.cpp, вызывая рекурсивную функцию game.tournament(), но проходящую в game.tournament(outFile), в void Game :: tournament (ofstream & outFile), затем используя команды outFile << и вызов, выполняющий рекурсивный вызов турнира (outFile) и как только рекурсивная функция заканчивается,.close() файл обратно в driver.cpp. Будет ли это работать так, как я думаю? Так как в нем открывается и закрывается драйвер, но у меня есть доступ к его распечатке в рекурсивной функции
Также, чтобы быть ясным, базовый случай заключается в том, что в очереди игроков есть.size() <2, что означает, что в нем осталось только 1 игрок, и, таким образом, игрок является победителем, поэтому моя рекурсивная функция имеет возвращаемое значение void. Это не та часть, в которой мне нужна помощь, но я подумал, что я бы включил ее в случае, если люди задавались вопросом
В начале вашей программы перед вызовом рекурсии откройте свой файл следующим образом:
outFile.open(argv[2], std::ofstream::trunc);
Это приведет к усечению всего из файла, а затем закроет его.
Далее в вашей рекурсивной функции откройте файл для добавления
outFile.open(filename, std::ofstream::app);