본문 바로가기

개발 일기/Unity

[Unity] 퀴즈 게임 만들기 1 (Feat.랜덤배열)

간단한 퀴즈 게임을 만들고 있다.

막상 프로토타입을 만들어보니 생각과는 약간 다른 느낌이다.

 

몇 가지 쓴 함수들을 정리해 보자.

 

1. String 랜덤 배열 함수

string shuffleDap(string dap)
    {
        char[] array = dap.ToCharArray();
        System.Random random = new System.Random();
        int n = array.Length;
        while (n > 1)
        {
            n--;
            int k = random.Next(n + 1);
            var value = array[k];
            array[k] = array[n];
            array[n] = value;
        }
        return new string(array);
    }

string 타입의 글자를 char로 한글자씩 받아 배열에 저장하고 뒤에서 부터 차례대로 순서를 랜덤으로 변경해주는 함수다.

 

2. 한글 랜덤 생성 함수

public class RandomKorean
{
    static string[] first = { "ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ" };
    static int[] intFirst = { 0, 2, 3, 5, 6, 7, 9, 11, 12, 14, 15, 16, 17, 18 };
    static string[] middle = { "ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅘ", "ㅙ", "ㅚ", "ㅛ", "ㅜ", "ㅝ", "ㅞ", "ㅟ", "ㅠ", "ㅡ", "ㅢ", "ㅣ" };
    static int[] intMiddle = { 0, 1, 2, 4, 5, 6, 8, 9, 10, 12, 13, 17, 18, 20 };
    static string[] end = { "ㄱ", "ㄲ", "ㄳ", "ㄴ", "ㄵ", "ㄶ", "ㄷ", "ㄹ", "ㄺ", "ㄻ", "ㄼ", "ㄽ", "ㄾ", "ㄿ", "ㅀ", "ㅁ", "ㅂ", "ㅄ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ" };
    static int[] intEnd = { 1, 0, 4, 0, 8, 0, 16, 0, 17, 0, 19, 0, 20, 0, 21 };
    private static ushort mUniCodeBase = 0xAC00;
    private static ushort mUniCodeLast = 0xD79F;
    public static string getRandomKorean(Random random)
    {
        int rFirst = random.Next(intFirst.Length);
        int rMiddle = random.Next(intMiddle.Length);
        int rEnd = random.Next(intEnd.Length);
        return fixKorean(intFirst[rFirst], intMiddle[rMiddle], intEnd[rEnd]);
    }
    private static string fixKorean(int f, int m, int e)
    {
        int iUniCode;
        iUniCode = mUniCodeBase + (f * 21 + m) * 28 + e;
        char temp = Convert.ToChar(iUniCode);
        return temp.ToString();
    }
}

초성, 중성, 종성 순으로 값을 받아서 랜덤으로 한글을 생성해주는 함수다.

인터넷에서 찾은 함수를 조금 수정했다.

기본적으로는 유니코드로 한글을 만드는 방법에 초,중,종성을 랜덤으로 뽑아 넣는 방식인데

한글에는 없는 단어들이 많이 나오는 경우가 있어 최대한 줄여보기 위해 필요한 값들만 int로 뽑아냈다.

초성 0은 'ㄱ', 중성 0은 'ㅏ' But 종성 0은 받침이 없는 것이다. 조심하자!