using System;
using System.Threading;
using System.Linq;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

namespace Test
{
    class Program
    {
        static int choosedPlayer;
        static int arrivalPlayer;

        const int MAP_X = 7;
        const int MAP_Y = 22;

        static int[,] initMapData =

            {
              /* 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 */
                {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
                {3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0},
                {4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0},
                {5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0},
                {6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0},
                {7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0},
                {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
            };

        static int[] InitarrCharacterIndex = { 0, 0, 0, 0, 0 };

        static int ChoicePlayer()
        {
            Console.Write("원하는 달리기 선수를 선택하세요 ! (1~5) : ");
            int targetPlayer = int.Parse(Console.ReadLine());

            if(targetPlayer > 5 || targetPlayer < 1)
            {
                Console.WriteLine("1번 부터 5번 선수 중에 선택하세요 ! ");
                return ChoicePlayer();
            }

            return targetPlayer;
        }

        static void ClearScreen()
        {            
            Thread.Sleep(300);
            Console.Clear();
        }

        static void RunPlayer(int[,] mapData, int[] playerData)
        {
            for(int i = 1; i < MAP_X - 1; ++i)
            {
                SwapTile(mapData, i, playerData[i-1]++);
            }
        }

        static void RandomRunPlayer(int[,] mapData, int[] playerData)
        {
            Random rnd = new Random();

            int boosterPlayer = rnd.Next(1, 6);

            SwapTile(mapData, boosterPlayer, playerData[boosterPlayer-1]++);
        }

        static void SwapTile(int [,] map, int x, int y)
        {
            int tempTile = map[x, y];
            map[x, y] = 0;
            map[x, y + 1] = tempTile;
        }

        static void DrawMap(int[,] mapData, char[] tileData)
        {
            for (int i = 0; i < MAP_X; ++i)
            {
                for (int j = 0; j < MAP_Y; ++j)
                {
                    int maptile = mapData[i, j];

                    Console.Write(tileData[maptile]);

                    if (j == MAP_Y - 1)
                    {
                        Console.WriteLine();
                    }
                }
            }
        }

        static bool IsArrival(int[] playerData)
        {
            for(int i = 0; i < playerData.Length; ++i)
            {
                if(playerData[i] >= 20)
                {
                    arrivalPlayer = i;
                    return true;
                }
            }

            return false;
        }

        static void Main()
        {
            /*               0    1    2    3    4    5    6    7     타일 데이터 */
            char[] tile = { ' ', '-', '|', '1', '2', '3', '4', '5' };

            /* 실제 맵 데이터 */
            int[,] mapData = (int[,])initMapData.Clone();

            /* 달리기 선수의 위치 */
            int[] arrCharacterIndex = (int[])InitarrCharacterIndex.Clone();

            while(true)
            {
                Console.WriteLine(" Runner Game ! ");

                choosedPlayer = ChoicePlayer();

                Console.WriteLine("잠시 후 게임을 시작합니다 !");

                while (true)
                {
                    if (IsArrival(arrCharacterIndex))
                    {
                        Console.WriteLine("{0} 번 째 선수가 먼저 도착했습니다 !", arrivalPlayer + 1);

                        if (choosedPlayer == arrivalPlayer + 1)
                        {
                            Console.WriteLine("선택한 플레이어가 우승했습니다 ! 축하합니다 !");
                        }
                        else
                        {
                            Console.WriteLine("아쉽게도 우승자를 맞히지 못했습니다.");
                        }

                        Thread.Sleep(2000);

                        break;
                    }

                    ClearScreen();

                    RunPlayer(mapData, arrCharacterIndex);

                    DrawMap(mapData, tile);

                    ClearScreen();

                    RandomRunPlayer(mapData, arrCharacterIndex);

                    DrawMap(mapData, tile);                    
                }

                ClearScreen();

                Console.Write("다시 하시겠습니까? (YES -> 1 , 그 외 종료 : ");

                int reStart = int.Parse(Console.ReadLine());

                if (reStart == 1)
                {
                    mapData = initMapData;
                    arrCharacterIndex = InitarrCharacterIndex;
                }
                else
                {
                    break;
                }
            }
        }         
    }
}

'프로그래밍 > 코드 정리' 카테고리의 다른 글

[C#] StreamWriter, StreamReader  (0) 2021.04.02
[C#] BitConverter 테스트  (0) 2021.04.02
[C#] 성적 정렬 프로그램  (0) 2021.03.29
[C#] 성적 입력 프로그램  (0) 2021.03.25
[C#] 성적 프로그램  (0) 2021.03.20
블로그 이미지

NIA1995

,