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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2013, 02:47   #31
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

И вообще проблема в этих строчках, они не правильно считаются.
Код:
            dx = Convert.ToInt32((carpos[cur+1].X - carpos[cur].X) / t);
            dy = Convert.ToInt32((carpos[cur+1].Y - carpos[cur].Y) / t);
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 24.03.2013, 02:58   #32
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Все. Уже разобрался..
Код:
            dx = (carpos[cur + 1].X - carpos[cur].X) / t;
            dy = (carpos[cur + 1].Y - carpos[cur].Y) / t;
и работает
Теперь надо придумать как разбивать поле на клетки.
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 24.03.2013, 04:15   #33
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Решил разбить на классы:
Код:
namespace rally2
{
    public partial class Form1 : Form
    {

        public static Graphics graph1;
        public static Pen pen1, pen2;
        Map m = new Map();

        public class Map
        {

            int clickcount = 0;
            Point p1, p2;
            public List<Point> route;

            public Map()
            {
                this.route = new List<Point>();
            }

            public void PlotRout(Point e)
            {
                
                if (clickcount == 0)
                {
                    p1.X = e.X;
                    p1.Y = e.Y;
                }
                if (clickcount == 1)
                {
                    p2.X = e.X;
                    p2.Y = e.Y;
                    graph1.DrawLine(pen1, p1, p2);
                }
                if (clickcount > 1)
                {
                    p1.X = p2.X;
                    p1.Y = p2.Y;
                    p2.X = e.X;
                    p2.Y = e.Y;
                    graph1.DrawLine(pen1, p1, p2);
                }
                clickcount++;
                route.Add(new Point(e.X, e.Y));
            }

        };

        public class ObjectOnMap
        {
            Point coords;
        };

        public class Car : ObjectOnMap
        {
            public int fuel;
            public int v;

            public static void Move()
            {

            }

        };

        public class Barier : ObjectOnMap
        {
            public int type; //1-doroga 2-pesok 3-voda
        };

        public Form1()
        {
            InitializeComponent();
            graph1 = pictureBox1.CreateGraphics();
            pen1 = new Pen(Color.Red, 4);

        }


        private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
        {
            
            m.PlotRout(e.Location);

        }

        private void стартToolStripMenuItem_Click(object sender, EventArgs e)
        {
            pictureBox1.Visible = true;
        }

    }
}
Сейчас думаю какие еще поля/методы надо добавить. Буду рад подсказкам/помощи.
Спеши медленно.

Последний раз редактировалось asmars; 24.03.2013 в 05:09.
asmars вне форума Ответить с цитированием
Старый 24.03.2013, 09:49   #34
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Зачем тратить кучу времени на поиск проблемы, которую сам себе и создал ?
Я же привёл код - там чётко написано, что объявить переменные даблами надо, а конвёрттуинт убрать (да просто весь метод таймера заменить на мой). Надо было только вставить внимательно.

Что реализовать - ну сперва хотя бы восстановить функциональность предыдущей версии. Надо создать машинку (пусть пока принадлежит форме), и передать ей указатель на карту, пусть у неё в поле лежит, ну и текущая клетка тоже полем, у карты (и возможно у объекта, для удобства) сделать метод преобразования координат реальных в клеточные, для чего ввести поля - кол-во клеток по верт и гориз, размер клетки в пикселях. Добавить массив клеток, судя по коду, Вы предполагаете массив barrier-ов но я думаю что препятствие сделать отдельным классом (если я правильно понял, и Вам нужны препятствия), а тип клетки - песок дорога и вода - сделать просто типом клетки.
Добавить метод движения машинке ессно, и в таймере вызывать car.Move()

Также можно написать методы влияния на скорость машинки в зависимости от клетки
phomm вне форума Ответить с цитированием
Старый 24.03.2013, 14:17   #35
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Цитата:
Вы предполагаете массив barrier-ов но я думаю что препятствие сделать отдельным классом (если я правильно понял, и Вам нужны препятствия), а тип клетки - песок дорога и вода - сделать просто типом клетки.
может как-то в карте хранить массив клеток и их тип. А машинка в зависимости от типа будет ехать/расходовать быстрее/медленнее больше/меньше.


Цитата:
Также можно написать методы влияния на скорость машинки в зависимости от клетки
В задание написано "Запас топлива ограничен, а расход на 1км пропорционален квадрату скорости". С этим у меня совсем туго, не знаю как это "пропорциональна квадрату скорости".
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 24.03.2013, 15:32   #36
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
ожет как-то в карте хранить массив клеток и их тип. А машинка в зависимости от типа будет ехать/расходовать быстрее/медленнее больше/меньше.
именно так. причём размер клетки должен быть достаточно мал (сопоставим с размером автомобильчика), чтобы не возникла ситуация, когда в одной клетке дорога проходит по разному типу трассы.
Я бы вообще сразу на карте сетку рисовал, по крайней мере, на этапе прокладки маршрута.

