singlepost

пытаюсь сделать Сапёр на C++ Builder << На главную или назад  

Такая проблема.
Я пытаюсь сделать сапёр, для курсовой делал.
Особенность в нём то, что можно разные формы для ячеек поля ставить(квадраты, шестиугольники, треугольники, и.т.п)
Проблема такая,
в качестве элементов поля у меня компоненты timage
при использовании например, треугольников, эти компоненты как бы перекрывают друг друга. лежат один под другим. и получается, что вроде бы кликаешь на одну ячейку, а попадаешь по соседней(
нужно сделать так, чтобы эти компоненты реагировали на щелчки мыши только в той области,где они отображаются, не перекрывая соседнии.
или может можно использовать другие компоненты?
не знаю, смогу ли лучше объяснить(
заранее спасибо.

80 ответов в теме “пытаюсь сделать Сапёр на C++ Builder”

  1. 8
    Денис Пономарёв ответил:

    Программа "узнает" о формах ячеек из файла-архива(там и графика и описания взаимодействия ячеек и т.п.)
    сейчас пытаюсь сделать всё как сказали одним компонентом. с полигонами как-никак разобрался.главное, понял сам принцип. Про регионы раньше вообще нигде ничего не замечал. спасибо за идею

  2. 7
    Алексей Поляков ответил:

    Если программа не знает какие формы могут быть – думаю никак… но если есть выбор от пользователя квадрат или многоугольник – в руки уравнение прямой и пооверять где находится точка (щелчек мыши) относительно всех ограничивающих линий и так в цикле по всем ячейкам

  3. 6
    Александр Чигринец ответил:

    А зачем изобретать велосипед? Делаешь всё поле одним компонетом, а под каждую ячейку создаёшь Регион. Этот регион и отрисовывать можно ( FillRgn ) и в OnMouseClick проверять PtInRegion.

  4. 5
    Денис Пономарёв ответил:

    алгоритм создания карты изображений в html, где входными данными является список координат, думаю бы идеально подошёл. есть ли где нибудь описание алгоритма или код?
    может кто что подскажет?

  5. 4
    Vitaly Martynovich ответил:

    timage никак не сойдет. можно на крайний случай tshape вроде, но это извращение какоето

  6. 3
    Денис Пономарёв ответил:

    Спасибо.
    а может подскажите по какому алгоритму можно рассчитать?
    Для квадратов, как в оригинале то всё ясно, а вот в других случаях…
    К тому же задумано так, что программа заранее не знает какие формы могут быть использованы в игре, они подгружаются по отдельности из ресурсфайлов с графикой и набором инструкций. Так что тут необходимо некоторое универсальное решение.
    может быть есть какая нибудь статья с подобным примером?

  7. 2
    Дмитрий Шашолко ответил:

    Согласен с Саматом

  8. 1
    Самат Курманов ответил:

    я так понял C++ Builder? Лучше переопределить OnPaint и в нем самому рисовать треугольники, шестиугольники и проч. а по событию OnMouseClick надо получить координаты клика мышкой и по ним рассчитать в каком треугольнике(шестиугольнике и проч) был произведен клик.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.