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;
}
}
}
}
}