Ejemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="screen"></param>
        /// <param name="previousScreen"></param>
        public static void DrawDifference(Defs.Blocks[,] screen, Defs.Blocks[,] previousScreen)
        {
            var defaultForegroundColor = Console.ForegroundColor;

            for (int y = 0; y < screen.GetLength(0); ++y)
            {
                for (int x = 0, max = screen.GetLength(1); x < max; ++x)
                {
                    Defs.Blocks block      = screen[y, x];
                    Defs.Blocks drawnBlock = previousScreen[y, x];
                    if (drawnBlock == block)
                    {
                        continue;
                    }

                    Console.CursorLeft      = x * 2;
                    Console.CursorTop       = y;
                    Console.ForegroundColor = ColorTable[block];
                    System.Console.Write("{0}", BlockTable[block]);
                }
            }
            Console.CursorLeft      = 0;
            Console.CursorTop       = 0;
            Console.ForegroundColor = defaultForegroundColor;
        }
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public static Defs.Blocks[,] GetEmptyBlocks()
        {
            Defs.Blocks o = Defs.Blocks.EmptyBlock;

            return(new Defs.Blocks[, ] {
                { o, o, o, o },
                { o, o, o, o },
                { o, o, o, o },
                { o, o, o, o },
            });
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="target"></param>
        /// <param name="src"></param>
        /// <param name="dest"></param>
        /// <returns></returns>
        public static Defs.Blocks[,] ReplaceBlock(Defs.Blocks[,] target, Defs.Blocks src, Defs.Blocks dest)
        {
            var copied = (Defs.Blocks[, ])target.Clone();

            for (int y = 0; y < copied.GetLength(0); ++y)
            {
                for (int x = 0, max = copied.GetLength(1); x < max; ++x)
                {
                    copied[y, x] = (copied[y, x] == src) ? dest : copied[y, x];
                }
            }
            return(copied);
        }
        public Game()
        {
            Screen         = new Defs.Blocks[32, 32];
            PreviousScreen = new Defs.Blocks[32, 32];
            Field          = new Field(10, 26);

            RandomBlocksList = new List <Defs.Blocks[, ]>();
            NextBlocks       = GetRandomBlocks();
            MergeToScreen(NextBlocks, 1, 1);
            HoldBlocks = null;
            MergeToScreen(Blocks.ReplaceBlock(Blocks.GetEmptyBlocks(), Defs.Blocks.EmptyBlock, Defs.Blocks.EmptyField), 1, 6);
            MergeToScreen(Field.FieldBlocks, 6, 1, FieldScreenOffsetY);
        }
Ejemplo n.º 5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="block"></param>
        /// <param name="leftPadding"></param>
        public static void Draw(Defs.Blocks[,] screen)
        {
            var defaultForegroundColor = Console.ForegroundColor;

            for (int y = 0; y < screen.GetLength(0); ++y)
            {
                for (int x = 0, max = screen.GetLength(1); x < max; ++x)
                {
                    Defs.Blocks block = screen[y, x];
                    Console.ForegroundColor = ColorTable[block];
                    System.Console.Write("{0}", BlockTable[block]);
                }
                System.Console.WriteLine();
            }
            Console.ForegroundColor = defaultForegroundColor;
        }
Ejemplo n.º 6
0
        /// <summary>
        ///
        /// </summary>
        public Field(int width, int height)
        {
            Width  = width;
            Height = height;

            FieldBlocks = new Defs.Blocks[Height, Width];
            for (int y = 0; y < FieldBlocks.GetLength(0); ++y)
            {
                for (int x = 0, max = FieldBlocks.GetLength(1); x < max; ++x)
                {
                    FieldBlocks[y, x] = Defs.Blocks.EmptyField;
                }
            }

            BlocksList = new List <Defs.Blocks[, ]>();
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        public static Defs.Blocks[,] GetBlocks(Types type)
        {
            Defs.Blocks i = Defs.Blocks.Block_0;
            Defs.Blocks o = Defs.Blocks.EmptyBlock;
            switch (type)
            {
            case Types.I:
                i = Defs.Blocks.Block_0;
                return(new Defs.Blocks[, ] {
                    { o, o, o, o },
                    { o, o, o, o },
                    { i, i, i, i },
                    { o, o, o, o },
                });

            case Types.O:
                i = Defs.Blocks.Block_1;
                return(new Defs.Blocks[, ] {
                    { o, o, o, o },
                    { o, i, i, o },
                    { o, i, i, o },
                    { o, o, o, o },
                });

            case Types.T:
                i = Defs.Blocks.Block_2;
                return(new Defs.Blocks[, ] {
                    { o, o, o, o },
                    { i, i, i, o },
                    { o, i, o, o },
                    { o, o, o, o },
                });

            case Types.J:
                i = Defs.Blocks.Block_3;
                return(new Defs.Blocks[, ] {
                    { o, o, o, o },
                    { i, o, o, o },
                    { i, i, i, o },
                    { o, o, o, o },
                });

            case Types.L:
                i = Defs.Blocks.Block_4;
                return(new Defs.Blocks[, ] {
                    { o, o, o, o },
                    { o, o, i, o },
                    { i, i, i, o },
                    { o, o, o, o },
                });

            case Types.S:
                i = Defs.Blocks.Block_5;
                return(new Defs.Blocks[, ] {
                    { o, o, o, o },
                    { o, i, i, o },
                    { i, i, o, o },
                    { o, o, o, o },
                });

            case Types.Z:
                i = Defs.Blocks.Block_6;
                return(new Defs.Blocks[, ] {
                    { o, o, o, o },
                    { i, i, o, o },
                    { o, i, i, o },
                    { o, o, o, o },
                });

            case Types.V:
                i = Defs.Blocks.Block_7;
                return(new Defs.Blocks[, ] {
                    { o, o, o, o },
                    { o, i, o, o },
                    { o, i, i, o },
                    { o, o, o, o },
                });
            }
            return(null);
        }