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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 24.11.2013, 12:52   #1
Максим 116
Пользователь
 
Регистрация: 06.10.2013
Сообщений: 31
Восклицание Двухсторонее движения

В прикладном окне ездят несколько машин, которые движутся по кольцевой дороге.
Как задать движение одного авто только по большому,а второго только по малому кругу?


Код:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Drawing;
 
 
namespace Kursovaya
{
 
    delegate void delEv();
 
    class Car //класс машины
    {
        public event delEv ev;
        int num;                //номер машины
        int speed;       //скорость машины
        int r;           //радиус кольца
        string name;     //имя машины
        int x, y;         //текущая позиция машины
        bool great,        //признак движения по большому кругу
             life;                //жизнь потока
        Thread t;                 //поток
 
 
        public Car(int N, string Name, int X, int Y)
        {
            num = N;
            name = Name;
            speed = 2;
            x = X;
            y = Y;
            great = true;
            life = true;
            t = new Thread(new ThreadStart(Move));
            t.Start();
        }
 
        public int N
        { 
            get 
        { 
            return num; 
            } 
        }
        public int X            //свойство координаты X центра машины
        { 
            get 
        { 
                return x; 
            } 
        }
        public int Y            //свойство координаты Y центра машины
        {
            get {
                return y; 
            } 
        }
 
        int counter;       // время существования
        void Move()        //движение
        {
            while (life)
            {
                counter++;
                if (great) OnCirclebigroad();
                if (!great) OnCirclesmallroad();
                if (ev != null)
                    ev();
                Thread.Sleep(100);
 
            }
        }
 
        void OnCirclebigroad() //движение по большому кругу
        {
            r = 160;
            x = 170 + (int)Math.Round(r * Math.Cos(counter * 0.1 * speed));
            y = 170 + (int)Math.Round(r * Math.Sin(counter * 0.1 * speed));
            Console.WriteLine("X=" + x + "Y=" + y + "R=" + r);
            if (counter == 32)
            { great = false; counter = 0; }
        }
 
        void OnCirclesmallroad() //движение по малому кругу
        {
            r = 120;
            x = 170 + (int)Math.Round(r * Math.Cos(counter * 0.1 * -1* speed));
            y = 170 + (int)Math.Round(r * Math.Sin(counter * 0.1 *  -1*  speed));
            Console.WriteLine("X=" + x + "Y=" + y + "R=" + r);
            if (counter == 32)
            { great = true; counter = 0; }
        }
 
        public void Finish()
        {
            life = false;
        }
    }
 
 
 
    class Mainwindow : Form      //класс главного окна
    {
        Car l1, l2;                    //машина
 
        public Mainwindow()
        {
            this.Text = "Машины в дороге";
            l1 = new Car(1, "Машина", 165, 330);
            l1.ev += new delEv(HandlerEv);
            l2 = new Car(2, "Машина", 312, 96);
            l2.ev += new delEv(HandlerEv);
        }
 
 
        void HandlerEv()
        {
            Invalidate();
        }
 
        protected override void OnPaint(PaintEventArgs e) //рисование
        {
            e.Graphics.DrawEllipse(new Pen(Color.Black, 40), 20, 20, 320, 320);
            e.Graphics.DrawEllipse(new Pen(Color.Black, 40), 65, 65, 230, 230);
            //рисование машины
            e.Graphics.DrawRectangle(new Pen(Color.Red, 4), l1.X, l1.Y, 20, 20);
            e.Graphics.DrawRectangle(new Pen(Color.Green, 4), l2.X, l2.Y, 20, 20);
        }
 
        protected override void OnClosed(EventArgs e) //закрытие
        {
            l1.Finish();
        }
 
        static void Main() //самая главная функция 
        {
            Mainwindow mw = new Mainwindow();
            Application.Run(mw);
        }
    }
}
Максим 116 вне форума
Старый 24.11.2013, 18:57   #2
D][mon
Форумчанин
 
Регистрация: 05.01.2010
Сообщений: 150
По умолчанию

вы не меняете значение поля great, вот и все, а еще поток убивать надо
D][mon вне форума
Старый 24.11.2013, 20:28   #3
Максим 116
Пользователь
 
Регистрация: 06.10.2013
Сообщений: 31
По умолчанию

Написал для каждой машины отдельный поток,но есть проблемы с компиляцией.
Вложения
Тип файла: rar Program.rar (1.4 Кб, 6 просмотров)
Максим 116 вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
траэктория движения profan_Artem Общие вопросы C/C++ 2 02.07.2011 15:19
Детектор движения toxich Мультимедиа в Delphi 27 29.05.2010 17:56
Имитация движения (need help!) SnakeLight Общие вопросы Delphi 2 05.06.2009 22:32
Расчет движения voodoomedved Gamedev - cоздание игр: Unity, OpenGL, DirectX 5 25.02.2009 23:07
Детектор движения LARSn Помощь студентам 3 30.01.2009 08:02