![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
lenarano |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 17.4.2014 Репутация: нет Всего: нет |
На данный момент нужна помощь в том, что я не могу вывести levelsMap в поле класса, возникают ошибки. Если кто то покажет, как это будет-буду рада, может опять что-то упускаю. Если оставить как есть, то тогда естественно моя функция прорисовки void Map::display_maze( int level) его не видит. Подскажите пути исправления
|
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Не понял, что Вы хотите, и что за ошибки возникают. Может, так:
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
это нужно вынести из функции, иначе не видно снаружи.
в классе написать декларацию:
а где-то в спп-шнике определение:
|
||||
|
|||||
lenarano |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 17.4.2014 Репутация: нет Всего: нет |
Спасибо всем, проблема была в том, что я пробовала иницилизировать его в конструкторе в срр файле, хотя до этого объявила его в заголовочном. Почему нельзя было?
Хотела еще спросить. Я эту прорисовку хотела использовать для того, чтобы видеть мой алгоритм кратчайшего пути. Т.е. по идее я должна была вызвать прорисовку карты,затем преобразование карты, и затем ту же прорисовку, но на ней должны были отобразиться изменения- + там где есть путь. Сама прорисовка рабочая,т.е когда я запускаю игру с одной функцией преобразования, то мои тайлики выстраивают путь и я его вижу, но когда я делаю так:
У меня в моей консольке видно, что массив не преобразуется и карта пути тайликами не прорисовывается. Я подумала,что у нас значения переменной константное,ничего не помогло. static char* levelsMap[][HEIGHT_MAP]; Почему так? |
|||
|
||||
lenarano |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 17.4.2014 Репутация: нет Всего: нет |
В вложениях показала как отрисовывается путь, когда работает только алгоритм поиска пути и когда сначала рисую массив, потом прорабатываю алгоритм и опять рисую ничего не вижу. Путь на массиве должен быть выложен "+", а получается, что и не прорисовывается не в массиве и не на карте.
Присоединённый файл ( Кол-во скачиваний: 3 ) ![]() |
|||
|
||||
lenarano |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 17.4.2014 Репутация: нет Всего: нет |
вот как с функцией прорисовки
Присоединённый файл ( Кол-во скачиваний: 4 ) ![]() |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
displayMaze() инициализирует массив TileMap из levelsMap:
Естественно, если какой-то путь был посчитан, здесь он затирается. |
|||
|
||||
lenarano |
|
||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 17.4.2014 Репутация: нет Всего: нет |
А как это изменить? Я планирую эту функцию использовать для того, что бы видеть прорисовку моего пути, т.е. нужно, чтобы массив мог видоизменяться?
Добавлено через 11 минут и 59 секунд Еще хотела спросить. У меня сейчас видно, что я просто обозначила на карте где буднт прорисовываться 'G' и 'S' и я по этому алгоритму прорисовываю свой путь. Вот кусочек кода с прорисовкой и реализацией алгоритма поиска пути
Теперь я хочу перейти к следующему этапу, когда Этaп построения мaршрутa перемещения. Присвaивaем переменным Х и Y знaчения координaт стaртовой позиции. Т.е. я хочу передать координаты врага и пакмана и нарисовать на их месте на карте 'S'и 'G' , а не прорисовывать их на карте. Все эти изменения сейчас пытаюсь сделать. Вот мой класс героя
и Врага
В main в обработчике событий я хочу в обработчике событий передать эти координаты
Что я тут делаю не так? Почему выдается ошибка, программа не запускается. Хочу добиться прорисовки дорожки от девочки к дракону. |
||||||||
|
|||||||||
math64 |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Ну, я бы не стал портить карту во время поиска пути.
find_path() возвращает пустой список если путь не найден. Если путь будет найден - его можно будет отобразить на карте. При рекурсивном поиске пути нужно помечать, где уже были, чтобы не возвращаться. Делаем это на временной карте:
|
||||
|
|||||
math64 |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
PS: значения flag лучше задавить степенями двойки:
Тогда можно задавать комбинации значений:
|
||||
|
|||||
lenarano |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 17.4.2014 Репутация: нет Всего: нет |
Не поняла((
У нас есть struct Point { int x, int y}; std::list<Point> find_path(int x, int y) { Point start = { x, y }; return find_path(start); } Я должна это добавить в класс врага? Я в листе информация о передвижении моего врага, т.е. где он находится? А потом в классе карта я работаю уже std::list<Point> find_path(const Point& start); передаю координаты врага enum flag { free, // свободно wall, // стенка startpoint, // начало пути endpoint, // конец пути inpath, // в пробном пути noway, // проверено, что ведет в тупик ... }; и реализация в cpp/ файле? std::list<Point> find_path(const Point& start) { flag tempMap[HEIGHT_MAP][WIDTH_MAP]; for(int y =0; y < HEIGHT_MAP; y++) for(int x =0; x < WIDTH_MAP; x++) tempMap[y][x] = free; // или wall - см. оригинальную карту tempMap[start.y][start.x] = startpoint; return find_path(const Point& start, tempMap); // Вызываем рекурсивную функцию } |
|||
|
||||
lenarano |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 17.4.2014 Репутация: нет Всего: нет |
Ребята, вы меня конечно извините, что туплю. У меня уже с этим курсовым скоро крыша поедет. Варюсь в собственном соку-так получилось. Деваться некуда -стараюсь делать, а знаний и умений мало. Вот как мне оживить моих врагов.
math64, вот вы мне показали, а я не могу понять куда, что всунуть и до конца, что где обозначает. Вот мои основные классы , которые тут нужны. Карта, враг, герой. Что мне добавить куда и как вставить, чтобы мои враги поумнели и карту я увидела.
Класс героя и врага в предыдущем посте. |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Главная идея - при поиске пути использовать временную карту.
Куда запихнуть? Можно в класс карты, можно в класс игрока (если путь ищется для игрока), можно в класс врага (если путь ищется для врага), можно в базовый класс Entity для игрока и врага (путь ищется для того и другого, в производных классах можно переоределить специфику) показывыть путь лучше не в консоли, а в игровом окне - так нагляднее, но я не знаю возможностей вашего движка. Реализовать можно примерно так (могут быть ошибки):
Это сообщение отредактировал(а) math64 - 2.11.2015, 15:35 |
|||
|
||||
lenarano |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 17.4.2014 Репутация: нет Всего: нет |
Оставила в классе Map только прорисовку карты. Решила реализовать в классе Врага, т.к. он преследует героя.
Компилятор ругается на эти строки, подчеркивая переменную y.(в последней функции) if ( (tempMap[y][x] & endpoint) != 0) return path; if ( (tempMap[y][x] & wall) != 0) if ( (tempMap[y][x] & (inpath|noway)) != 0) и т.д. Пишет: выражение должно относиться к целочисленному типу или типу перечисления без области видимости индекс имеет нецелый тип Посмотрите правильно ли я все остальное указала. Но вроде больше ошибок нет. Это сообщение отредактировал(а) lenarano - 2.11.2015, 18:13 |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Ну, можно было заметить мою ошибку (предупреждал, что могут быть). Параметры функции - start_x и start_y, а внутри функции - x и y.
Если будет ругаться на tempMap[y][x] &= ~inpath; придется писать tempMap[y][x] = (flag)(tempMap[y][x]&~inpath); или объявить int tempMap[HEIGHT_MAP][WIDTH_MAP]. Относительно того как показывать результат поиска пути. В подобных библиотеках обычно имеется возможность работать со слоями (Layer) Карту нужно разбить на слои: 1. собственно карта - стены и проходы 2. неподвижные объекты - золото 3. подвижные объекты - спрайты - игрок и враги 4. слой отладки - в нем и выводить найденный путь. 5. Слой надписей (GAME OVER) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |