Kyrexar

block

Jan 20th, 2021 (edited)
503
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading.Tasks;
  4.  
  5. namespace Block
  6. {
  7.     public class Program
  8.     {
  9.         public static int resV = 20;
  10.         public static int resH = 100;
  11.  
  12.         static void Main(string[] args)
  13.         {
  14.            
  15.             char[,] area = new char[resV, resH];
  16.             bool[,] lleno = new bool[resV, resH];
  17.  
  18.             List<Bloque> bloques = new List<Bloque>();
  19.  
  20.             bloques.Add(new Bloque());
  21.  
  22.             bool exit = false;
  23.             bool der = false;
  24.             bool izq = false;
  25.  
  26.             Task.Factory.StartNew(() =>
  27.             {
  28.                 ConsoleKey ck = ConsoleKey.Spacebar;
  29.                 while (true)
  30.                 {
  31.                     izq = false;
  32.                     der = false;
  33.                     if (ck == ConsoleKey.P) exit = true;
  34.                     if (ck == ConsoleKey.RightArrow) der = true;
  35.                     if (ck == ConsoleKey.LeftArrow) izq = true;
  36.                    
  37.                     ck = Console.ReadKey(true).Key;
  38.                 }
  39.             });
  40.  
  41.             while (!exit)
  42.             {
  43.                 for (int i = 0; i < resV; i++)
  44.                     for (int j = 0; j < resH; j++)
  45.                         area[i, j] = ' ';
  46.  
  47.                 Bloque ultimoB = bloques[bloques.Count - 1];
  48.  
  49.                 if (ultimoB.Fin)
  50.                 {
  51.                     bloques.Add(new Bloque());
  52.                 }
  53.                 else
  54.                 {
  55.                     for (int i = 0; i < bloques.Count - 1; i++)
  56.                     {
  57.                         if (ultimoB.Colision(bloques[i])) ultimoB.Fin = true;
  58.                     }
  59.                     if (!ultimoB.Fin)
  60.                     {
  61.                         ultimoB.Bajar();
  62.  
  63.                         if (izq)
  64.                         {
  65.                             ultimoB.Izq();
  66.                             izq = false;
  67.                         }
  68.                         else if (der)
  69.                         {
  70.                             ultimoB.Der();
  71.                             der = false;
  72.                         }
  73.                     }/*
  74.                     else // Se para el bloque
  75.                     {
  76.                         lleno[ultimoB.Y,ultimoB.X] = true;
  77.  
  78.                         int eliminar = -1;
  79.                         for(int fila = 0; fila < resV; fila++)
  80.                         {
  81.                             if(lleno[fila,0]&& lleno[fila, 1] && lleno[fila, 2] && lleno[fila, 3] && lleno[fila, 4] &&
  82.                                 lleno[fila, 5] && lleno[fila, 6] && lleno[fila, 7] && lleno[fila, 8] && lleno[fila, 9])
  83.                             {
  84.                                 eliminar = fila;
  85.                             }
  86.                         }
  87.  
  88.                         if (eliminar>-1)
  89.                         {
  90.                             foreach(Bloque b in bloques)
  91.                             {
  92.                                 if (b.X == 19)
  93.                                 {
  94.                                     bloques.Remove(b);
  95.                                     b.Dispose();
  96.                                 }
  97.                             }
  98.                         }
  99.                     }*/
  100.                 }
  101.  
  102.                 foreach (Bloque b in bloques)
  103.                 {
  104.                     area[b.Y, b.X] = '█';
  105.                 }
  106.  
  107.                 string sc = "";
  108.                 for (int i = 0; i < resV; i++)
  109.                 {
  110.                     for (int j = 0; j < resH; j++)
  111.                     {
  112.                         sc += area[i, j];
  113.                     }
  114.                     sc += "\n";
  115.                 }
  116.  
  117.                 Console.SetCursorPosition(0, 0);
  118.                 Console.WriteLine(sc);
  119.                 for(int i=0; i<resH; i++)
  120.                 {
  121.                     Console.Write("-");
  122.                 }
  123.  
  124.                 //System.Threading.Thread.Sleep(1);
  125.             }
  126.         }
  127.     }
  128.  
  129.     class Bloque : IDisposable
  130.     {
  131.         public int X { get; set; }
  132.         public int Y { get; set; }
  133.         public bool Fin { get; set; }
  134.  
  135.         public Bloque()
  136.         {
  137.             Random rnd = new Random();
  138.             X = rnd.Next(Program.resH);
  139.             Y = 0;
  140.  
  141.             Fin = false;
  142.         }
  143.  
  144.         public void Bajar()
  145.         {
  146.             if (Y == Program.resV-1) Fin = true;
  147.             else Y += 1;
  148.         }
  149.  
  150.         public void Der()
  151.         {
  152.             if (X< Program.resH-1) X += 1;
  153.         }
  154.  
  155.         public void Izq()
  156.         {
  157.             if (X>0) X -= 1;
  158.         }
  159.  
  160.         public bool Colision(Bloque otro)
  161.         {
  162.             return otro.X == this.X && otro.Y == this.Y + 1;
  163.         }
  164.  
  165.         public void Dispose()
  166.         {
  167.  
  168.         }
  169.     }
  170. }
  171.  
RAW Paste Data