Задать движение одной машины только по большому кругу, второй машины только по малому - C#

Узнай цену своей работы

Формулировка задачи:

В прикладном окне ездят несколько машин, которые движутся по кольцевой дороге. Помогите изменить функцию,так чтобы машины двигались на встречу друг другу(лево- и правостороннее движение по кругу)?
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 * 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 = 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);
        }
    }
}

Решение задачи: «Задать движение одной машины только по большому кругу, второй машины только по малому»

textual
Листинг программы
[STAThread]
        static void Main()
       {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.692 из 5
Похожие ответы