using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CoposLocos { class Program { public static Random rand = new Random(); public static List nevada = new List(); public static List columnasdisponibles = new List(); static void Main(string[] args) { bool copocreado = false; DateTime start; DateTime now; TimeSpan duracion = new TimeSpan(); ConsoleKey k = ConsoleKey.A; for (int i=0; i < 79; i++) { columnasdisponibles.Add(i); } Console.Title = "Copos Locos (presionar enter para crear copos)"; Console.BackgroundColor = ConsoleColor.Black; start = DateTime.Now; while (k != ConsoleKey.Escape) { if (copocreado == false) { if (Console.KeyAvailable) { k = (Console.ReadKey()).Key; if (k == ConsoleKey.Enter) { if (columnasdisponibles.Count > 0) { nevada.Add(new Copo()); copocreado = true; } else break; } } } now = DateTime.Now; duracion = now - start; if (duracion.Milliseconds > 200) { Program.dibujar(); start = DateTime.Now; copocreado = false; } } } static public void dardebajacolumna(int columna) { foreach (int i in columnasdisponibles) { if (i == columna) { columnasdisponibles.Remove(i); break; } } } static private void dibujar() { Program.limpiar(); foreach (Copo copo in nevada) { copo.bajar(); Console.SetCursorPosition(copo.x, copo.y); Console.Write((char)1); } } static private void limpiar() { foreach (Copo copo in nevada) { if(copo.depositado == false) { Console.SetCursorPosition(copo.x, copo.y); Console.Write(" "); } } } } class Copo { public int y; public int x; public bool depositado; public Copo() { y = 1; x = Program.columnasdisponibles[Program.rand.Next(Program.columnasdisponibles.Count())]; depositado = false; } public void bajar() { if (this.depositado == false) { bool obstaculo = false; foreach (Copo copo in Program.nevada) { if (copo.x == this.x) if (copo.y == this.y + 1) if (copo.depositado) { this.depositado = true; if (this.y == 1) { Program.dardebajacolumna(this.x); } obstaculo = true; break; } else { Program.nevada.Add(this); Program.nevada.Remove(this); obstaculo = true; break; } } if (obstaculo == false) { this.y++; if (this.y == 24) { this.depositado = true; } } } } } }