✅미로찾기 3단계 콘솔 게임
namespace ConsoleGame
{
internal class Program
{
struct Position
{
public int x;
public int y;
}
static char[][,] maps = new char[][,]
{
new char[17, 30]
{
{ '■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■' },
{ '▒',' ','▒',' ',' ',' ',' ',' ','▒',' ',' ',' ',' ',' ',' ','▒','▒',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','▒' },
{ '▒',' ','▒',' ','▒','▒','▒',' ','▒','▒',' ','▒','▒','▒',' ','▒','▒',' ','▒','▒',' ','▒','▒',' ','▒','▒',' ','▒','▒','▒' },
{ '▒',' ','▒',' ',' ',' ','▒',' ','▒','▒',' ','▒',' ','▒',' ','▒','▒',' ','▒','▒','▒','▒','▒',' ','▒',' ',' ','▒',' ','▒' },
{ '▒',' ','▒','▒','▒',' ','▒',' ','▒','▒',' ','▒',' ','▒',' ',' ','▒',' ','▒',' ',' ',' ',' ',' ','▒',' ','▒','▒',' ','▒' },
{ '▒',' ',' ',' ',' ',' ','▒',' ','▒','▒',' ','▒',' ','▒',' ','▒','▒',' ','▒',' ','▒','▒','▒','▒','▒',' ',' ',' ',' ','▒' },
{ '▒','▒','▒','▒','▒','▒','▒',' ','▒','▒',' ',' ',' ','▒',' ','▒','▒',' ','▒',' ',' ',' ',' ','▒','▒','▒','▒','▒',' ','▒' },
{ '▒',' ',' ',' ',' ',' ',' ',' ','▒','▒','▒','▒','▒','▒',' ',' ',' ',' ','▒',' ','▒','▒',' ','▒',' ',' ',' ',' ',' ','▒' },
{ '▒','▒','▒',' ','▒','▒','▒','▒','▒','▒','▒','▒','▒','▒','▒','▒','▒','▒','▒',' ','▒','▒',' ','▒',' ','▒','▒','▒','▒','▒' },
{ '▒',' ','▒',' ','▒',' ',' ',' ','▒',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','▒',' ',' ','▒',' ','▒',' ',' ',' ','▒' },
{ '▒',' ','▒',' ','▒',' ','▒','▒','▒',' ','▒','▒','▒',' ','▒','▒','▒','▒','▒','▒','▒',' ','▒','▒',' ','▒',' ','▒',' ','▒' },
{ '▒',' ','▒',' ','▒',' ','▒',' ','▒',' ','▒',' ','▒',' ','▒',' ',' ',' ',' ',' ',' ',' ','▒',' ',' ','▒',' ','▒',' ','▒' },
{ '▒',' ','▒',' ','▒',' ','▒',' ','▒',' ','▒',' ','▒',' ','▒',' ','▒','▒','▒','▒','▒',' ','▒',' ','▒','▒',' ','▒',' ','▒' },
{ '▒',' ','▒',' ',' ',' ','▒',' ',' ',' ',' ',' ','▒',' ','▒',' ',' ',' ',' ',' ','▒',' ','▒',' ',' ',' ',' ','▒',' ','▒' },
{ '▒',' ','▒',' ','▒',' ','▒','▒','▒','▒','▒','▒','▒',' ','▒','▒','▒','▒','▒',' ','▒',' ','▒','▒','▒','▒','▒','▒',' ','▒' },
{ '▒',' ',' ',' ','▒',' ',' ',' ',' ',' ',' ',' ',' ',' ','▒',' ',' ',' ',' ',' ','▒',' ',' ',' ',' ',' ',' ','▒',' ',' ' },
{ '■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■','■' }
},
new char[17, 30]
{
{ '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■' },
{ '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '▒' },
{ '▒', ' ', '■', '■', '■', '■', '■', '■', '■', ' ', '▒', ' ', '■', '■', '■', '■', '■', '■', '■', ' ', '▒', ' ', '■', '■', '■', '■', '■', '■', ' ', '▒' },
{ '▒', ' ', '▒', ' ', ' ', ' ', ' ', ' ', '▒', ' ', '▒', ' ', '▒', ' ', ' ', ' ', ' ', ' ', '▒', ' ', '▒', ' ', '▒', ' ', ' ', ' ', ' ', '▒', ' ', '▒' },
{ '▒', ' ', '▒', ' ', '■', '■', '■', ' ', '■', ' ', '▒', ' ', '▒', ' ', '■', '■', '■', ' ', '▒', ' ', '▒', ' ', '▒', ' ', '■', '■', ' ', '■', ' ', '▒' },
{ '▒', ' ', '▒', ' ', '▒', ' ', '▒', ' ', ' ', ' ', '▒', ' ', '▒', ' ', '▒', ' ', '▒', ' ', '▒', ' ', '▒', ' ', '▒', ' ', '▒', ' ', ' ', ' ', ' ', '▒' },
{ '▒', ' ', '▒', ' ', '▒', ' ', '■', '■', '■', '■', '■', ' ', '▒', ' ', '▒', ' ', '■', ' ', '■', ' ', '▒', ' ', '▒', ' ', '■', '■', '■', '■', '■', '▒' },
{ '▒', ' ', '▒', ' ', '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', '▒', ' ', ' ', ' ', ' ', ' ', '▒', ' ', '▒', ' ', ' ', ' ', ' ', ' ', ' ', '▒' },
{ '▒', '■', '■', ' ', '■', '■', '■', '■', '■', '■', '■', ' ', '▒', ' ', '■', '■', '■', '■', '■', '■', '■', ' ', '■', '■', '■', '■', '■', '■', ' ', '▒' },
{ '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', ' ', ' ', '▒' },
{ '▒', '■', '■', '■', '■', '■', '■', '■', '■', ' ', '■', ' ', '■', '■', '■', '■', '■', '■', '■', '■', ' ', '■', '■', '■', '■', '■', '■', '■', ' ', '▒' },
{ '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '■', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', '▒' },
{ '▒', ' ', '■', '■', '■', '■', '■', ' ', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', ' ', '■', '■', '■', '■', '■', '■', '■', ' ', '▒', ' ', '▒' },
{ '▒', ' ', ' ', ' ', ' ', ' ', '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', '▒', ' ', '▒' },
{ '▒', '■', '■', '■', '■', ' ', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', ' ', '▒', ' ', '▒', ' ', '▒' },
{ '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', '▒', ' ', ' ' },
{ '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■' },
},
new char[17, 30]
{
{ '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■' },
{ '▒', ' ', ' ', ' ', ' ', '▒', ' ', '▒', ' ', ' ', ' ', ' ', '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '▒' },
{ '▒', ' ', '■', '■', ' ', '▒', ' ', '■', '■', '■', '■', ' ', '▒', ' ', '■', '■', '■', '■', '■', ' ', '■', '■', ' ', '■', '■', '■', '■', '■', ' ', '▒' },
{ '▒', ' ', '▒', ' ', ' ', '▒', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', ' ', ' ', ' ', ' ', '▒', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', ' ', ' ', '▒' },
{ '▒', ' ', '■', '■', '■', '■', '■', '■', ' ', '■', '■', '■', '■', '■', '■', ' ', '■', ' ', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', ' ', '▒' },
{ '▒', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', '▒' },
{ '▒', ' ', '■', '■', '■', '■', ' ', '■', '■', '■', '■', '■', '■', ' ', '■', '■', '■', '■', '■', '■', ' ', '■', '■', '■', '■', '■', '■', '■', ' ', '▒' },
{ '▒', ' ', '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '▒' },
{ '▒', ' ', '▒', ' ', '■', '■', '■', '■', '■', '■', '■', ' ', '■', '■', '■', '■', '■', '■', ' ', '■', '■', '■', ' ', '■', '■', '■', '■', '■', ' ', '▒' },
{ '▒', ' ', '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', ' ', '▒' },
{ '▒', ' ', '■', '■', '■', '■', '■', '■', '■', ' ', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', ' ', '■', '■', '■', '▒' },
{ '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', ' ', ' ', ' ', '▒' },
{ '▒', '■', '■', '■', '■', '■', '■', ' ', '▒', ' ', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', ' ', '▒' },
{ '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', ' ', ' ', ' ', ' ', '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '▒' },
{ '▒', ' ', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', ' ', '▒', ' ', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '▒' },
{ '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '▒', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' },
{ '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■', '■' }
}
};
static int Level = 0;
static int Count = 0;
static bool gameLeset = false;
static void Main(string[] args)
{
while (Level < maps.Length)
{
bool gameOver = false;
Position playerPos;
Position goalPos;
char[,] map;
Start(out playerPos, out goalPos, out map);
while (gameOver == false)
{
Render(playerPos, goalPos, map);
ConsoleKey key = Input();
Update(key, ref playerPos, goalPos, map, out gameOver);
Reset(key, ref playerPos, goalPos, map, ref gameOver, ref gameLeset);
}
Level++;
}
End(ref gameLeset);
}
static void Start(out Position playerPos, out Position goalPos, out char[,] map)
{
playerPos.x = 1;
playerPos.y = 1;
goalPos.x = 29;
goalPos.y = 15;
map = maps[Level];
}
static void Render(Position playerPos, Position goalPos, char[,] map)
{
Console.SetCursorPosition(0, 0);
PrintMap(map);
printPlayer(playerPos);
printGoal(goalPos);
}
static ConsoleKey Input()
{
return Console.ReadKey(true).Key;
}
static void Update(ConsoleKey key, ref Position playerPos, Position goalPos, char[,] map, out bool gameOver)
{
Move(key, ref playerPos, map);
bool success = (playerPos.x == goalPos.x) && (playerPos.y == goalPos.y);
if (success)
{
gameOver = true;
}
else
{
gameOver = false;
}
}
static void Reset(ConsoleKey key, ref Position playerPos, Position goalPos, char[,] map, ref bool gameOver, ref bool gameLeset)
{
switch (key)
{
case ConsoleKey.R:
playerPos.y = 1;
playerPos.x = 1;
Console.Clear();
PrintMap(map);
printPlayer(playerPos);
printGoal(goalPos);
break;
case ConsoleKey.G:
Level = 10;
gameOver = true;
gameLeset = true;
break;
}
}
static void Move(ConsoleKey key, ref Position playerPos, char[,] map)
{
switch (key)
{
case ConsoleKey.A:
case ConsoleKey.LeftArrow:
if (map[playerPos.y, playerPos.x - 1] == ' ')
{
playerPos.x--;
Count++;
}
case ConsoleKey.D:
case ConsoleKey.RightArrow:
if (map[playerPos.y, playerPos.x + 1] == ' ')
{
playerPos.x++;
Count++;
}
break;
case ConsoleKey.W:
case ConsoleKey.UpArrow:
if (map[playerPos.y - 1, playerPos.x] == ' ')
{
playerPos.y--;
Count++;
}
break;
case ConsoleKey.S:
case ConsoleKey.DownArrow:
if (map[playerPos.y + 1, playerPos.x] == ' ')
{
playerPos.y++;
Count++;
}
break;
}
}
static void PrintMap(char[,] map)
{
for (int y = 0; y < map.GetLength(0); y++)
{
for (int x = 0; x < map.GetLength(1); x++)
{
Console.Write(map[y, x]);
}
Console.WriteLine();
}
}
static void printPlayer(Position playerPos)
{
Console.SetCursorPosition(playerPos.x, playerPos.y);
Console.ForegroundColor = ConsoleColor.Green;
Console.Write("▲");
Console.ResetColor();
}
static void printGoal(Position goalPos)
{
Console.SetCursorPosition(goalPos.x, goalPos.y);
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write("G");
Console.ResetColor();
}
static void End(ref bool gameLeset)
{
Console.Clear();
Console.ForegroundColor = ConsoleColor.Magenta;
if (gameLeset == false)
{
if (Count <= 338)
{
Console.WriteLine($"감사합니다!!!!\n{Count}걸음 <최단 거리!!>로 미로찾기를 끝내셧습니다.!!\n감사합니다!!");
}
else if (Count > 338)
{
Console.WriteLine($"감사합니다!!!!\n{Count}걸음으로 미로찾기를 끝내셧습니다.!!\n최단 거리에 도전해 보세요!!");
}
}
else
{
Console.WriteLine("게임을 포기하셨습니다.\n다음에 다시 도전해 주세요...");
}
Console.ResetColor();
}
}
}