class App
{
Map[,] map =
{
{ new Map(100), new Map(100), new Map(100), new Map(100), new Map(301), new Map(301), new Map(302), new Map(302), new Map(304) },
{ new Map(200), new Map(200), new Map(200), new Map(200), new Map(201), new Map(100), new Map(305), new Map(306), new Map(307) },
{ new Map(100), new Map(308), new Map(100), new Map(100), new Map(200), new Map(100), new Map(100), new Map(100), new Map(100) },
{ new Map(100), new Map(100), new Map(100), new Map(100), new Map(200), new Map(200), new Map(200), new Map(200), new Map(200) }
};
Purin purin;
public App()
{
map[2, 0].obj = new Tree();
map[3, 3].obj = new Tree();
purin = new Purin(new Vector2(1, 0));
PrintMap();
while (true)
{
ConsoleKeyInfo info = Console.ReadKey();
Console.Clear();
switch (info.Key.ToString())
{
case "RightArrow":
MoveCheck(0, 1);
break;
case "LeftArrow":
MoveCheck(0, -1);
break;
case "DownArrow":
MoveCheck(1, 0);
break;
case "UpArrow":
MoveCheck(-1, 0);
break;
}
Console.WriteLine("푸린 좌표(y:{0},x:{1})", purin.position.y, purin.position.x);
PrintMap();
}
}
void MoveCheck(int y, int x)
{
switch (y)
{
case 1: // DownArrow
if (this.purin.position.y + y < map.GetLength(0))
{
this.purin.MoveDown(map[purin.position.y + y, purin.position.x].mapCode, map[purin.position.y + y, purin.position.x].obj);
}
else
{
Console.WriteLine("아래쪽으로 이동할 수 없습니다.");
}
break;
case -1: // UpArrow
if (this.purin.position.y > 0)
{
this.purin.MoveUp(map[purin.position.y + y, purin.position.x].mapCode, map[purin.position.y + y, purin.position.x].obj);
}
else
{
Console.WriteLine("위쪽으로 이동할 수 없습니다.");
}
break;
}
switch (x)
{
case 1: // RightArrow
if (this.purin.position.x + x < map.GetLength(1))
{
this.purin.MoveRight(map[purin.position.y, purin.position.x + x].mapCode, map[purin.position.y, purin.position.x + x].obj);
}
else
{
Console.WriteLine("오른쪽으로 이동할 수 없습니다.");
}
break;
case -1: // LeftArrow
if (this.purin.position.x > 0)
{
this.purin.MoveLeft(map[purin.position.y, purin.position.x + x].mapCode, map[purin.position.y, purin.position.x + x].obj);
}
else
{
Console.WriteLine("왼쪽으로 이동할 수 없습니다.");
}
break;
}
}
void PrintMap()
{
for (int y = 0; y < map.GetLength(0); y++)
{
for (int x = 0; x < map.GetLength(1); x++)
{
if (y == purin.position.y && x == purin.position.x)
{
Console.Write("@");
}
else if (map[y, x].obj == null)
{
if (map[y, x].mapCode >= 100 && map[y, x].mapCode < 200)
{
Console.Write("▒");
}
else if (map[y, x].mapCode >= 200 && map[y, x].mapCode < 300)
{
Console.Write("□");
}
else if (map[y, x].mapCode >= 300)
{
Console.Write("▧");
}
}
else
{
if (map[y, x].obj.ToString() == "Tree")
{
Console.Write("♣");
}
}
}
Console.WriteLine();
}
}
}
class Map
{
public int mapCode;
public Object obj;
public Map(int mapCode)
{
this.mapCode = mapCode;
}
}
class Tree
{
public Tree()
{
//Console.WriteLine("길막 오브젝트 나무 생성");
}
}
struct Vector2
{
public int x;
public int y;
public Vector2(int y, int x)
{
this.y = y;
this.x = x;
}
}
class Purin
{
public Vector2 position;
public Purin(Vector2 position)
{
this.position = position;
Console.WriteLine("푸린 입장(y:{0},x:{1})", this.position.y, this.position.x);
}
public void MoveUp(int mapCode, Object obj)
{
if (mapCode >= 300)
{
Console.WriteLine("위쪽으로 이동할 수 없습니다.");
}
else if (obj != null && obj.ToString() == "Tree")
{
Console.WriteLine("나무가 길을 막아 이동할 수 없습니다.");
}
else
{
this.position.y -= 1;
Console.WriteLine("위쪽으로 한 칸 이동합니다.");
}
}
public void MoveDown(int mapCode, Object obj)
{
if (mapCode >= 300)
{
Console.WriteLine("아래쪽으로 이동할 수 없습니다.");
}
else if (obj != null && obj.ToString() == "Tree")
{
Console.WriteLine("나무가 길을 막아 이동할 수 없습니다.");
}
else
{
this.position.y += 1;
Console.WriteLine("아래쪽으로 한 칸 이동합니다.");
}
}
public void MoveLeft(int mapCode, Object obj)
{
if (mapCode >= 300)
{
Console.WriteLine("왼쪽으로 이동할 수 없습니다.");
}
else if (obj != null && obj.ToString() == "Tree")
{
Console.WriteLine("나무가 길을 막아 이동할 수 없습니다.");
}
else
{
this.position.x -= 1;
Console.WriteLine("왼쪽으로 한 칸 이동합니다.");
}
}
public void MoveRight(int mapCode, Object obj)
{
if (mapCode >= 300)
{
Console.WriteLine("오른쪽으로 이동할 수 없습니다.");
}
else if (obj != null && obj.ToString() == "Tree")
{
Console.WriteLine("나무가 길을 막아 이동할 수 없습니다.");
}
else
{
this.position.x += 1;
Console.WriteLine("오른쪽으로 한 칸 이동합니다.");
}
}
}