![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
G_R_E_M_L_I_N |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 3.10.2006 Репутация: нет Всего: нет |
Доброго всем времени суток.
Возникла у меня такая проблема.Делается примитивный солитер.Пользуюсь вот таким алгоритмом: Что имеем 0) Номер карты на поле 1) Положение на поле, координаты Х,У. 2) Ширина и высота карты 3) Масть, соответственно цвет, текстуры 4) Статус карты, перекрывает ли она или ее перекрывают. 5) Массив int,в котором -1,если карта не перекрыта, и номер карты карты которыми данная перекрыта При расположении карт на поле запоминаю позицию для каждой карты, если ты кладешь карту и она перекрывает другую, то добавляю в массив (5), номер карты или нескольких, которые перекрываешь. После того когда занес номер карты в массив(5), ту карту которую занес ставлю статус(4) что она перекрыта. Проблема заключается в том,что я не пойму как записать в массив для каждой карты значения тех карт которые ее перекрывают. Мой ход мысли был примерно таков - беру первую карту и проверяю есть ли у нее пересечения с какой либо другой,если да то записываю номер этой карты(например 2) в массив.потом беру эту карту( 2 ) и проверяю пересекает ли ее какя - нибудь карта,если да ( 3 ),то записываю ее в массив 1 и массив 2.И вот какая незадача а если 1 карту пересекают сразу три или четыре,короче незнаю как организовать эту запись. Буду очень благодарен за помощь. |
|||
|
||||
Promitheus |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 28.3.2007 Репутация: 1 Всего: 1 |
Наксолько я вижу решение: отсортировать массив первая карта - самая нижняя, если она одна в этой стопке карт, то её никто не перекрывает, если есть элементы, то каждый следующий элемент перекрывает все предыдущие. Исходя из этого будет удобно отрисовывать, задать начальные координаты по оси у, х константата и идти по массиву, а игрек увеличивать скажем на 1/3 длины карты.
Это сообщение отредактировал(а) Promitheus - 5.4.2007, 12:51 |
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
G_R_E_M_L_I_N, думаю начинать над с организации удобного хранения данных.
Для начала раздели данные и их представление. Например неправильно хранить координаты карты на экране в объекте "карта". Для хранения сведений о текущем состоянии дел на игровом поле явно напрашиваются стеки (FIFO). Вообщем получается у тебя три массива стеков, первый - для исходных стопок карт, из восьми стеков, второй - для вспомогательных, из четырех элементов, и третий - для результирующих стопок. Еще возможно стоит завести массив из восьми указателей (итераторов), каждый из которых будет указывать на карту, с которой начинается упорядоченная (по правилам игры) последовательность карт (естественно если она продолжается вплоть до верхней карты включительно). Думаю эти данные будут однозначно и довольно удобно представлять ситуацию на поле. Останется их только правильно отобразить на экране. Да, в качестве сведений о карте достаточно хранить ее значение и масть PS возможно, конечно, чего то не учел, но общее направление, думаю, должно быть таким. Это сообщение отредактировал(а) zkv - 5.4.2007, 13:43 |
|||
|
||||
regis |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 12.12.2005 Где: Москва, Россия Репутация: 2 Всего: 7 |
В общем, мне тоже кажется, что достаточно для каждой карты хранить дополнительно z-координату. И рисовать каждую карту, учитывая ее.
А что, возможно такое, что они не для всех карт одинаковы? ;) Это сообщение отредактировал(а) regis - 5.4.2007, 15:00 --------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой. |
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
||||
|
||||
regis |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 12.12.2005 Где: Москва, Россия Репутация: 2 Всего: 7 |
Дополнительно к X и Y координатам карты. А вот отдельные массивы (где пытаемся хранить информацию о том, что эту карту перекрывает) на мой взгляд избыточны. (Тем более, что может быть накрыто более чем одной картой.) Хотя, конечно, все зависит от конкретного реализуемого пасьянса. --------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой. |
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
да не надо хранить никакие координаты, они должны расчитываться при каждой новой прорисовке (достаточно пройти по стекам в определенном порядке и нарисовать каждую встреченную карту), тем более не нужны никакие z-order'ы, цвета, текстуры, размеры. Хотя если каждая карта будет иметь свою индивидуальную картинку, то конечно стоит хранить указатель на нее. Интересно, как вы собираетесь организовывать всю работы программы? Основываясь на координатах карт на экране? Все конечно возможно, но зачем создавать себе сложности. Это сообщение отредактировал(а) zkv - 5.4.2007, 15:19 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |