자료구조

배열 -맵 만들고 케릭터 이동하기- 수정완료

hyunjin-dev-log 2021. 12. 25. 22:02

using System;

class App
{
    public int[,] arr;
    private int totalRow = 4;
    private int totalCol = 9;
    public int val;

    public App()
    {
        CreatMap(totalRow, totalCol);       //맵생성
        this.arr[2, 1] = 308;               //타일을 만든다 (값을 넣는다)
        this.arr[0, 4] = 308;
        this.arr[0, 5] = 308;
        this.arr[1, 6] = 308;
        this.arr[1, 7] = 308;
        this.arr[1, 8] = 308;
        PrintMap();                         //맵출력
        Purin purin = new Purin();          //캐릭 생성
        Console.WriteLine("현재위치: ({0},{1})", purin.x, purin.y);

        Tree[] arrTree = new Tree[2];       //나무만들기
        Tree tree1 = new Tree(0, 2);
        Tree tree2 = new Tree(3, 3);
        arrTree[0] = tree1;
        arrTree[1] = tree2;

        //푸린의 x,y값으로 row, col 인덱스를 알아내야 한다
        //규칙 : x좌표를 col인덱스로 y좌표를 row인덱스로 사용한다
        while (true)
        {
            Console.WriteLine();
            Console.Write("입력대기");
            ConsoleKeyInfo info = Console.ReadKey();
            ConsoleKey inputKey = info.Key;
            
            if (inputKey == ConsoleKey.RightArrow)
            {
                if (purin.x + 1 > 8)
                {
                    Console.WriteLine();
                    Console.WriteLine("맵밖으로는 이동할수 없습니다.");
                }
                else
                {
                    this.val = this.arr[purin.y, purin.x + 1];       //오른쪽으로 이동
                    Console.WriteLine("목표 좌표: ({0},{1})", purin.x + 1, purin.y);
                    Console.WriteLine("목표 타일의 값: {0}", val);
                    if (purin.x + 1 == arrTree[0].x && purin.y == arrTree[0].y || purin.x + 1 == arrTree[1].x && purin.y == arrTree[1].y)
                    {
                        Console.WriteLine("나무가 있어서 갈수없습니다.");
                    }
                    else if (val == 0)
                    {
                        purin.x += 1;
                    }
                    else if (val == 308)
                    {
                        Console.WriteLine("물로는 갈수 없습니다.");
                    }
                }

                Console.WriteLine("현재위치: ({0},{1})", purin.x, purin.y);
            }

            if (inputKey == ConsoleKey.DownArrow)               //아래로 이동
            {
                if (purin.y + 1 > 3)
                {
                    Console.WriteLine();
                    Console.WriteLine("맵밖으로는 이동할수 없습니다.");
                }
                else
                {
                    this.val = this.arr[purin.y + 1, purin.x];
                    Console.WriteLine("목표 좌표: ({0},{1})", purin.x, purin.y + 1);
                    Console.WriteLine("목표 타일의 값: {0}", val);
                    if (purin.x == arrTree[0].x && purin.y + 1 == arrTree[0].y || purin.x == arrTree[1].x && purin.y + 1 == arrTree[1].y)
                    {
                        Console.WriteLine("나무가 있어서 갈수없습니다.");
                    }
                    else if (val == 0)
                    {
                        purin.y += 1;
                    }
                    else if (val == 308)
                    {
                        Console.WriteLine("물로는 갈수 없습니다.");
                    }
                }

                Console.WriteLine("현재위치: ({0},{1})", purin.x, purin.y);
            }

            if (inputKey == ConsoleKey.UpArrow)                 //위로 이동
            {
                if (purin.y - 1 < 0)
                {
                    Console.WriteLine();
                    Console.WriteLine("맵밖으로는 이동할수 없습니다.");
                }
                else
                {
                    this.val = this.arr[purin.y - 1, purin.x];
                    Console.WriteLine("목표 좌표: ({0},{1})", purin.x, purin.y - 1);
                    Console.WriteLine("목표 타일의 값: {0}", val);
                    if (purin.x == arrTree[0].x && purin.y - 1 == arrTree[0].y || purin.x == arrTree[1].x && purin.y - 1 == arrTree[1].y)
                    {
                        Console.WriteLine("나무가 있어서 갈수없습니다.");
                    }
                    else if (val == 0)
                    {
                        purin.y -= 1;
                    }
                    else if (val == 308)
                    {
                        Console.WriteLine("물로는 갈수 없습니다.");
                    }
                }

                Console.WriteLine("현재위치: ({0},{1})", purin.x, purin.y);
            }

            if (inputKey == ConsoleKey.LeftArrow)               //왼쪽으로 이동
            {
                if (purin.x - 1 < 0)
                {
                    Console.WriteLine();
                    Console.WriteLine("맵밖으로는 이동할수 없습니다.");
                }
                else
                {
                    this.val = this.arr[purin.y, purin.x - 1];
                    Console.WriteLine("목표 좌표: ({0},{1})", purin.x - 1, purin.y);
                    Console.WriteLine("목표 타일의 값: {0}", val);
                    if (purin.x - 1 == arrTree[0].x && purin.y == arrTree[0].y || purin.x - 1 == arrTree[1].x && purin.y == arrTree[1].y)
                    {
                        Console.WriteLine("나무가 있어서 갈수없습니다.");
                    }
                    else if (val == 0)
                    {
                        purin.x -= 1;
                    }
                    else if (val == 308)
                    {
                        Console.WriteLine("물로는 갈수 없습니다.");
                    }   
                }

                Console.WriteLine("현재위치: ({0},{1})", purin.x, purin.y);
            }

            Console.WriteLine();
        }
    }

    void PrintMap()
    {
        for (int i = 0; i < totalRow; i++)
        {
            for (int j = 0; j < totalCol; j++)
            {
                Console.Write("{0,5}", this.arr[i, j]);
            }
            Console.WriteLine();
        }
    }

    private void CreatMap(int row, int col)
    {
        arr = new int[row, col];
    }
}

나무

using System;

class Tree
{
    public int x;
    public int y;

    //생성자
    public Tree(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
}

캐릭터 푸린

using System;

class Purin
{
    public int x;
    public int y;

    //생성자
    public Purin()
    {
        Console.WriteLine("캐릭터 생성");
    }
}

HelloWorld.exe
0.01MB