Advertisement
Real_Foxes

Untitled

May 7th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.57 KB | None | 0 0
  1. using System;
  2. using System.Windows;
  3. using System.Windows.Controls;
  4. using System.Windows.Input;
  5. using System.Windows.Media;
  6. using System.Windows.Shapes;
  7.  
  8.  
  9. namespace WpfApp2
  10. {
  11.     /// <summary>
  12.     /// Логика взаимодействия для MainWindow.xaml
  13.     /// </summary>
  14.     public partial class MainWindow : Window
  15.     {
  16.         public System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer(); //Объявление таймера
  17.         public TimeSpan interv = new TimeSpan(0, 0, 0, 0, 10); //Тик таймера
  18.         public Random rand = new Random(); //рандом
  19.         public int netCount = 100; //Кол-во точек
  20.         public SolidColorBrush netColor = new SolidColorBrush(Color.FromRgb(105, 133, 255)); //Цвет точки
  21.         public double[,] net = new double[100, 5]; //Кол-во точек и параметро(Да я дебил и не могу в одной переменной указать кол-во точек)
  22.         // 0-x 1-y 2-visible 3-speedx 4-speedy
  23.  
  24.         public MainWindow()
  25.         {
  26.             InitializeComponent();
  27.         }
  28.  
  29.          private void draw() //Отрисовка
  30.         {
  31.             CanvasMain.Children.Clear();
  32.            for (int i = 0; i < netCount - 1; i++)  // 0-x 1-y 2-visible 3-speedx 4-speedy //Перебор всего массива
  33.             {
  34.                
  35.                 Ellipse myEllipse = new Ellipse();
  36.                 myEllipse.Fill   = netColor;
  37.                 myEllipse.Width  = 5;
  38.                 myEllipse.Height = 5;
  39.                 if (net[i, 2] == 2) myEllipse.Opacity = 0; else { myEllipse.Opacity = 1; } //Прозрачность точки
  40.                 Canvas.SetLeft(myEllipse, net[i, 0]);
  41.                 Canvas.SetTop (myEllipse, net[i, 1]);
  42.                 CanvasMain.Children.Add(myEllipse); //Отрисовка точки
  43.             }
  44.  
  45.             for (int i = 0; i < netCount - 1; i++)  // 0-x 1-y 2-visible 3-speedx 4-speedy Перебор всего массива
  46.             {
  47.                 for (int q = 0; q < netCount - 1; q++)  
  48.                 {
  49.                     double katet1, katet2;                                                //
  50.                     katet1 = net[i, 0] - net[q, 0]; if (katet1 < 0) katet1 = katet1 * -1; //
  51.                     katet2 = net[i, 1] - net[q, 1]; if (katet1 < 0) katet2 = katet2 * -1; // Вычисление расстояния до точки
  52.                     double gyp = Math.Sqrt( Math.Pow(katet1, 2)+Math.Pow(katet2, 2) );    //
  53.                     if (gyp < 100)                     //Если расстояние меньше 100
  54.                     {
  55.                    
  56.                             if (net[i, 2] == 1 || net[q, 2] == 1) { //Если видна точка то прорисовка линии
  57.                         Line line = new Line();
  58.                         line.Stroke = new SolidColorBrush(Color.FromRgb(255,255,255));
  59.                         line.X1 = net[i, 0];  //
  60.                         line.X2 = net[q, 0];  // Координаты от точки до точки
  61.                         line.Y1 = net[i, 1];  //
  62.                         line.Y2 = net[q, 1];  //
  63.                         line.StrokeThickness = 1;
  64.                         line.Opacity = 1/(gyp/2);  //Прозрачность относительно расстояния до точки
  65.                          CanvasMain.Children.Add(line);
  66.                         }
  67.                     }
  68.                 }
  69.             }
  70.         }
  71.  
  72.         private void startnet() //Создание переменных
  73.         {
  74.             for (int i = 0; i < netCount - 1; i++)  // 0-x 1-y 2-visible 3-speedx 4-speedy //Перебор всего массива
  75.             {
  76.                 net[i, 0] = rand.Next(0, Convert.ToInt32(CanvasMain.Width));
  77.                 net[i, 1] = rand.Next(0, Convert.ToInt32(CanvasMain.Height));
  78.                 net[i, 2] = rand.Next( 1,4); //Видимость точки
  79.                 if (rand.Next(0, 2) == 1) net[i, 3] = rand.Next(1, 3); else net[i, 3] = rand.Next(-2, 0); //Скорость по х
  80.                 if (rand.Next(0, 2) == 1) net[i, 4] = rand.Next(1,3); else net[i, 4] = rand.Next(-2, 0);  //Скорость по у
  81.             }
  82.         }
  83.  
  84.          private void updatenet() //Изменение переменных
  85.         {
  86.             for (int i = 0; i < netCount - 1; i++)  // 0-x 1-y 2-visible 3-speedx 4-speedy
  87.             {
  88.                 net[i, 0] = net[i, 0] + net[i, 3];
  89.                 net[i, 1] = net[i, 1] + net[i, 4];
  90.                     if (net[i, 0] > CanvasMain.Width || net[i, 0] < 0 || net[i, 1] > CanvasMain.Height || net[i, 1] < 0) //Если точка ушла за экран
  91.                     {
  92.                     net[i, 0] = rand.Next(0, Convert.ToInt32(CanvasMain.Width));  //
  93.                     net[i, 1] = rand.Next(0, Convert.ToInt32(CanvasMain.Height)); //Появление точки
  94.                 }
  95.             }
  96.             draw(); //Отрисовка
  97.         }
  98.  
  99.         private void timer(int swit) //Активация/Деактивация таймера
  100.         {
  101.  
  102.             dispatcherTimer.Interval = interv;
  103.             if (swit == 1) dispatcherTimer.Start();
  104.             else dispatcherTimer.Stop();
  105.         }
  106.  
  107.         public void dispatcherTimer_Tick(object sender, EventArgs e) //Таймер
  108.         {
  109.             updatenet(); //Изминение переменных
  110.  
  111.         }
  112.  
  113.         private void Window_Loaded(object sender, RoutedEventArgs e) // Загрузска окна
  114.         {
  115.             dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); //Не ебу что это работает не трож, что то связаное с таймером
  116.            
  117.         }
  118.  
  119.         private void Window_KeyDown(object sender, KeyEventArgs e) // Нажатие клавишы
  120.         {
  121.  
  122.             switch (e.Key)
  123.             {
  124.                 case Key.F:
  125.                     startnet(); //Создание переменных
  126.                     timer(1);   //Активация таймера
  127.                     break;
  128.                 case Key.S:
  129.                     timer(0); //Деактивация таймера
  130.                     break;
  131.                 case Key.G:   //Активация таймера
  132.                     timer(1);
  133.                     break;
  134.  
  135.             }
  136.         }
  137.  
  138.         private void Window_SizeChanged(object sender, SizeChangedEventArgs e) //Если окно изменило размер
  139.         {
  140.             CanvasMain.Width = this.Width;   //
  141.             CanvasMain.Height = this.Height; //То размер Канваса = Окну
  142.         }
  143.     }
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement