2048 프로그램 (저장기능x)
C#/실습 2019. 10. 23. 15:02출력 예:
코드:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _10._22_step2
{
class App
{
int[,] arr = new int[4, 4];
Random rand = new Random();
Random rand2 = new Random();
public App()
{
while (true)
{
Console.WriteLine("아무 키를 눌러주세요.");
Console.ReadKey();
Console.Clear();
Console.WriteLine("------------------------");
Show();
Console.WriteLine("------------------------");
for (int i = 0; i < 16; i++)
{
int row = rand.Next(0, 4);
int col = rand.Next(0, 4);
int num = rand2.Next(0, 7);
if (num == 0)
{
num = 2;
}
else if (num == 1|| num == 2||num==3
||num==4 || num == 5 || num == 6)
{
num = 0;
}
if (arr[row, col] == 0)
{
arr[row, col] = num;
}
}
Console.WriteLine("아무 키를 누르면 숫자를 받아옵니다.");
Console.ReadKey();
Console.Clear();
Console.WriteLine("------------------------");
Show();
Console.WriteLine("------------------------");
Console.WriteLine("방향키를 눌러 미세요.");
string key = Console.ReadKey().Key.ToString();
InputKey(key);
Console.WriteLine("------------------------");
Show();
Console.WriteLine("------------------------");
}
}
public void Show()
{
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
Console.Write(arr[i, j] + "\t");
}
Console.WriteLine();
}
}
public void InputKey(string input)
{
switch (input)
{
case "RightArrow":
{
for(int k = 3; k>=0; k--)//숫자사이 0 제거
{
for (int i = 3; i >= 0; i--)
{
for (int j = 3; j >= 0; j--)
{
if (j - 1 >= 0 && arr[i, j] == 0)//o이다
{
arr[i, j] = arr[i, j - 1];
arr[i, j - 1] = 0;
}
}
}
}
for (int i = 3; i >= 0; i--)
{
for (int j = 3; j >= 0; j--)
{
if (j - 1 >= 0 && arr[i, j] != 0)//숫자다
{
if (arr[i, j] == arr[i, j - 1])//앞에 수가 같다
{
arr[i, j] += arr[i, j - 1];
arr[i, j - 1] = 0;
}
}
}
}
for (int k = 3; k >= 0; k--)//숫자사이 0 제거
{
for (int i = 3; i >= 0; i--)
{
for (int j = 3; j >= 0; j--)
{
if (j - 1 >= 0 && arr[i, j] == 0)//o이다
{
arr[i, j] = arr[i, j - 1];
arr[i, j - 1] = 0;
}
}
}
}
break;
}
case "LeftArrow":
{
for (int k = 0; k <= 3; k++)//숫자사이 0 제거
{
for (int i = 0; i <= 3; i++)
{
for (int j = 0; j <= 3; j++)
{
if (j + 1 <= 3 && arr[i, j] == 0)//o이다
{
arr[i, j] = arr[i, j + 1];
arr[i, j + 1] = 0;
}
}
}
}
for (int i = 0; i <= 3; i++)
{
for (int j = 0; j <= 3; j++)
{
if (j + 1 <= 3 && arr[i, j] != 0)//숫자다
{
if (arr[i, j] == arr[i, j + 1])//앞에 수가 같다
{
arr[i, j] += arr[i, j + 1];
arr[i, j + 1] = 0;
}
}
}
}
for (int k = 0; k <= 3; k++)//숫자사이 0 제거
{
for (int i = 0; i <= 3; i++)
{
for (int j = 0; j <= 3; j++)
{
if (j + 1 <= 3 && arr[i, j] == 0)//o이다
{
arr[i, j] = arr[i, j + 1];
arr[i, j +1] = 0;
}
}
}
}
break;
}
case "UpArrow":
{
for (int k = 0; k <= 3; k++)//숫자사이 0 제거
{
for (int i = 0; i <= 3; i++)
{
for (int j = 0; j <= 3; j++)
{
if (j + 1 <= 3 && arr[j, i] == 0)//o이다
{
arr[j, i] = arr[j+1, i];
arr[j+1, i] = 0;
}
}
}
}
for (int i = 0; i <= 3; i++)
{
for (int j = 0; j <= 3; j++)
{
if (j + 1 <= 3 && arr[j, i] != 0)//숫자다
{
if (arr[j, i] == arr[j+1, i])//앞에 수가 같다
{
arr[j, i] += arr[j+1, i];
arr[j+1, i] = 0;
}
}
}
}
for (int k = 0; k <= 3; k++)//숫자사이 0 제거
{
for (int i = 0; i <= 3; i++)
{
for (int j = 0; j <= 3; j++)
{
if (j + 1 <= 3 && arr[j, i] == 0)//o이다
{
arr[j, i] = arr[j+1, i];
arr[j+1, i] = 0;
}
}
}
}
break;
}
case "DownArrow":
{
for (int k = 3; k >= 0; k--)//숫자사이 0 제거
{
for (int i = 3; i >= 0; i--)
{
for (int j = 3; j >= 0; j--)
{
if (j - 1 >= 0 && arr[j, i] == 0)//o이다
{
arr[j, i] = arr[j-1, i];
arr[j-1,i] = 0;
}
}
}
}
for (int i = 3; i >= 0; i--)
{
for (int j = 3; j >= 0; j--)
{
if (j - 1 >= 0 && arr[j, i] != 0)//숫자다
{
if (arr[j, i] == arr[j-1, i])//앞에 수가 같다
{
arr[j, i] += arr[j-1, i];
arr[j-1,i] = 0;
}
}
}
}
for (int k = 3; k >= 0; k--)//숫자사이 0 제거
{
for (int i = 3; i >= 0; i--)
{
for (int j = 3; j >= 0; j--)
{
if (j - 1 >= 0 && arr[j, i] == 0)//o이다
{
arr[j, i] = arr[j-1, i];
arr[j-1,i] = 0;
}
}
}
}
break;
}
}
}
}
}
'C# > 실습' 카테고리의 다른 글
10.23 배열에서 숫자이동시키기 (0) | 2019.10.24 |
---|---|
10.24 벡터 (0) | 2019.10.24 |
10.17 상속 클래스를 이용한 뽑기박스 (0) | 2019.10.17 |
10.15 Dictionary 활용해 업적 보상 UIPanel 만들기 (0) | 2019.10.15 |
10.14 클오클 클랜원 UIPanel 만들기 (0) | 2019.10.14 |