본문 바로가기

ASP.NET_ 낱말퍼즐/화면구성

ASP.NET으로 '낱말잇기 퍼즐'만들기_ 글보기(문제풀기)페이지


프로그램의 방향이 잡혔다면, 내가 잡은 방향에 문제는 없는지 본격적인 작업에 앞서 테스트 해보자.

방향잡기에서 정리한 조건대로 프로그램이 온전히 실행되는지 알기위해,
임의로 "망,둥,이,,오,치,,발,전,기,,열,,자,,,기,,제,,전,구,,품,절" 데이터를 돌려보자.
우선 "망,둥,이,,오,치,,발,전,기,,열,,자,,,기,,제,,전,구,,품,절"로 몇칸의 낱말퍼즐을 만들 수 있는지 체크해야 한다. 


string puzzleStr = "망,둥,이,,오,치,,발,전,기,,열,,자,,,기,,제,,전,구,,품,절";
함수 ArraySetting을 호출해 string 형태의 문제(puzzleStr )를 배열형태로 바꿔준다.
호출방법:  ArraySetting(puzzleStr );
ArraySetting은?
string형식으로 받은 문제배열 형태로 바꿔주는 함수.
string으로 입력받은 문제을 ','단위로 잘라 배열변수(_tempData)에 넣어준다.
string[] _tempData = puzzleStr를 ','단위로 자름.
 string puzzleStr을 배열형태로 만들어주는 함수
 public string[] ArraySetting(string puzzleStr)
    {
        string[] tempData = puzzleStr.Split(',');
        return tempData;
    }


string문제를 배열로 바꿨다면, 배열로 바뀐 문제(_question)를 가지고 번호를 생성하자.
방향잡기에서 만든 조건대로 이전,다음,상위,하위값을 조건으로 명시하고, 조건에 해당하는 배열의 위치에만 번호를 넣어준면 된다.
요렇게~~~~~~
if (OverValue == "" && LowerValue != "" || PreviewValue == "" && NextValue != "")
                {
                    puzzle_number++;
                    pNum[i] = puzzle_number;
                }
자~~ 이제 다음은 어떻게 OverValue, LowerValue, PreviewValue, NextValue를 찾아 내는지다.
배열[0]~배열[24]가 모두 이전,다음,상위,하위값을 가지지 않았기 때문에 
다음과 같이 값을 가지고 있는 아이들만 추려 if문을 돌려줘야 한다.

//다음값은 요렇게~~
Ex) i = 14일 경우 / 5×5 = 25의 num은 5 /  14%5 = 2..4 / 나머지 = (num - 1) / 4 = 4 /이므로 false
Ex) i가 빨간 테두리안의  13일 경우 / 5×5 = 25의 num은 5 /  13%5 = 2..3/ 나머지 = (num - 1) / 3 = 4 /이므로 true

if ((i % num) != num - 1)
{
       NextValue = StrChk(question[i + 1].Trim());
}

호출방법: ArrayNum(_question);
ArrayNum은?

 string [] _question에 번호를 생성해주는 함수 
public int[] ArrayNum(string[] question)

    {
        string PreviewValue = string.Empty;
        string NextValue = string.Empty;
        string OverValue = string.Empty;
        string LowerValue = string.Empty;
        int num = multiplyNum(question.Length);
      
        int puzzle_number = 0;
        int[] pNum = new int[question.Length];

        #region for문
        for (int i = 0; i < question.Length; i++)
        {
            PreviewValue = "";
            NextValue = "";
            OverValue = "";
            LowerValue = "";

            //이전
            if ((i % num) != 0)
            {
                PreviewValue = StrChk(question[i - 1].Trim());
            }
            //다음
            if ((i % num) != num - 1)
            {
                NextValue = StrChk(question[i + 1].Trim());
            }
            //상위값
            if (i >= num)
            {
                OverValue = StrChk(question[i - num].Trim());
            }
            //하위값
            if (i < question.Length - num)
            {
                LowerValue = StrChk(question[i + num].Trim());
            }

            pNum[i] = 0;
            if (question[i] != "")
            {
                if (OverValue == "" && LowerValue != "" || PreviewValue == "" && NextValue != "")
                {
                    puzzle_number++;
                    pNum[i] = puzzle_number;
                }
            }
            
        }
        #endregion
        return pNum;
    }


번호를 생성하는 함수 ArrayNum함수 내에서 사용되는 함수
 MultiplyNum은?  StrChk은?
 테이블이 가로세로 몇 칸으로 구성됐는지 알기위해 
 필요한 이다. <ex 25칸 5*5  num은 '5'>
 int num = multiplyNum(question.Length);
 question.Length = 문제의 길이 = 25
 넘어온 값이 ""인지 아닌지 검사하는 함수다.
 ""라면 그대로 ""를 리턴 할 것 이고, ""이 아니라면 넘어온 값을
 리턴해 줄 것이다.
 여기서 StrChk 함수로 넘어오는 값은 모든칸의 전,후,상,하  의 값이다.
int Length를 나눠 구성값을 만들어주는 함수 
public int multiplyNum(int Length)
    {
        int num = 0;
        for (int i = 3; i < 9; i++)
        {
            int an = Length / i;
            if (i == an)
            {
                num = i;
            }
        }
        return num;
    }
  string question의 값을 체크해서 넘겨주는 함수 
  public string StrChk(string question)
    {
        string returnStr = "";
        if (question != "")
        {
            returnStr = question;
        }
        return returnStr;
    }