Вывод на консоль цепочек падающих символов (как в фильме Матрица) - C#

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

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

Приветствую всех форумчан! Дано: нуб (т.е. Я) Нубу дано задание:

Создайте программу, которая будет выводить на экран цепочки падающих символов. Длина каждой цепочки задается случайно. Первый символ цепочки – белый, второй символ – светло-зеленый, остальные символы темно-зеленые. Во время падения цепочки, на каждом шаге, все символы меняют свое значение. Дойдя до конца, цепочка исчезает и сверху формируется новая цепочка.

Что было задумано - обьявить класс FallenString в задачу которого входило бы создание и прорисовка одной строки, в Main-е создать десяток экземпляров класса FallenString, потом создать поток и повесить медаль на грудь за успешно выполненное задание. Но лыжи никуда не поехали)) FallenString.cs
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  6. namespace Matrix
  7. {
  8. class FallenString
  9. {
  10. private int stringLength;
  11. private int positionX; // координата х начала падающей строки
  12. private int positionY; // координата y
  13. public int StringLength
  14. {
  15. get { return this.stringLength; }
  16. }
  17. public int PositionX
  18. {
  19. get { return positionX; }
  20. }
  21. public int PositionY
  22. {
  23. get { return positionY; }
  24. }
  25. public void DrawString() // пошаговое отображние строки начиная с координат (positionX, positionY) с изменением символов
  26. {
  27. Random rnd = new Random();
  28. for (int i = 0; i < this.stringLength; i++)
  29. {
  30. for (int j = 0; j < i + 1; j++)
  31. {
  32. SetSymbolColor(i, j);
  33. Console.SetCursorPosition(this.positionX, this.positionY + j);
  34. Console.Write("{0}", Convert.ToChar(rnd.Next(100, 126)));
  35. Thread.Sleep(rnd.Next(500));
  36. }
  37. }
  38. }
  39. public void SetSymbolColor(int val1, int val2)
  40. {
  41. if (val2 == val1)
  42. Console.ForegroundColor = ConsoleColor.White;
  43. else if (val2 == val1 - 1)
  44. Console.ForegroundColor = ConsoleColor.Green;
  45. else
  46. Console.ForegroundColor = ConsoleColor.DarkGreen;
  47. }
  48. // конструктор
  49. public FallenString(int val1, int val2)
  50. {
  51. Random rnd = new Random();
  52. this.stringLength = rnd.Next(10, 20);
  53. this.positionX = val1;
  54. this.positionY = val2;
  55. }
  56. }
  57. }
Program.cs
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  6. namespace Matrix
  7. {
  8. class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. Random rnd = new Random();
  13. FallenString str = new FallenString(rnd.Next(0, Console.WindowWidth), rnd.Next(0, Console.WindowHeight));
  14. ThreadStart write = new ThreadStart(str.DrawString);
  15. Thread thread = new Thread(write);
  16. thread.Start();
  17. Console.ReadKey();
  18. }
  19. }
  20. }
Одну строку вроде с горем пополам отображает (надо бы сделать ещё проверку дошла ли цепочка до конца экрана или нет, но это не главное). Главный вопрос -

как получить в консоли несколько "падающих строк"?

Заранее большое спасибо за помощь!

Решение задачи: «Вывод на консоль цепочек падающих символов (как в фильме Матрица)»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  6.  
  7. namespace Matras
  8. {
  9.  
  10.  
  11.     class MyClass
  12.     {
  13.  
  14.         private object locker = new object();
  15.  
  16.  
  17.         public bool[] kaplia = new bool[10]; //Console.WindowWidth
  18.         public int[] dlinaKapli = new int[10];
  19.         public int[] ostalos = new int[10];
  20.         public char[] simBol = new char[] {'Q','W','E','R','T','Y','U','I','O','P','A','S','D','F','G',
  21.                                            'H','J','K','L','Z','X','C','V','B','N','M','1','2','3','4',
  22.                                            '5','6','7','8','9','0','Й','Ц','У','К','Е','Н','Г','Ш','Щ',
  23.                                            'З','Х','Ъ','Ф','Ы','В','А','П','Р','О','Л','Д','Ж','Э','Я',
  24.                                            'Ч','С','М','И','Т','Ь','Б','Ю','№','@','#','%','$','&','?'};
  25.  
  26.         private void NextLine()
  27.         {
  28.             if (Console.CursorLeft == 10)
  29.             {
  30.                 Console.WriteLine("");
  31.                 //Thread.Sleep(500);
  32.  
  33.             }
  34.         }
  35.  
  36.  
  37.  
  38.  
  39.         public void Potok(object x)
  40.         {
  41.  
  42.             Random kap = new Random();
  43.             Random dlina = new Random();
  44.             Random c = new Random();
  45.  
  46.             while (true)
  47.             {
  48.  
  49.                 lock (locker)
  50.                 {
  51.                     if (this.kaplia[(int)x] == false)
  52.                     {
  53.  
  54.                         if (kap.Next(0, 100) < 10)
  55.                        
  56.                        
  57.                         {
  58.                             this.kaplia[(int)x] = true;
  59.                             this.dlinaKapli[(int)x] = dlina.Next(3, 10);
  60.                             this.ostalos[(int)x] = dlinaKapli[(int)x];
  61.                             Console.ForegroundColor = ConsoleColor.White;
  62.                             Console.Write((int)x);//simBol[c.Next(0, 59)]+
  63.                             Console.ForegroundColor = ConsoleColor.Red;
  64.                             this.ostalos[(int)x] = this.ostalos[(int)x] - 1;
  65.                             NextLine();
  66.                         }
  67.                         else
  68.                         {
  69.                             Console.Write(" ");
  70.                             NextLine();
  71.                         }
  72.  
  73.                     }
  74.                     else
  75.                     {
  76.  
  77.                         if (this.dlinaKapli[(int)x] - this.ostalos[(int)x] == 1)  //(true)
  78.                         {
  79.  
  80.                             Console.ForegroundColor = ConsoleColor.Green;
  81.                             Console.Write((int)x);
  82.                             Console.ForegroundColor = ConsoleColor.Red;
  83.                             this.ostalos[(int)x] = this.ostalos[(int)x] - 1;
  84.  
  85.                             NextLine();
  86.                         }
  87.                         else
  88.                         {
  89.  
  90.                             Console.ForegroundColor = ConsoleColor.DarkGreen;
  91.                             Console.Write((int)x);
  92.                             Console.ForegroundColor = ConsoleColor.Red;
  93.                             this.ostalos[(int)x] = this.ostalos[(int)x] - 1;
  94.  
  95.                             this.kaplia[(int)x] = (this.ostalos[(int)x] == 0) ? false : true;
  96.                             NextLine();
  97.                         }
  98.  
  99.                     }
  100.  
  101.  
  102.  
  103.                 }
  104.  
  105.             }
  106.         }
  107.     }
  108.  
  109.  
  110.  
  111.     class Program
  112.     {
  113.         static void Main()
  114.         {
  115.             MyClass instance = new MyClass();
  116.  
  117.             Thread thread;
  118.            
  119.  
  120.             for (int i = 0; i < 10 - 1; i++)
  121.             {
  122.                 thread = new Thread(new ParameterizedThreadStart(instance.Potok));
  123.                 thread.Start(i);
  124.             }
  125.  
  126.            
  127.             Console.ReadKey();
  128.  
  129.         }
  130.     }
  131. }

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


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

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

11   голосов , оценка 4.091 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы