Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.IO;
- using System.Collections;
- namespace BraveNewWorld
- {
- class Program
- {
- static void Main(string[] args)
- {
- int playerDX = 0;
- int playerDY = 1;
- int collectCoins = 0;
- int[,] arrayOfTraps = new int[2, 4] { { 2, 1, 3, 2 }, { 5, 5, 2, 4 } };
- bool isSelectionMenuRun = true;
- Console.CursorVisible = false;
- char[,] map = ReadMap();
- DrawMap(map, out int allCoins, out int respawnX, out int respawnY);
- int playerX = respawnX;
- int playerY = respawnY;
- Console.WriteLine("\n<<<МЕНЮ ВЫБОРА>>>");
- Console.WriteLine("\n[1] - войти в режим создание карты\n[2] - играть в змейку\n[3] - Выход");
- Console.Write("Enter: ");
- while (isSelectionMenuRun)
- {
- switch (Console.ReadLine())
- {
- case "1":
- Respawn(respawnX, respawnY, ref playerX, ref playerY, map);
- EditMap(map, ref playerX, ref playerY, playerDX, playerDY, ref arrayOfTraps, ref allCoins, ref respawnX, ref respawnY);
- break;
- case "2":
- isSelectionMenuRun = IsGameRun(map, playerX, playerY, playerDX, playerDY, arrayOfTraps, collectCoins, allCoins, respawnX, respawnY);
- break;
- case "3":
- Console.Write("Выход...");
- return;
- }
- }
- }
- static bool IsGameRun(char[,] map, int playerX, int playerY, int playerDX, int playerDY, int[,] arrayOfTraps, int collectCoins, int allCoins, int respawnX, int respawnY)
- {
- Respawn(respawnX, respawnY, ref playerX, ref playerY, map);
- bool isGameStopped = false;
- while (!isGameStopped)
- {
- ConsoleKeyInfo key = Console.ReadKey(true);
- if (key.KeyChar == 'e')
- {
- return true;
- }
- else if (key.Key == ConsoleKey.UpArrow || key.Key == ConsoleKey.DownArrow || key.Key == ConsoleKey.LeftArrow || key.Key == ConsoleKey.RightArrow)
- {
- ChangeDirection(key, out playerDX, out playerDY);
- MovePlayer('V', map, ref playerX, ref playerY, playerDX, playerDY);
- CheckPosition(map, ref playerX, ref playerY, ref collectCoins, respawnX, respawnY, arrayOfTraps);
- }
- isGameStopped = IsGameOver(allCoins, collectCoins);
- System.Threading.Thread.Sleep(150);
- }
- return true;
- }
- static char[,] ReadMap()
- {
- char[,] map =
- {
- { '#','#','#','#','#','#','#','#','#'},
- { '#',' ','#','#','$','#',' ',' ','#'},
- { '#','I','#','#','@','#',' ',' ','#'},
- { '#',' ','@',' ',' ',' ','$',' ','#'},
- { '#',' ','#',' ',' ',' ',' ','$','#'},
- { '#','R','#',' ',' ','I',' ','$','#'},
- { '#','#','#','#','#','#','#','#','#'}
- };
- for (int i = 0; i < map.GetLength(0); i++)
- {
- for (int j = 0; j < map.GetLength(1); j++)
- {
- if (map[i, j] == ' ')
- {
- map[i, j] = ' ';
- }
- }
- }
- return map;
- }
- static void DrawMap(char[,] map, out int allCoins, out int respawnX, out int respawnY)
- {
- allCoins = 0;
- respawnX = 0;
- respawnY = 0;
- for (int i = 0; i < map.GetLength(0); i++)
- {
- for (int j = 0; j < map.GetLength(1); j++)
- {
- Console.Write(map[i, j]);
- if (map[i, j] == '$')
- {
- allCoins++;
- }
- else if (map[i, j] == 'R')
- {
- respawnX = i;
- respawnY = j;
- Console.SetCursorPosition(j, i);
- Console.Write(map[i, j] = ' ');
- }
- }
- Console.WriteLine();
- }
- }
- static void EditMap(char[,] map, ref int playerX, ref int playerY, int playerDX, int playerDY, ref int[,] arrayOfTraps, ref int allCoins, ref int respawnX, ref int respawnY)
- {
- bool isEditMenuRun = true;
- Console.SetCursorPosition(2, 15);
- Console.WriteLine("<<<РЕДАКТОР КАРТЫ>>>");
- Console.WriteLine("[e] - выход из редактора, [f] - выбрать символ");
- while (isEditMenuRun)
- {
- ConsoleKeyInfo key = Console.ReadKey(true);
- if (key.KeyChar == 'f')
- {
- Console.SetCursorPosition(0, 18);
- Console.WriteLine("Доступные символы:\n[#] - стена\n[$] - монетка\n[@] - ловушка\n[>] или [<] - гора, [I] - переключатель ловушки [L] - связать переключатель" +
- "\n[R] - точка возрождения");
- ConsoleKeyInfo charKey = Console.ReadKey(true);
- switch (charKey.KeyChar)
- {
- case '#':
- SetSymbol(map, '#', playerX, playerY);
- break;
- case '$':
- SetSymbol(map, '$', playerX, playerY);
- allCoins++;
- break;
- case '@':
- SetSymbol(map, '@', playerX, playerY);
- break;
- case 'I':
- SetSymbol(map, 'I', playerX, playerY);
- SetToggle(map, ref playerX, ref playerY, playerDX, playerDY, ref arrayOfTraps);
- break;
- case 'R':
- respawnX = playerX;
- respawnY = playerY;
- SetSymbol(map, ' ', playerX, playerY);
- break;
- case 'S':
- SetSymbol(map, ' ', playerX, playerY);
- break;
- }
- }
- else if (key.KeyChar == 'e')
- {
- Console.SetCursorPosition(7, 13);
- Console.Write(" ");
- break;
- }
- else if (key.Key == ConsoleKey.UpArrow || key.Key == ConsoleKey.DownArrow || key.Key == ConsoleKey.LeftArrow || key.Key == ConsoleKey.RightArrow)
- {
- ChangeDirection(key, out playerDX, out playerDY);
- MovePlayer('V', map, ref playerX, ref playerY, playerDX, playerDY);
- }
- }
- }
- static void SetToggle(char[,] map, ref int playerX, ref int playerY, int playerDX, int playerDY, ref int[,] arrayOfTraps)
- {
- int toggleX = playerX;
- int toggleY = playerY;
- bool isToggleSet = true;
- while (isToggleSet)
- {
- ConsoleKeyInfo localKey = Console.ReadKey(true);
- if (localKey.Key == ConsoleKey.UpArrow || localKey.Key == ConsoleKey.DownArrow || localKey.Key == ConsoleKey.LeftArrow || localKey.Key == ConsoleKey.RightArrow)
- {
- ChangeDirection(localKey, out playerDX, out playerDY);
- MovePlayer('V', map, ref playerX, ref playerY, playerDX, playerDY);
- }
- else if (localKey.KeyChar == 'L' && (map[playerX, playerY] == '@' || map[playerX, playerY] == '*'))
- {
- BindTrap(playerX, playerY, ref arrayOfTraps, toggleX, toggleY);
- break;
- }
- else if (localKey.KeyChar == 'e')
- {
- isToggleSet = false;
- }
- }
- }
- static void MovePlayer(char symbol, char[,] map, ref int X, ref int Y, int DX, int DY)
- {
- Console.SetCursorPosition(Y, X);
- Console.Write(map[X, Y]);
- if (map[X + DX, Y + DY] != '#')
- {
- X += DX;
- Y += DY;
- }
- Console.SetCursorPosition(Y, X);
- Console.Write(symbol);
- }
- static void ChangeDirection(ConsoleKeyInfo key, out int DX, out int DY)
- {
- switch (key.Key)
- {
- case ConsoleKey.UpArrow:
- DX = -1; DY = 0;
- break;
- case ConsoleKey.DownArrow:
- DX = 1; DY = 0;
- break;
- case ConsoleKey.LeftArrow:
- DX = 0; DY = -1;
- break;
- case ConsoleKey.RightArrow:
- DX = 0; DY = 1;
- break;
- default:
- DX = 0;
- DY = 0;
- break;
- }
- }
- static void SetSymbol(char[,] map, char symbol, int playerX, int playerY)
- {
- Console.SetCursorPosition(playerY, playerX);
- map[playerX, playerY] = symbol;
- Console.Write(symbol);
- }
- static void CheckPosition(char[,] map, ref int playerX, ref int playerY, ref int collectCoins, int respawnX, int respawnY, int[,] arrayOfTraps)
- {
- if (map[playerX, playerY] == '$')
- {
- CollectCoin(map, playerX, playerY, ref collectCoins);
- }
- else if (map[playerX, playerY] == '@')
- {
- Respawn(respawnX, respawnY, ref playerX, ref playerY, map);
- }
- else if (map[playerX, playerY] == 'I')
- {
- SetSymbol(map, 'i', playerX, playerY);
- for (int i = 0; i < arrayOfTraps.GetLength(0); i++)
- {
- if (playerX == arrayOfTraps[i, 0] && playerY == arrayOfTraps[i, 1])
- {
- SetSymbol(map, '*', arrayOfTraps[i, 2], arrayOfTraps[i, 3]);
- }
- }
- }
- else if (map[playerX, playerY] == 'i')
- {
- SetSymbol(map, 'I', playerX, playerY);
- for (int i = 0; i < arrayOfTraps.GetLength(0); i++)
- {
- if (playerX == arrayOfTraps[i, 0] && playerY == arrayOfTraps[i, 1])
- {
- SetSymbol(map, '@', arrayOfTraps[i, 2], arrayOfTraps[i, 3]);
- }
- }
- }
- }
- static void CollectCoin(char[,] map, int playerX, int playerY, ref int collectCoins)
- {
- collectCoins++;
- map[playerX, playerY] = ' ';
- }
- static void Respawn(int respawnX, int respawnY, ref int playerX, ref int playerY, char[,] map)
- {
- char symbol = map[playerX, playerY];
- SetSymbol(map, symbol, playerX, playerY);
- playerX = respawnX;
- playerY = respawnY;
- Console.SetCursorPosition(respawnY, respawnX);
- Console.Write('V');
- }
- static void BindTrap(int playerX, int playerY, ref int[,] arrayOfTraps, int toggleX, int toggleY)
- {
- int[,] tempArrayOfTraps = new int[arrayOfTraps.GetLength(0) + 1, arrayOfTraps.GetLength(1)];
- for (int i = 0; i < arrayOfTraps.GetLength(0); i++)
- {
- for (int j = 0; j < arrayOfTraps.GetLength(1); j++)
- {
- tempArrayOfTraps[i, j] = arrayOfTraps[i, j];
- }
- }
- tempArrayOfTraps[tempArrayOfTraps.GetLength(0) - 1, 0] = toggleX;
- tempArrayOfTraps[tempArrayOfTraps.GetLength(0) - 1, 1] = toggleY;
- tempArrayOfTraps[tempArrayOfTraps.GetLength(0) - 1, 2] = playerX;
- tempArrayOfTraps[tempArrayOfTraps.GetLength(0) - 1, 3] = playerY;
- arrayOfTraps = tempArrayOfTraps;
- }
- static bool IsGameOver(int allCoins, int colectCoins)
- {
- if (allCoins == colectCoins)
- {
- Console.Clear();
- Console.WriteLine("Победа!");
- return true;
- }
- else
- {
- return false;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement