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;
}
}
}
}
게임오버 체크 추가
'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 |