Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> if-else и классы 
:(
    Опции темы
Максим88
  Дата 2.12.2013, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.12.2013

Репутация: нет
Всего: нет



В прикладном окне ездят несколько машин, которые движутся по кольцевой дороге.
Хочу задать движение одной машины только по большому кругу,второй машины только по малому.
переменная great ответственна за движение по большому/малому кругу. 
Написал в классе Cars условие if-else,но фактически оно не выполняется,изменить направление движения автомобиля получается только в главном классе Car.
Как возможно прописать,чтобы great менялся в классе Cars?Или еще как-нибудь? 

Код

using System;
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 t1;            //поток
        //public bool Great { get{ return this.great; } set { this.great = value; } }


        public Car(int N, string Name, int X, int Y)
        {
            num = N;
            name = Name;
            speed = 2;
            x = X;
            y = Y;
            great = true;
            life = true;
            t1 = new Thread(new ThreadStart(Move));
            t1.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.05 * speed));
            y = 170 + (int)Math.Round(r * Math.Sin(counter * 0.05 * speed));
            Console.WriteLine("X=" + x + "Y=" + y + "R=" + r);
            /*if (counter == 64)
            {
                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 == 64)
            {
                great = true;
                counter = 0;
            }*/
        }

        public void Finish()
        {
            life = false;
        }
    }

    class Cars : Form 
    {
        public Car[] pCar; // Массив объектов-машин
        public int n; // кол-во машин
        public bool great;

       /* public void HandlerEv() // Обработчик события ev
        {
            Console.WriteLine(" HandlerEv");
        }*/


        public Cars()
        {
            n = 2;
            pCar = new Car[n];
            this.DoubleBuffered = true;
            for (int i = 0; i < n; i++)
            {
                if (i % 2 == 1)
                {
                    //pCar[i].Great = true;
                    great = true;
                    pCar[i] = new Car(i, "Машина", 165, 330);
                    pCar[i].ev += new delEv(HandlerEv);
                }
                else

                {
                    //pCar[i].Great = false;
                    great = false;
                    pCar[i] = new Car(i, "Машина", 312, 96);
                    pCar[i].ev += new delEv(HandlerEv);
                }
            }
            Text = "Cars";
            //Start ();
        }
       /* public void Start()          // Стартовать
        {
            for (int i = 0; i < n; i++)
            {
                pCar[i].Start();
            }
        }*/

    

   /* class Mainwindow : Form      //класс главного окна
    {
        Car car1;    //машина
        Cars pCar[i];
 
        public Mainwindow()
        {
            this.Text = "Машины в дороге";
            car1 = new Car(1, "Машина", 165, 330);
            car1.ev += new delEv(HandlerEv);
            //pCar[i] = new Car(2, "Машина", 312, 96);
            //pCar[i].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);
            for (int i = 0; i < n; i++)
           {
            //рисование машины
            e.Graphics.DrawRectangle(new Pen(Color.Red, 4), pCar[i].X, pCar[i].Y, 20, 20);
            //e.Graphics.DrawRectangle(new Pen(Color.Green, 4), pCar[i].X, pCar[i].Y, 20, 20);
            e.Graphics.DrawString(pCar[i].N.ToString(), Font, new SolidBrush(Color.Blue), pCar[i].X + 4, pCar[i].Y + 4);
            //e.Graphics.DrawRectangle(new Pen(Color.Blue, 4), pCar[i].X, pCar[i].Y, 20, 20);
           }
        }
        protected override void OnClosed(EventArgs e) //закрытие
        {
            //car1.Finish();
            //pCar[i].Finish();
            //for (int i = 0; i < cars.n; i++) // Завершить потоки 
            //cars.pCar[i].Finish();

        }

        static void Main() //самая главная функция 
        {
              Cars cars = new Cars();
              Application.Run(cars); // Выполнить приложение
             for (int i = 0; i < cars.n; i++) // Завершить потоки 
             cars.pCar[i].Finish();

        }
    }
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0436 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.