diff --git a/testexetrisathlon/Program.cs b/testexetrisathlon/Program.cs index 24bf12f..0c9ee9d 100644 --- a/testexetrisathlon/Program.cs +++ b/testexetrisathlon/Program.cs @@ -2,8 +2,8 @@ using System.Linq; using System.Diagnostics; using System.Media; -using static System.Console; using System.Reflection; +using static System.Console; //┌─┐ //│ │ @@ -73,113 +73,122 @@ namespace testexetrisathlon { bool playing = true; GameState state = GameState.menu; - while (playing) + try { - switch (state) + while (playing) { - case GameState.menu: - Clear(); - gameOver.Stop(); - intro.PlayLooping(); - SetCursorPosition(0, 1); - Write( - " ▀▀▀██████▄▄▄\r\n" + - " ▀▀▀████▄\r\n" + - " ▄███████▀ ▀███▄\r\n" + - " ▄███████▀ ▀███▄\r\n" + - " ▄████████ ███▄\r\n" + - " ██████████▄ ███▌\r\n" + - " ▀█████▀ ▀███▄ ▐███\r\n" + - " ▀█▀ ▀███▄ ▐███\r\n" + - " ▀███▄ ███▌\r\n" + - " ▄██▄ ▀███▄ ▐███\r\n" + - " ▄██████▄ ▀███▄███\r\n" + - " █████▀▀████▄▄ ▄█████\r\n" + - " ████▀ ▀▀█████▄▄▄▄█████████▄\r\n" + - " ▀▀ ▀▀██████▀▀ ▀▀██\r\n\r\n" + + switch (state) + { + case GameState.menu: + Clear(); + gameOver.Stop(); + intro.PlayLooping(); + SetCursorPosition(0, 1); + Write( + " ▀▀▀██████▄▄▄\r\n" + + " ▀▀▀████▄\r\n" + + " ▄███████▀ ▀███▄\r\n" + + " ▄███████▀ ▀███▄\r\n" + + " ▄████████ ███▄\r\n" + + " ██████████▄ ███▌\r\n" + + " ▀█████▀ ▀███▄ ▐███\r\n" + + " ▀█▀ ▀███▄ ▐███\r\n" + + " ▀███▄ ███▌\r\n" + + " ▄██▄ ▀███▄ ▐███\r\n" + + " ▄██████▄ ▀███▄███\r\n" + + " █████▀▀████▄▄ ▄█████\r\n" + + " ████▀ ▀▀█████▄▄▄▄█████████▄\r\n" + + " ▀▀ ▀▀██████▀▀ ▀▀██\r\n\r\n" + - " testexetrisathlon v." + assembly.GetName().Version.ToString()); - SetCursorPosition(10, 18); - WriteLine("Controls: Space"); - SetCursorPosition(11, 19); - WriteLine("Up, Down, Right"); - SetCursorPosition(11, 20); - WriteLine("Left"); - SetCursorPosition(10, 22); - WriteLine("Press s to start"); - SetCursorPosition(10, 23); - WriteLine("Press x to exit"); - SetCursorPosition(0, 26); - WriteLine("Icon made by Freepik from www.flaticon.com"); - string tmp = ReadKey(true).KeyChar.ToString().ToLower(); - switch (tmp) - { - case "s": - intro.Stop(); - state = GameState.game; + " testexetrisathlon v." + assembly.GetName().Version.ToString()); + SetCursorPosition(10, 18); + WriteLine("Controls: Space"); + SetCursorPosition(11, 19); + WriteLine("Up, Down, Right"); + SetCursorPosition(11, 20); + WriteLine("Left"); + SetCursorPosition(10, 22); + WriteLine("Press s to start"); + SetCursorPosition(10, 23); + WriteLine("Press x to exit"); + SetCursorPosition(0, 26); + WriteLine("Icon made by Freepik from www.flaticon.com"); + string tmp = ReadKey(true).KeyChar.ToString().ToLower(); + switch (tmp) + { + case "s": + intro.Stop(); + state = GameState.game; + Clear(); + DrawBorder(); + break; + case "x": + state = GameState.exit; + break; + } + break; + case GameState.game: + inGame.PlayLooping(); + dropTimer.Start(); + SetCursorPosition(25, 0); + WriteLine("Level " + level); + SetCursorPosition(25, 1); + WriteLine("Score " + score); + SetCursorPosition(25, 2); + WriteLine("LinesCleared " + linesCleared); + nexttet = new Tetrominoe(); + tet = nexttet; + tet.Spawn(); + nexttet = new Tetrominoe(); + Update(); + inGame.Stop(); + state = GameState.gameOver; + break; + case GameState.gameOver: + gameOver.PlayLooping(); + string input = ""; + while ((input != "y") && (input != "n")) + { Clear(); DrawBorder(); - break; - case "x": - state = GameState.exit; - break; - } - break; - case GameState.game: - inGame.PlayLooping(); - dropTimer.Start(); - SetCursorPosition(25, 0); - WriteLine("Level " + level); - SetCursorPosition(25, 1); - WriteLine("Score " + score); - SetCursorPosition(25, 2); - WriteLine("LinesCleared " + linesCleared); - nexttet = new Tetrominoe(); - tet = nexttet; - tet.Spawn(); - nexttet = new Tetrominoe(); - Update(); - inGame.Stop(); - state = GameState.gameOver; - break; - case GameState.gameOver: - gameOver.PlayLooping(); - string input = ""; - while ((input != "y") && (input != "n")) - { + Draw(); + SetCursorPosition(0, 0); + WriteLine("┌───────────────────┐"); + WriteLine("│ Game Over │"); + WriteLine("│ Replay? (Y/N) │"); + WriteLine("├───────────────────┤"); + input = ReadKey().KeyChar.ToString().ToLower(); + } + grid = new int[23, 10]; + droppedtetrominoeLocationGrid = new int[23, 10]; + dropTimer = new Stopwatch(); + inputTimer = new Stopwatch(); + dropRate = 300; + isDropped = false; + isKeyPressed = false; + linesCleared = 0; + score = 0; + level = 1; + GC.Collect(); Clear(); DrawBorder(); - Draw(); - SetCursorPosition(0, 0); - WriteLine("┌───────────────────┐"); - WriteLine("│ Game Over │"); - WriteLine("│ Replay? (Y/N) │"); - WriteLine("├───────────────────┤"); - input = ReadKey().KeyChar.ToString().ToLower(); - } - grid = new int[23, 10]; - droppedtetrominoeLocationGrid = new int[23, 10]; - dropTimer = new Stopwatch(); - inputTimer = new Stopwatch(); - dropRate = 300; - isDropped = false; - isKeyPressed = false; - linesCleared = 0; - score = 0; - level = 1; - GC.Collect(); - Clear(); - DrawBorder(); - if (input == "y") - state = GameState.game; - else - state = GameState.menu; - break; - default: - playing = false; - break; + if (input == "y") + state = GameState.game; + else + state = GameState.menu; + break; + default: + playing = false; + break; + } } } + finally + { + intro.Dispose(); + inGame.Dispose(); + gameOver.Dispose(); + } } private static void Update() { @@ -253,9 +262,9 @@ namespace testexetrisathlon Draw(); } } - score += (int)Math.Round(Math.Sqrt(Math.Max(combo * 50 - 50, 0)) * 5); + score += (int)Math.Round(Math.Sqrt(Math.Max((combo * 50) - 50, 0)) * 5); level = (int)Math.Round(Math.Sqrt(score * 0.01)) + 1; - dropRate = 300 - 22 * level; + dropRate = 300 - (22 * level); } private static void Input() { @@ -278,7 +287,7 @@ namespace testexetrisathlon if (key.Key == ConsoleKey.DownArrow & isKeyPressed) tet.Drop(); if (key.Key == ConsoleKey.UpArrow & isKeyPressed) - for (; tet.isSomethingBelow() != true;) + for (; tet.isSomethingBelow!= true;) tet.Drop(); if (key.Key == ConsoleKey.Spacebar & isKeyPressed) { @@ -292,10 +301,10 @@ namespace testexetrisathlon { for (int j = 0; j < 10; j++) { - SetCursorPosition(1 + 2 * j, i); + SetCursorPosition((2 * j) + 1, i); if (grid[i, j] == 1 | droppedtetrominoeLocationGrid[i, j] == 1) { - SetCursorPosition(1 + 2 * j, i); + SetCursorPosition((2 * j) + 1, i); Write(sqr); } else diff --git a/testexetrisathlon/Tetrominoe.cs b/testexetrisathlon/Tetrominoe.cs index ed678bd..ce47322 100644 --- a/testexetrisathlon/Tetrominoe.cs +++ b/testexetrisathlon/Tetrominoe.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Security; using static System.Console; #pragma warning disable IDE1006 namespace testexetrisathlon @@ -32,11 +33,11 @@ namespace testexetrisathlon public Tetrominoe() { shape = tetrominoes[Program.rnd.Next(0, tetrominoes.Count)]; - for (int i = 23; i < 33; ++i) + for (int i = 0; i < 10; i++) { - for (int j = 3; j < 10; j++) + for (int j = 0; j < 7; j++) { - SetCursorPosition(i, j); + SetCursorPosition(i + 23, j + 3); Write(" "); } } @@ -47,7 +48,7 @@ namespace testexetrisathlon { if (shape[i, j] == 1) { - SetCursorPosition(((10 - shape.GetLength(1)) / 2 + j) * 2 + 20, i + 5); + SetCursorPosition(30 - shape.GetLength(1) + (2 * j), i + 5); Write(Program.sqr); } } @@ -61,7 +62,7 @@ namespace testexetrisathlon { if (shape[i, j] == 1) { - location.Add(new int[] { i, (10 - shape.GetLength(1)) / 2 + j }); + location.Add(new int[] { i, 5 - (shape.GetLength(1) / 2) + j }); } } } @@ -69,21 +70,15 @@ namespace testexetrisathlon } public void Drop() { - if (isSomethingBelow()) + if (isSomethingBelow) { - for (int i = 0; i < 4; i++) - { - Program.droppedtetrominoeLocationGrid[location[i][0], location[i][1]] = 1; - } + location.ForEach(s => Program.droppedtetrominoeLocationGrid[s[0], s[1]] = 1); Program.isDropped = true; Beep(800, 200); } else { - for (int numCount = 0; numCount < 4; numCount++) - { - location[numCount][0] += 1; - } + location.ForEach(s => s[0]++); Update(); } } @@ -96,77 +91,33 @@ namespace testexetrisathlon { if (shape[i, j] == 1) { - templocation.Add(new int[] { i, (10 - shape.GetLength(1)) / 2 + j }); + templocation.Add(new int[] { i, ((10 - shape.GetLength(1)) / 2) + j }); } } } - if (shape == tetrominoes[0]) - { - for (int i = 0; i < location.Count; i++) - { - templocation[i] = TransformMatrix(location[i], location[2]); - } - } - else if (shape == tetrominoes[3]) - { - for (int i = 0; i < location.Count; i++) - { - templocation[i] = TransformMatrix(location[i], location[3]); - } - } - else if (shape == tetrominoes[1]) + if (shape == tetrominoes[1]) return; - else - { - for (int i = 0; i < location.Count; i++) - { - templocation[i] = TransformMatrix(location[i], location[2]); - } - } + for (int i = 0; i < location.Count; i++) + templocation[i] = TransformMatrix(location[i], location[(shape == tetrominoes[3]) ? 3 : 2]); for (int count = 0; isOverlayLeft(templocation) != false | isOverlayRight(templocation) != false | isOverlayBelow(templocation) != false; count++) { if (isOverlayLeft(templocation) == true) - { for (int i = 0; i < location.Count; i++) - { - templocation[i][1] += 1; - } - } + templocation[i][1]++; if (isOverlayRight(templocation) == true) - { for (int i = 0; i < location.Count; i++) - { - templocation[i][1] -= 1; - } - } + templocation[i][1]--; if (isOverlayBelow(templocation) == true) - { for (int i = 0; i < location.Count; i++) - { - templocation[i][0] -= 1; - } - } + templocation[i][0]--; if (count == 3) - { return; - } } location = templocation; } - public bool notFalse(bool? inp) => (inp ?? true); - public int[] TransformMatrix(int[] coord, int[] axis) => new int[] { axis[0] - axis[1] + coord[1], axis[0] + axis[1] - coord[0] }; - public bool isSomethingBelow() - { - for (int i = 0; i < 4; i++) - { - if (location[i][0] + 1 >= 23) - return true; - if (location[i][0] + 1 < 23 & Program.droppedtetrominoeLocationGrid[location[i][0] + 1, location[i][1]] == 1) - return true; - } - return false; - } - public bool? isOverlayBelow(List location) + public static int[] TransformMatrix(int[] coord, int[] axis) => new int[] { axis[0] - axis[1] + coord[1], axis[0] + axis[1] - coord[0] }; + public bool isSomethingBelow => location.Where(s => s[0] + 1 >= 23 || s[0] + 1 < 23 & Program.droppedtetrominoeLocationGrid[s[0] + 1, s[1]] == 1).Count() > 0; + public static bool? isOverlayBelow(List location) { List ycoords = new List(); for (int i = 0; i < 4; i++) @@ -177,42 +128,17 @@ namespace testexetrisathlon if (location[i][0] < 0 | location[i][1] < 0 | location[i][1] > 9) return null; } - for (int i = 0; i < 4; i++) - { - if (ycoords.Max() - ycoords.Min() == 3) - { - if ((ycoords.Max() == location[i][0] | ycoords.Max() - 1 == location[i][0]) & (Program.droppedtetrominoeLocationGrid[location[i][0], location[i][1]] == 1)) - { - return true; - } - } - else - { - if ((ycoords.Max() == location[i][0]) & (Program.droppedtetrominoeLocationGrid[location[i][0], location[i][1]] == 1)) - { - return true; - } - } - } - return false; + return location.Where(s => (ycoords.Max() - ycoords.Min() == 3) ? + ((ycoords.Max() == s[0] | ycoords.Max() - 1 == s[0]) & (Program.droppedtetrominoeLocationGrid[s[0], s[1]] == 1)) : + ((ycoords.Max() == s[0]) & (Program.droppedtetrominoeLocationGrid[s[0], s[1]] == 1))).Count() > 0; } - public bool isSomethingLeft() - { - for (int i = 0; i < 4; i++) - { - if (location[i][1] == 0) - return true; - else if (Program.droppedtetrominoeLocationGrid[location[i][0], location[i][1] - 1] == 1) - return true; - } - return false; - } - public bool? isOverlayLeft(List location) + public bool isSomethingLeft() => location.Where(s => s[1] == 0 || Program.droppedtetrominoeLocationGrid[s[0], s[1] - 1] == 1).Count() > 0; + public static bool? isOverlayLeft(List location) { List xcoords = new List(); + xcoords.AddRange(location.Select(s => s[1])); for (int i = 0; i < 4; i++) { - xcoords.Add(location[i][1]); if (location[i][1] < 0) return true; if (location[i][1] > 9) @@ -220,48 +146,17 @@ namespace testexetrisathlon if (location[i][0] >= 23 | location[i][0] < 0) return null; } - for (int i = 0; i < 4; i++) - { - if (xcoords.Max() - xcoords.Min() == 3) - { - if (xcoords.Min() == location[i][1] | xcoords.Min() + 1 == location[i][1]) - { - if (Program.droppedtetrominoeLocationGrid[location[i][0], location[i][1]] == 1) - { - return true; - } - } - } - else - { - if (xcoords.Min() == location[i][1]) - { - if (Program.droppedtetrominoeLocationGrid[location[i][0], location[i][1]] == 1) - { - return true; - } - } - } - } - return false; + return location.Where(s => (xcoords.Max() - xcoords.Min() == 3) ? + (xcoords.Min() == s[1] | xcoords.Min() + 1 == s[1] && Program.droppedtetrominoeLocationGrid[s[0], s[1]] == 1) : + (xcoords.Min() == s[1] && Program.droppedtetrominoeLocationGrid[s[0], s[1]] == 1)).Count() > 0; } - public bool isSomethingRight() - { - for (int i = 0; i < 4; i++) - { - if (location[i][1] == 9) - return true; - else if (Program.droppedtetrominoeLocationGrid[location[i][0], location[i][1] + 1] == 1) - return true; - } - return false; - } - public bool? isOverlayRight(List location) + public bool isSomethingRight() => location.Where(s => s[1] == 9 || Program.droppedtetrominoeLocationGrid[s[0], s[1] + 1] == 1).Count() > 0; + public static bool? isOverlayRight(List location) { List xcoords = new List(); + xcoords.AddRange(location.Select(s => s[1])); for (int i = 0; i < 4; i++) { - xcoords.Add(location[i][1]); if (location[i][1] > 9) return true; if (location[i][1] < 0) @@ -269,24 +164,9 @@ namespace testexetrisathlon if (location[i][0] >= 23 | location[i][0] < 0) return null; } - for (int i = 0; i < 4; i++) - { - if (xcoords.Max() - xcoords.Min() == 3) - { - if ((xcoords.Max() == location[i][1] | xcoords.Max() - 1 == location[i][1]) & Program.droppedtetrominoeLocationGrid[location[i][0], location[i][1]] == 1) - { - return true; - } - } - else - { - if (xcoords.Max() == location[i][1] & Program.droppedtetrominoeLocationGrid[location[i][0], location[i][1]] == 1) - { - return true; - } - } - } - return false; + return location.Where(s => (xcoords.Max() - xcoords.Min() == 3) ? + ((xcoords.Max() == s[1] | xcoords.Max() - 1 == s[1]) & Program.droppedtetrominoeLocationGrid[s[0], s[1]] == 1) : + (xcoords.Max() == s[1] & Program.droppedtetrominoeLocationGrid[s[0], s[1]] == 1)).Count() > 0; } public void Update() { @@ -297,10 +177,7 @@ namespace testexetrisathlon Program.grid[i, j] = 0; } } - for (int i = 0; i < 4; i++) - { - Program.grid[location[i][0], location[i][1]] = 1; - } + location.ForEach(s => Program.grid[s[0], s[1]] = 1); Program.Draw(); } } diff --git a/testexetrisathlon/app.config b/testexetrisathlon/app.config index 3e0e37c..3dbff35 100644 --- a/testexetrisathlon/app.config +++ b/testexetrisathlon/app.config @@ -1,3 +1,3 @@ - + diff --git a/testexetrisathlon/testexetrisathlon.csproj b/testexetrisathlon/testexetrisathlon.csproj index ec10c1b..63f92e8 100644 --- a/testexetrisathlon/testexetrisathlon.csproj +++ b/testexetrisathlon/testexetrisathlon.csproj @@ -7,7 +7,7 @@ Exe testexetrisathlon testexetrisathlon - v4.8 + v4.6.1