Вывод на консоль цепочек падающих символов (как в фильме Матрица) - C#
Формулировка задачи:
Приветствую всех форумчан!
Дано: нуб (т.е. Я)
Нубу дано задание:
Program.cs
Одну строку вроде с горем пополам отображает (надо бы сделать ещё проверку дошла ли цепочка до конца экрана или нет, но это не главное).
Главный вопрос -
Создайте программу, которая будет выводить на экран цепочки падающих символов. Длина каждой цепочки задается случайно. Первый символ цепочки – белый, второй символ – светло-зеленый, остальные символы темно-зеленые. Во время падения цепочки, на каждом шаге, все символы меняют свое значение. Дойдя до конца, цепочка исчезает и сверху формируется новая цепочка.
Что было задумано - обьявить класс FallenString в задачу которого входило бы создание и прорисовка одной строки, в Main-е создать десяток экземпляров класса FallenString, потом создать поток и повесить медаль на грудь за успешно выполненное задание. Но лыжи никуда не поехали)) FallenString.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace Matrix { class FallenString { private int stringLength; private int positionX; // координата х начала падающей строки private int positionY; // координата y public int StringLength { get { return this.stringLength; } } public int PositionX { get { return positionX; } } public int PositionY { get { return positionY; } } public void DrawString() // пошаговое отображние строки начиная с координат (positionX, positionY) с изменением символов { Random rnd = new Random(); for (int i = 0; i < this.stringLength; i++) { for (int j = 0; j < i + 1; j++) { SetSymbolColor(i, j); Console.SetCursorPosition(this.positionX, this.positionY + j); Console.Write("{0}", Convert.ToChar(rnd.Next(100, 126))); Thread.Sleep(rnd.Next(500)); } } } public void SetSymbolColor(int val1, int val2) { if (val2 == val1) Console.ForegroundColor = ConsoleColor.White; else if (val2 == val1 - 1) Console.ForegroundColor = ConsoleColor.Green; else Console.ForegroundColor = ConsoleColor.DarkGreen; } // конструктор public FallenString(int val1, int val2) { Random rnd = new Random(); this.stringLength = rnd.Next(10, 20); this.positionX = val1; this.positionY = val2; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace Matrix { class Program { static void Main(string[] args) { Random rnd = new Random(); FallenString str = new FallenString(rnd.Next(0, Console.WindowWidth), rnd.Next(0, Console.WindowHeight)); ThreadStart write = new ThreadStart(str.DrawString); Thread thread = new Thread(write); thread.Start(); Console.ReadKey(); } } }
как получить в консоли несколько "падающих строк"?
Заранее большое спасибо за помощь!Решение задачи: «Вывод на консоль цепочек падающих символов (как в фильме Матрица)»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace Matras { class MyClass { private object locker = new object(); public bool[] kaplia = new bool[10]; //Console.WindowWidth public int[] dlinaKapli = new int[10]; public int[] ostalos = new int[10]; public char[] simBol = new char[] {'Q','W','E','R','T','Y','U','I','O','P','A','S','D','F','G', 'H','J','K','L','Z','X','C','V','B','N','M','1','2','3','4', '5','6','7','8','9','0','Й','Ц','У','К','Е','Н','Г','Ш','Щ', 'З','Х','Ъ','Ф','Ы','В','А','П','Р','О','Л','Д','Ж','Э','Я', 'Ч','С','М','И','Т','Ь','Б','Ю','№','@','#','%','$','&','?'}; private void NextLine() { if (Console.CursorLeft == 10) { Console.WriteLine(""); //Thread.Sleep(500); } } public void Potok(object x) { Random kap = new Random(); Random dlina = new Random(); Random c = new Random(); while (true) { lock (locker) { if (this.kaplia[(int)x] == false) { if (kap.Next(0, 100) < 10) { this.kaplia[(int)x] = true; this.dlinaKapli[(int)x] = dlina.Next(3, 10); this.ostalos[(int)x] = dlinaKapli[(int)x]; Console.ForegroundColor = ConsoleColor.White; Console.Write((int)x);//simBol[c.Next(0, 59)]+ Console.ForegroundColor = ConsoleColor.Red; this.ostalos[(int)x] = this.ostalos[(int)x] - 1; NextLine(); } else { Console.Write(" "); NextLine(); } } else { if (this.dlinaKapli[(int)x] - this.ostalos[(int)x] == 1) //(true) { Console.ForegroundColor = ConsoleColor.Green; Console.Write((int)x); Console.ForegroundColor = ConsoleColor.Red; this.ostalos[(int)x] = this.ostalos[(int)x] - 1; NextLine(); } else { Console.ForegroundColor = ConsoleColor.DarkGreen; Console.Write((int)x); Console.ForegroundColor = ConsoleColor.Red; this.ostalos[(int)x] = this.ostalos[(int)x] - 1; this.kaplia[(int)x] = (this.ostalos[(int)x] == 0) ? false : true; NextLine(); } } } } } } class Program { static void Main() { MyClass instance = new MyClass(); Thread thread; for (int i = 0; i < 10 - 1; i++) { thread = new Thread(new ParameterizedThreadStart(instance.Potok)); thread.Start(i); } Console.ReadKey(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д