/// <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); }
/// <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; }
/// <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); }