#cpp
Загорелся сделать морской бой на с++ чисто для себя (с++ еще осваиваю). Сделал так чтоб программа ставила метку на нужных координатах. Вопрос такой: "Как сделать так, чтоб программа зпоминала прошлый "ход" и в следующий раз выписывала то место, где "ход" уже имел место быть". Описание проблемы не лучшее, но я старался. Сам код (надеюсь, правильно вставил на сайт) #include#include using namespace std; void tablica(int a,int b,int c,int d, int x, int y){ for (int i=0; i> q >> q1; if (q!=0 || q1!=0) tablica(10,10,65,1,q,q1); }while(q!=0 || q1!=0); return 0; } Работа программы:
Ответы
Ответ 1
void tablica(const int a,const int b, char c, int d, const int x, const int y, const int oldX, const int oldY){ cout << '%'; for (int i=1; i> q >> q1 && (q!=0 || q1!=0) && q < a && q1 < b) { static int x = q, y = q1; tablica(a, b, c , d, x, y, q, q1); } return 0; } Во первых в аргументах функции нужно указать какие аргументы не подлежат изменению, дальше вы в циклах делаете много сравнений. Чтобы цикл работал быстрее, нужно уменьшить их количество. Первая строка и столбец у вас всегда неизменяема, поэтому эти данные нужно выводить отдельно. Не гарантировано, что целочисленное значение символа 'A' равно 65(в других реализациях может иметь другое значение), поэтому передайте в аргумент именно символ, тем более, что так нагляднее что есть этот аргумент. Дальше: манипулятор setw(3) выделяет поле для текущего выводимого/вводимого обьекта, а не для предыдущего, поэтому в выражение, например: cout <<"%" <Ответ 2
Вам нужно хранить состояния, это можно делать с помощью внешних переменных по отношению к функции(Передавать их по ссылке или указателю). Но я бы смотрел в строну ООП. Вам нужны сущности Ход, Список Ходов, Поле, Игрок, Игра(список неполный). Ваш код громоздок и сложен для понимания. Разбив свою игру на мелкие сущности и описав взаимодействия между ними, Вы его сможете упростить. PS Имена входных параметров не очень осмысленны, что тоже усложняет понимание.
Комментариев нет:
Отправить комментарий