Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Организация записи в массив |
Автор: G_R_E_M_L_I_N 5.4.2007, 12:06 |
Доброго всем времени суток. Возникла у меня такая проблема.Делается примитивный солитер.Пользуюсь вот таким алгоритмом: Что имеем 0) Номер карты на поле 1) Положение на поле, координаты Х,У. 2) Ширина и высота карты 3) Масть, соответственно цвет, текстуры 4) Статус карты, перекрывает ли она или ее перекрывают. 5) Массив int,в котором -1,если карта не перекрыта, и номер карты карты которыми данная перекрыта При расположении карт на поле запоминаю позицию для каждой карты, если ты кладешь карту и она перекрывает другую, то добавляю в массив (5), номер карты или нескольких, которые перекрываешь. После того когда занес номер карты в массив(5), ту карту которую занес ставлю статус(4) что она перекрыта. Проблема заключается в том,что я не пойму как записать в массив для каждой карты значения тех карт которые ее перекрывают. Мой ход мысли был примерно таков - беру первую карту и проверяю есть ли у нее пересечения с какой либо другой,если да то записываю номер этой карты(например 2) в массив.потом беру эту карту( 2 ) и проверяю пересекает ли ее какя - нибудь карта,если да ( 3 ),то записываю ее в массив 1 и массив 2.И вот какая незадача а если 1 карту пересекают сразу три или четыре,короче незнаю как организовать эту запись. Буду очень благодарен за помощь. |
Автор: Promitheus 5.4.2007, 12:50 |
Наксолько я вижу решение: отсортировать массив первая карта - самая нижняя, если она одна в этой стопке карт, то её никто не перекрывает, если есть элементы, то каждый следующий элемент перекрывает все предыдущие. Исходя из этого будет удобно отрисовывать, задать начальные координаты по оси у, х константата и идти по массиву, а игрек увеличивать скажем на 1/3 длины карты. |
Автор: zkv 5.4.2007, 13:38 |
G_R_E_M_L_I_N, думаю начинать над с организации удобного хранения данных. Для начала раздели данные и их представление. Например неправильно хранить координаты карты на экране в объекте "карта". Для хранения сведений о текущем состоянии дел на игровом поле явно напрашиваются стеки (FIFO). Вообщем получается у тебя три массива стеков, первый - для исходных стопок карт, из восьми стеков, второй - для вспомогательных, из четырех элементов, и третий - для результирующих стопок. Еще возможно стоит завести массив из восьми указателей (итераторов), каждый из которых будет указывать на карту, с которой начинается упорядоченная (по правилам игры) последовательность карт (естественно если она продолжается вплоть до верхней карты включительно). Думаю эти данные будут однозначно и довольно удобно представлять ситуацию на поле. Останется их только правильно отобразить на экране. Да, в качестве сведений о карте достаточно хранить ее значение и масть PS возможно, конечно, чего то не учел, но общее направление, думаю, должно быть таким. |
Автор: regis 5.4.2007, 14:45 | ||
В общем, мне тоже кажется, что достаточно для каждой карты хранить дополнительно z-координату. И рисовать каждую карту, учитывая ее.
А что, возможно такое, что они не для всех карт одинаковы? ;) |
Автор: zkv 5.4.2007, 14:50 |
дополнительно к чему? |
Автор: regis 5.4.2007, 15:03 | ||
Дополнительно к X и Y координатам карты. А вот отдельные массивы (где пытаемся хранить информацию о том, что эту карту перекрывает) на мой взгляд избыточны. (Тем более, что может быть накрыто более чем одной картой.) Хотя, конечно, все зависит от конкретного реализуемого пасьянса. |
Автор: zkv 5.4.2007, 15:15 |
да не надо хранить никакие координаты, они должны расчитываться при каждой новой прорисовке (достаточно пройти по стекам в определенном порядке и нарисовать каждую встреченную карту), тем более не нужны никакие z-order'ы, цвета, текстуры, размеры. Хотя если каждая карта будет иметь свою индивидуальную картинку, то конечно стоит хранить указатель на нее. Интересно, как вы собираетесь организовывать всю работы программы? Основываясь на координатах карт на экране? Все конечно возможно, но зачем создавать себе сложности. |