C#/수업 내용

[C#] 2021-08-31 1차원 배열 2048

JSH1 2021. 8. 31. 17:09
class App
{
    int[] map = new int[5];
    Random rand = new Random();

    public App()
    {
        AddNumber();
        AddNumber();
        Field();

        while (true)
        {
            ConsoleKeyInfo info = Console.ReadKey();
            Console.WriteLine();

            switch (info.Key.ToString())
            {
                case "RightArrow":
                    Push(1);
                    Sum(1);
                    break;

                case "LeftArrow":
                    Push(-1);
                    Sum(-1);
                    break;

                default:
                    break;
            }

            AddNumber();
            Field();
            GameOverCheck();
        }
    }

    void GameOverCheck()
    {
        for (int x = 0; x < map.Length; x++)
        {
            if (x == 0)
            {
                if (map[x] == 0 || map[x] == map[x + 1])
                {
                    return;
                }
            }

            else if (x == map.Length - 1)
            {
                if (map[x] == 0 || map[x] == map[x - 1])
                {
                    return;
                }
            }

            else
            {
                if (map[x] == 0 || map[x] == map[x - 1] || map[x] == map[x + 1])
                {
                    return;
                }
            }
        }
        Console.WriteLine("게임오버");
    }



    void Push(int valueX)
    {
        while (true)
        {
            int n = 0;

            for (int x = 0; x < map.Length; x++)
            {
                if (valueX == 1 && map[x] != 0 && x != map.Length - 1) // RightArrow입력(x:1): map[x]가 0이 아니고 오른쪽 끝자리가 아닐때
                {
                    if (map[x + valueX] == 0) // map[x]의 오른쪽자리의 값이 0일때
                    {
                        map[x + valueX] = map[x];
                        map[x] = 0;
                        n++;
                    }
                }

                else if (valueX == -1 && map[x] != 0 && x != 0) // LeftArrow입력(x:-1): map[x]가 0이 아니고 왼쪽 끝자리가 아닐때
                {
                    if (map[x + valueX] == 0) // map[x]의 왼쪽자리의 값이 0일때
                    {
                        map[x + valueX] = map[x];
                        map[x] = 0;
                        n++;
                    }
                }
            }

            if (n == 0)
            {
                break;
            }
        }
    }

    void Sum(int valueX)
    {
        if (valueX == 1) // RightArrow입력(x:1)
        {
            for (int x = map.Length - 1; x >= 0; x--)
            {
                if (map[x] != 0 && x != map.Length - 1) // map[x]가 0이 아니고 오른쪽 끝자리가 아닐때
                {
                    if (map[x] == map[x + valueX]) // map[x]랑 오른쪽자리의 값이 같을때
                    {
                        map[x + valueX] += map[x];
                        map[x] = 0;
                    }
                }
            }
        }

        else if (valueX == -1) // LeftArrow입력(x:-1)
        {
            for (int x = 0; x < map.Length; x++)
            {
                if (map[x] != 0 && x != 0) // map[x]가 0이 아니고 왼쪽 끝자리가 아닐때
                {
                    if (map[x] == map[x + valueX]) // map[x]랑 왼쪽자리의 값이 같을때
                    {
                        map[x + valueX] += map[x];
                        map[x] = 0;
                    }
                }
            }
        }

        Push(valueX);
    }

    void Field()
    {
        for (int x = 0; x < map.Length; x++)
        {
            Console.Write(" {0} ", map[x]);
        }
        Console.WriteLine();
    }

    void AddNumber()
    {
        int blankCheck = 0;
        for (int x = 0; x < map.Length; x++)
        {
            if (map[x] != 0) // max[x]가 빈칸이 아닐때 카운트
            {
                blankCheck++;
            }
        }

        if (blankCheck == map.Length) // 빈칸이 하나도 없으면 메서드 종료
        {
            return;
        }

        while (true)
        {
            int x;
            x = rand.Next(0, map.Length);

            if (map[x] == 0)
            {
                map[x] = 2;
                break;
            }
        }
    }

}

게임오버 체크 추가

Hello World.exe
0.01MB

 

'C# > 수업 내용' 카테고리의 다른 글

[C#] 2021-09-01 1차원 배열 복습  (0) 2021.09.01
[C#] 2021-08-31 2차원 배열 2048  (0) 2021.08.31
[C#] 2021-08-31 1차원 배열 캐릭터 이동  (0) 2021.08.31
[C#] 2021-08-30 배열 연습  (0) 2021.08.31
[C#] abstract, interface  (0) 2021.08.31