경일게임아카데미 실습/11월

배열 과제 - 2차원 배열 활용 (2024 - 11- 28)

mynote6590 2024. 11. 28. 17:41

과제1

4x4 16개의 정수를 담을 수 있는 2차원 배열을 만든 후, 반복문을 이용하여 3의 배수들로 채워 넣는다. 그 후 2행3열 요소와 3행 2열 요소를 바꾼 후 출력하여보자

  • int형 2차원 배열을 선언
  • 반복문을 통하여 순서대로 3의 배수들로 채워넣음
  • 2행3열 요소와 3행 2열 요소를 바꾼다
  • 4x4의 형태로 들어있는 숫자들을 출력

※인간의 언어로 2행3열 입니다. 0부터가 아닌 1부터 시작이라고 가정합니다

 

접근 방식

2중 반복문을 활용해 3의 배수를 2차원 배열에 담는데, 그때 1씩 증가하는 K변수 값을 이용해서 0*3 , 1*3 , 2*3 ... 3의 배수를 담아 주었다 


static void Main(string[] args)
{
    int k = 0;
    int[,] array3 = new int[4, 4];
    for (int i = 0; i < array3.GetLength(0); i++)
    {
        for (int j = 0; j < array3.GetLength(1); j++)
        {
            k++;
            array3[i, j] = 3 * k;
        }
    }
    int temp = array3[2, 3];
    array3[2, 3] = array3[3, 2];
    array3[3, 2] = temp;
    for (int i = 0; i < array3.GetLength(0); i++)
    {
        for (int j = 0; j < array3.GetLength(1); j++)
        {
            Console.Write(array3[i, j]);
        }
        Console.WriteLine("");
    }
}

 


심화 과제  

과제1의 확장입니다. 플레이어에게 4개의 스킬이 있고, 각각의 스킬명이 존재합니다. 초기값은 다음과 같습니다. 변수를 쓰셔도, 배열을 쓰셔도 상관 없습니다

Q스킬 5

W스킬 3
E스킬 10
R스킬 7

콘솔을 킨 첫 화면에서 일단 모든 스킬과 턴을 보여줍니다.

그 아래에 유저에게 선택권을 줍니다.

  1. 턴을 넘길지,
  2. 스킬을 사용할 지 두 선택지를 줍니다.

 

  1. 스킬을 선택하였다면, 어느 스킬을 사용할 지 입력받고 만약 그 스킬의 쿨타임이 0이면 다시 쿨타임 초기 숫자로 원복(Q는 5, W는3, E는 10, R은 7)
  2. 쿨타임이 돌아오지 않은 것을 선택 시, 쿨타임이 돌아오지 않았다는 메시지 출력
  3. 턴 넘김을 사용 시, 모든 스킬 쿨타임 1 감소. 만약 쿨타임 0이고 스킬을 사용하지 않는다면 0으로 유지. 만약 쿨타임이 0이라면 0을 출력하는 것이 아닌, “스킬준비완료” 를 출력합니다
  4. 원하는 대로 커스터마이징 해도 괜찮습니다
  5. 아래는 예시입니다.

 

접근 

1번 키를 누르면 모든 쿨타임 -1씩 감소시키고 2번 키를 누르면 스킬 사용가능하게 만들고 만약 스킬을 사용한다면 쿨타임의 값을 다시 초기화 시켰습니다.

static void Main(string[] args)
{
    int[] arrayInt = new int[] { 5, 3, 10, 7 };
    string[] arrayStr = new string[] { "Q 스킬", "W 스킬", "E 스킨", "R스킬" };
    Console.WriteLine("");
    Console.WriteLine("사용 가능한 스킬은 다음과 같습니다");
    Console.WriteLine("");

    // 참조형은 초기화 하지 않으면 null 값 들어감
    while (true)
    {
        Console.Clear();
        PrintSkill(arrayInt, arrayStr);
        Console.WriteLine("------------------------");
        Console.WriteLine("액션을 선택 해주세요");
        Console.WriteLine("------------------------");
        Console.WriteLine(" 1. 턴 넘김");
        Console.WriteLine(" 2. 스킬 사용");
        Console.WriteLine(" 0. 게임 종료");
        string chooose = Console.ReadLine();

        if (chooose == "1")
        {
            SkillPass(arrayInt);
        }
        else if (chooose == "2")
        {
            Console.WriteLine("사용할 스킬을 입력해 주세요");
            for (int i = 0; i< arrayInt.Length; i++)
            {
                if(arrayInt[i] != 0)
                {
                    Console.WriteLine("사용 가능한 스킬이 없습니다.");
                    continue;
                }
            }
            string useBotton = Console.ReadLine();
            if (useBotton == "q")
            {
                if (arrayInt[0] == 0)
                {
                    arrayInt[0] = 5;
                }
            }
            else if (useBotton == "w")
            {
                if (arrayInt[1] == 0)
                {
                    arrayInt[1] = 3;
                }
            }
            else if (useBotton == "e")
            {
                if (arrayInt[2] == 0)
                {
                    arrayInt[2] = 10;
                }
            }
            else if (useBotton == "r")
            {
                if (arrayInt[3] == 0)
                {
                    arrayInt[3] = 7;
                }
            }
        }
        else if (chooose == "0")
        {
            break;
        }
    }
}
static void PrintSkill(int[] time, string[] skill)
{
    for (int i = 0; i < skill.Length; i++)
    {
        if (time[i] > 0)
        {
            Console.WriteLine($"{skill[i]}  :  {time[i]}");
        }
        else if (time[i] == 0)
        {
            Console.WriteLine($"{skill[i]}  :  스킬 사용 가능");
        }

    }

}
static void SkillPass(int[] time)
{
    for (int i = 0; i < time.Length; i++)
    {
        if (time[i] > 0)
        {
            time[i] -= 1;
        }
    }

}