Элементы карты (к примеру камень с урока – s)

SFML и C++ Уроки \ Разработка игр Форумы SFML Graphics Элементы карты (к примеру камень с урока – s)

В этой теме 16 ответов, 3 участника, последнее обновление  KindRedSand 6 года/лет, 10 мес. назад.

Просмотр 15 сообщений - с 1 по 15 (из 17 всего)
  • Автор
    Сообщения
  • #4674

    vproject57
    Участник
    Сообщений:10

    Зарегистрирован:
    01.06.2017

    Репутация:0

    Здравствуйте!

    В общем говоря, нарисовал что-то типа графа.

    Есть карта(написан как на видео, только чуть изменен):

    “v” – можно сказать что это “Вершина”.
    “-” – это горизонтальное “Ребро”.
    “|”- а это вертикальное “Ребро”.
    (В моём случае у всех выше перечисленных элементов карты серый цвет!)
    Другие элементы:
    “=” – замена элементу карты “-“.
    “:” – замена элементу карты “|”.
    (А эти элементы в моём случае красные!).

    Сама суть задачи, которую я поставил.

    Пользователь пишет в консольном окне:
    1) Номер начальной вершины(на которой он находится).
    2) Номер конечной вершины(на которую которую он хочет попасть).

    Теперь, я не знаю как получить координаты этих вершин и ребер, и причем нужно не только получить но еще и заменить на определенный элемент.
    К примеру элемент “-” – заменить на “=”.

    Надеюсь хоть сейчас я внятно написал.

    Вложения:
    You must be logged in to view attached files.
    #4677

    tobidashi
    Участник
    Сообщений:16

    Зарегистрирован:
    25.05.2017

    Репутация:7

    Не очень понял вопрос. Пользователь пишет номер вершины. Какой номер и откуда он его берёт? На картинке никаких номеров нет. Могу предположить, что нумерация вершин идёт слева направо и сверху вниз (что-то вроде 0 1 2 – это первй ряд, 3 4 5 – второй ряд и т. д.). Дальше, как получить координаты этих вершин и рёбер. Каких вершин и каких рёбер? Надо уточнить детали.

    #4678

    KindRedSand
    Участник
    Сообщений:82

    Зарегистрирован:
    05.04.2017

    Репутация:30

    Вопрос и правду непонятен.

    Ты что-то подобное хотел?

    #4682

    vproject57
    Участник
    Сообщений:10

    Зарегистрирован:
    01.06.2017

    Репутация:0

    Нумерация, вершины и ребра указаны во вложенной картинке посмотрите пожалуйста.
    Я специально отредактировал через Paint screenshot, чтобы вы поняли что я имею ввиду.

    Вложения:
    You must be logged in to view attached files.
    #4684
    +1

    tobidashi
    Участник
    Сообщений:16

    Зарегистрирован:
    25.05.2017

    Репутация:7

    Ок, с нумерацией вроде ясно. Пусть A – это двумерный массив всех вершин. Тогда каждая вершина задаётся двумя числами – номером строки i и столбца j (например, вершина A[4][2] расположена на пересечении четвёртой строки и второго столбца). Я так понимаю, нужно по индексам вершины A[i][j] узнать её координаты в массиве строк String TileMap[HEIGHT_MAP]? Тогда надо сначала узнать координаты верхнего левого угла массива вершин (то есть вершины A[1][1]) в массиве строк TileMap. Координаты верхнего левого угла определяются, когда ты рисуешь карту, то есть их можно найти вручную и потом в программе создать для них специальные переменные. Пусть эти координаты равны x и y. Другими словами, вершине A[1][1] соответствует элемент карты TileMap[x][y]. Пусть на карте TileMap соседние вершины разделены t рёбрами по горизонтали и s рёбрами по вертикали. Тогда координаты вершины A[i][j] на карте TileMap можно вычислить как

    Должно быть так, если ничего не напутал.

    #4698

    vproject57
    Участник
    Сообщений:10

    Зарегистрирован:
    01.06.2017

    Репутация:0

    tobidashi, а что если я скажу вам, что цифры просто текст(т.е вывел просто текст и всё)?

    #4699

    vproject57
    Участник
    Сообщений:10

    Зарегистрирован:
    01.06.2017

    Репутация:0

    Просто вывел весь код проекта.

    Main.cpp:

    Map.h:

    View.h:

    #4701
    +1

    tobidashi
    Участник
    Сообщений:16

    Зарегистрирован:
    25.05.2017

    Репутация:7

    vproject57, лучше привести конкретный пример того, что хотите реализовать. То есть пользователь запустил вашу игру, затем он ввёл такой-то текст (например, “QWe145bK8f”), программа в ответ на это должна сделать то-то и то-то (например, нарисовать зелёный треугольник внутри синего круга и вывести в консоль “Hello, World”).  Я пока не очень понимаю, что конкретно вводит пользователь и как должна на это отреагировать программа.

    #4702
    +1

    KindRedSand
    Участник
    Сообщений:82

    Зарегистрирован:
    05.04.2017

    Репутация:30

    vproject57, Я не понимаю зачем ты так себе усложняешь жизнь. Просто сделай масив который будет содержть кординаты вершин в строке и после ввода пользователем данных просто через обращение к этому масиву находи нужные тебе строки и заменяй их.

    #4705

    vproject57
    Участник
    Сообщений:10

    Зарегистрирован:
    01.06.2017

    Репутация:0

    Описание программы:
    1) Вводит пользователь место нахождение(т.е где он находится, а точнее улицу).
    2) Вводит пользователь место прибытия(т.е куда он хочет попасть, а точнее улицу).
    3) Теперь, программа имеет начальную и конечную точку. Нужно изменить элемент карты “-” или “|”(в зависимости от пути) на “=” или “||”.

    На этом всё!

    У меня проблема только из-за того что я не могу получить в цикле прорисовки карты, а точнее:

    К примеру к случаю “v” написать сохрани в переменную сVertices[x][y]. Как-то так!

    #4706

    vproject57
    Участник
    Сообщений:10

    Зарегистрирован:
    01.06.2017

    Репутация:0

    Не дал мне еще раз сайт отредактировать свой комментарий.
    Проблема: не могу получить во время цикла координаты x, y, какого-то элемента.

    KindRedSan, если сделать как вы сказали – Я думаю, это будет не правильно, так как с такой проблемой можно столкнутся и во время работы над другой программой. А как вы понимаете, каждый раз писать координаты каждого элемента карты в ручную – это не очень скажем удобно!

    #4707

    KindRedSand
    Участник
    Сообщений:82

    Зарегистрирован:
    05.04.2017

    Репутация:30

    И почему же вы не можете в цикле найти кординаты? Сектора у вас разбиты 32×32, сответственно когда вы попадает в случай ‘v’

     

    #4713

    vproject57
    Участник
    Сообщений:10

    Зарегистрирован:
    01.06.2017

    Репутация:0

    KindRedSan, на Vector2 ругается. Что делать с ним?

    #4716

    KindRedSand
    Участник
    Сообщений:82

    Зарегистрирован:
    05.04.2017

    Репутация:30

    Переписать его в Vector2f. Привычка с XNA уже выработалась…

    #4717

    vproject57
    Участник
    Сообщений:10

    Зарегистрирован:
    01.06.2017

    Репутация:0

    KindRedSan, хм. А теперь: “не существует подходящей функции преобразования из “sf::Vector2f” в “float” “.
    Одну делаю другая выходит).

Просмотр 15 сообщений - с 1 по 15 (из 17 всего)

Для ответа в этой теме необходимо авторизоваться.