Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2013, 01:44   #1
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию Управление машинкой

Всем доброго времени суток!
Делаю игру. Есть карта загруженная в picturebox, я мышкой рисую маршрут(ниже код) и машинка должна двигаться по этому маршруту.
Вопросы:
1.Машинку тоже загрузить через пикчербокс и выставить "на передний план" или лучше по-другому как-то ?
2.Как заставить эту машинку двигаться именно по маршруту? Как получить координаты линий?

Заранее спасибо!
Код:
        System.Drawing.Point first;
        System.Drawing.Point second;
        int fClick = 0;
        Graphics g;
        Pen p1 = new Pen(Color.Red, 4);

        public Form1()
        {
            InitializeComponent();
        }

        private void startToolStripMenuItem_Click(object sender, EventArgs e)
        {
            pictureBox1.Visible = true;
            g = pictureBox1.CreateGraphics();

        }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            if (fClick == 0)
            {
                first.X = e.X;
                first.Y = e.Y;
                fClick++;

            }
            if (fClick == 1)
            {
                second.X = e.X;
                second.Y = e.Y;
                g.DrawLine(p1, first, second);
                fClick++;
            }
            if (fClick >1)
            {
                first.X = second.X;
                first.Y = second.Y;
                second.X = e.X;
                second.Y = e.Y;
                g.DrawLine(p1, first, second);
            }
        }
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 21.03.2013, 08:38   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Как получить координаты линий?
ну очевидно же - нужно при рисовании линий заполнять структуру (массив, список - любую, какая Вам удобнее), в которой сохранять координаты нарисованных линий.
Вот по ним и выводить после изображение машинки по таймеру...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.03.2013, 08:58   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

По Вашему, машинка, наверное, сама должна сканировать местность ?
Вы даже не храните координаты точек линии.
Чтобы выводить машинки, надо подсчитывать вектор скорости по векторам точек, у машинки хранить вектор размещения, вектор скорости и следующую точку. Как только разность векторов размещения точки и вектора размещения машинки меньше вектора скорости - надо поменять точку на следующую по маршруту. Движение же машинок обычное - к вектору размещения добавляем вектор скорости.
Теория по векторам http://habrahabr.ru/post/131931/ Но можно и в упрощённом виде делать простым расчётом координат (но его простота только в меньшей необходимости понимания теории, кода же гораздо меньше будет с векторами)

Ну в Ваш код вообще странный, каждый раз при запуске программы будете рисовать трассу ? Лучше уж сразу предусмотреть ввод/вывод в файл, собственно, массив координат точек и тут нужен.
phomm вне форума Ответить с цитированием
Старый 21.03.2013, 11:07   #4
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Да я думал как-то записывать координаты точек линий в массив, а потом передвигать машинку по ней. Но как координаты линий ? Что-то не понимаю..

С векторами достаточно сложно..
Да, такое задание, что штурман рисует каждый раз трассу(да, по той же карте ), на карте есть бездорожье, песок и озера. По бездорожью едет с одной скоростью, по песку меньшей, а бензина тратиться больше. Озера надо объезжать.
Игра происходить будет так: пользователь проложил маршрут, а потом стрелочками увеличил(уменьшил скорость). И машинка объехала маршрут по линиям.
Понимаю, игра какая-то бессмысленная, но такое задание.
Буду рад любым советам по поводу реализации этого всего.
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 21.03.2013, 12:00   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Но как координаты линий ?
во-первых, у Вас не линии, а отрезки
во-вторых, любой отрезок (впрочем, как и линия) на плоскости однозначно задаётся двумя несовпадающими точками, лежащими на этом отрезке/прямой.
Для отрезка эти точки являются координатами начала отрезка и конца.

в-третьих, у Вас все линии связанные (начало следующей линии всегда совпадает с концом предудущей - это одна и та же точка).
Поэтому Вам достаточно хранить последовательные координаты точек
T1 T2 ... TN
(для каждой точки нужно хранить X и Y)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.03.2013, 12:58   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Сложите всё вместе - сделайте что можете, картинки с машинками, картой, с запоминанием в массив точек, с расчётами скорости движения, примерно так - поле пусть условно поделено на некие клетки, где указывается тип, и пусть функция будет, принадлежности точки (пикселя) к клетке. Ну и таймер понадобится, скорее всего, попытайтесь обход точек на расчётах координат написать в его обработчике, сперва 1 машинки потом другой. Возможно понадобится проверка столкновений машинок потом - тут тоже можно будет воспользоваться полем - чтобы на 1 клетке в момент времени могла находиться только 1 машинка, а если другая старается её занять - значит обе проигрывают из-за столкновения.
Всё соберёте и киньте сюда архивом, и вопросы распишите. Постараемся помочь, но от Вас всё равно некую основу надо.
phomm вне форума Ответить с цитированием
Старый 21.03.2013, 13:38   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
сперва 1 машинки потом другой. Возможно понадобится проверка столкновений машинок потом - тут тоже можно будет воспользоваться полем - чтобы на 1 клетке в момент времени могла находиться только 1 машинка, а если другая старается её занять - значит обе проигрывают из-за столкновения.
phomm, тут всё проще, у автора топика только одна машинка ездит по карте..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.03.2013, 16:24   #8
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

phomm, спасибо за алгоритм. Я тоже думал на счет разбиения поля на квадратики, и каждый квадратик какая-то поверхность(земля, песок, вода).

Но сейчас у меня проблема, никак не могу понять как заставить машинку перемещаться по моему маршруту, который я задаю отрезками.
Подходил к преподавателю, тот особо не объяснил(или я плохо понял).
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 21.03.2013, 20:00   #9
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

По таймеру производится приращение к координатам величин, которые соответствуют разности координат первой и второй точке на маршруте поделённой на количество итераций для прохождения этого маршрута (или в зависимости от длины пути), это и будет скорость, её по таймеру прибавляем к размещению.
Нарисуйте себе на листочке сетку координатную, задайте 2 точки , и распишите сколько за один "шаг" интервал времени должна продвинуться машинка - по линии находите точку куда она должна сместиться и смотрите на закономерности расчёта координат для этой точки. В таймерном цикле будет эффект движения.
phomm вне форума Ответить с цитированием
Старый 21.03.2013, 20:10   #10
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Я как раз так сейчас и делаю
Спеши медленно.
asmars вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Управление игрушечной машинкой с компьютера 8Observer8 C# (си шарп) 11 26.10.2012 17:27
Управление 2 экранами Alexandr555 Компьютерное железо 13 06.07.2011 22:30
Управление Костян 98 Общие вопросы Delphi 21 30.05.2011 16:31
Управление памятью ilham Операционные системы общие вопросы 2 17.12.2008 18:29