Цитата:
В задание написано "Запас топлива ограничен, а расход на 1км пропорционален квадрату скорости". С этим у меня совсем туго, не знаю как это "пропорциональна квадрату скорости".
вообще-то, строго говоря, это абсолютно безграмотно, с точки зрения физической модели, но, если рассматривать вопрос, как сферического коня, тогда эта запись означает, что, если автомобиль потребляет X литров на 1 км при скорости V1, тогда при скорости V2 потребление будет x* (V2/V1)^2 (^2 - это в квадрате)
Грубо говоря, это означает, если скорость возрастает в 2 раза, то потребление увеличивается в 4 раза.

надеюсь, что я не ошибся в формуле...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.03.2013, 01:02   #37
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

А клетки это как-бы несколько пикселей объединенные в одну клетку ? Или как? И как это в коде изобразить ? А то что-то совсем не придумал.. то, что создать двумерный массив клеток и их типов это да, но как разбить на клетки?
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 25.03.2013, 05:12   #38
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Ребят помогите разобраться.. phomm, Serge_Bliznykov..
Почему то выдает ошибку(в коде указано где). На сколько знаю, такая ошибка появляется при значении null.

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

И как сделать разбиение на клетки? Придумал только структуру "клетка".

Любым советам/подсказкам буду рад.


Код:
namespace rally2
{
    public partial class Form1 : Form
    {
         
        struct cell
        {
            int Type;//1-doroga 2-pesok 3-voda
            int X; //Laviy verhniy
            int Y; //leviy verhniy
            Size Size;
        };


        Manager m;

        public class Map
        {

            int clickcount = 0;
            Point p1, p2;
            public List<Point> route;


            public Map(Graphics graph1, Pen pen1)
            {
                this.route = new List<Point>();

            }

            public void DrawGrid()
            {

            }

            public void PlotRout(Point e, Graphics graph1, Pen pen1)
            {

                if (clickcount == 0)
                {
                    p1.X = e.X;
                    p1.Y = e.Y;
                }
                if (clickcount == 1)
                {
                    p2.X = e.X;
                    p2.Y = e.Y;
                    graph1.DrawLine(pen1, p1, p2);
                }
                if (clickcount > 1)
                {
                    p1.X = p2.X;
                    p1.Y = p2.Y;
                    p2.X = e.X;
                    p2.Y = e.Y;
                    graph1.DrawLine(pen1, p1, p2);
                }
                clickcount++;
                route.Add(new Point(e.X, e.Y));

            }

        };

        public class Car
        {
            public int fuel;
            public int v;
            public int fuelconsumption;

            public void Move(PictureBox auto)
            {
                auto.Location = new Point(130, 410);
                auto.Visible = true;
            }

        };

        public class Manager
        {
            public static Graphics graph1;
            public static Pen pen1, pen2;
            Map map=new Map(graph1, pen1);
            Car car;

            public Manager(PictureBox picturebox1)
            {
                graph1 = picturebox1.CreateGraphics();
                pen1 = new Pen(Color.Red, 2);
                pen2 = new Pen(Color.Black, 2);
            }

            public void PlotRout(Point e)
            {
                map.PlotRout(e,graph1, pen1);
            }

            public void Move(PictureBox auto)
            {
                  //
                  //здесь выдает ошибку
                  //Ссылка на объект не указывает на экземпляр объекта.
                  //
                  car.Move(auto);
                  //
                  //
            }


        };

        public Form1()
        {
            InitializeComponent();
            m = new Manager(pictureBox1);
        }

        private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
        {
            m.PlotRout(e.Location);
        }

        private void стартToolStripMenuItem_Click(object sender, EventArgs e)
        {
            pictureBox1.Visible = true;
        }

        //по нажатию, прокладка маршрута закончилась, сейчас будем ехать
        private void button1_Click(object sender, EventArgs e)
        {

            m.Move(pictureBox2);

        }

    }
}
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 25.03.2013, 07:47   #39
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Ошибку выдаёт, потому что экземпляр Car car не создан - нигде не вызывается new.
Есть ещё ошибка, код
Код:
Map map=new Map(graph1, pen1);
Должен быть в конце конструктора.
И энто , код выкладывайте уже проектом, я побырику до этого собирал, но сейчас уже лень тратить время.
phomm вне форума Ответить с цитированием
Старый 25.03.2013, 15:06   #40
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

rally2.rar вот весь проект.
Есть несколько проблем..
1.Не знаю как реализовать разбиение на клетки и, чтобы машинка понимала на какой клетке она находиться и реагировала соответственно.
2.Какого фига машинка едет не по маршруту, а всегда со смещением. Т.е. например маршрут начинается в точке 140,50, а машинка появляется в точке 140, 30 и едет по траектории маршрута, но на 20(к примеру) смещена постоянно.
Ребят подскажите как решить эти две проблемы..
Заранее спасибо за любую помощь/подсказки.
Спеши медленно.

Последний раз редактировалось asmars; 25.03.2013 в 15:20.
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