메뉴 건너뛰기

게임
2021.10.20 03:41

한붓 그리기 경우의 수 계산

조회 수 209 추천 수 0 댓글 0


A1.PNG

 

게임 속에 미니게임을 하나 넣기 위해

이런 툴을 대충 만들어다 작업자에게 던졌고

그 아웃풋이 이렇게 저렇게 전달되어 다시 나에게 온 걸 보니 상태가 영 좋지 않았다.

 

그렇다고 내가 직접 500개 되는 스테이지 후보에서 골라보자니

좀 귀찮았다.

 

한붓 그리기를

오일러 트레일(보통 한붓 그리기)

오일러 서킷(출발점으로 돌아오는 버전)

라고 한다는데 대충 구글링을 해본 결과 대강 손수 만들어서 쓰고 버리는 게 더 빠를 것 같아서 만들어보았다.

 

 

 

 

public class OneLineDrawLevelClass {
    public string levelId;
    public int levelIndex;
    public List<Vector2> points = new List<Vector2>();
    public List<int> connectionFromList = new List<int>();
    public List<int> connectionToList = new List<int>();

}

 

 

 

 

for (int i = 0; i < levelClasses.Length; i++) {
            List<int> fromList = new List<int>();
            List<int> toList = new List<int>();
            for (int c = 0; c < levelClasses[i].connectionFromList.Count; c++) {
                fromList.Add(levelClasses[i].connectionFromList[c]);
                toList.Add(levelClasses[i].connectionToList[c]);
                fromList.Add(levelClasses[i].connectionToList[c]);
                toList.Add(levelClasses[i].connectionFromList[c]);
            }

            int failCount = 0;
            int sucessCount = 0;
            for (int p = 0; p < levelClasses[i].points.Count; p++) {
                (int, int) temp = TryPath(p, fromList, toList);
                sucessCount += temp.Item1;
                failCount += temp.Item2;
            }

            //Debug.Log(levelClasses[i].levelId + " 레벨. 성공: " + sucessCount + " 실패:" + failCount);
        }

 

 

 

 

 

 

    private (int, int) TryPath(int startPos, List<int> remainFrom, List<int> remainTo) {

        int successCount = 0;
        int failCount = 0;

        List<int> startPossibility = new List<int>();
        for (int i = 0; i < remainFrom.Count; i++)
            if (remainFrom[i] == startPos) startPossibility.Add(i);

        
        for (int i = 0; i < startPossibility.Count; i++) {
            int foundIndex = startPossibility[i];
            int destPos = remainTo[foundIndex];
            

            if ((foundIndex % 2) == 1) foundIndex--;

            List<int> copyRemainFrom = new List<int>(remainFrom);
            List<int> copyRemainTo = new List<int>(remainTo);
            copyRemainFrom.RemoveAt(foundIndex);
            copyRemainTo.RemoveAt(foundIndex);
            copyRemainFrom.RemoveAt(foundIndex);
            copyRemainTo.RemoveAt(foundIndex);

            
            if (copyRemainFrom.Count == 0) { //선 다 썼으면 성공이지.
                
                successCount++;
            } else { //선 남았으면 계속 ㄱㄱ
                (int, int) temp = TryPath(destPos, copyRemainFrom, copyRemainTo);
                successCount += temp.Item1;
                failCount += temp.Item2;
            }
        }

        if (startPossibility.Count == 0) failCount++;

        return (successCount, failCount);
        
    }

 

 

 

A0.PNG

 

그래서 컴퓨터한테 시켰다.

아무 점에서 아무 선부터 시작했을 때 경우의 수, 성공 수, 실패 수, 성공률을 구해서 CSV로 뽑았다.

그랬더니 몬가... 몬가 규칙성도 보이고 한다.

 

 

그런데 난이도 좀 높은 문제를 시켰더니 하루종일 연산만 하다가 뻗었다.

유니티로 만들어서 속도가 느려서 더 끔찍하다.

개떡같이 만들긴 했지만 이렇게까지 느릴 줄이야.

 

 

되는 만큼만 구하고 나머지는 직접 선출해야징.

 

 


사진 및 파일 첨부

여기에 파일을 끌어 놓거나 왼쪽의 버튼을 클릭하세요.

파일 용량 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
33 비주얼 블렌더 맛보기 1 file 조루나 2022.07.21 158
32 게임 파티클 메쉬와 Optimize Mesh Data의 저주 file 조루나 2022.07.14 111
31 게임 유니티 2D(2.5D) 타일 에셋 - Super Tilemap Editor file 조루나 2022.07.06 135
30 게임 유니티 컬러 스페이스와 스파인 HSL 색 변경의 역습 file 조루나 2022.07.06 266
29 게임 앱 이름에 따라 프레임이 다르게 나온다... file 조루나 2022.06.21 119
28 게임 유니티 스파인 슬롯에 HSL 색상 변경(=포토샵 Colorize) 3 file 조루나 2022.05.13 276
27 비주얼 크기의 1~5 나타내는 액체용기 픽토그램 file 조루나 2022.04.07 119
26 게임 배경 하늘 경계선이 마음에 안 들어서 그래디언트 추가 file 조루나 2022.03.31 121
25 게임 Shader를 적용 시킨 UI에 ZWrite가 On 되어 있으면 안되나? file 조루나 2022.03.29 126
24 게임 유니티 Spine 셰이더 고쳐서 부위별 Hue-Shift 적용시키기 file 조루나 2022.03.10 165
23 게임 유니티 URP에 쓸 투명 원 쇼크 웨이브 file 조루나 2021.12.27 182
» 게임 한붓 그리기 경우의 수 계산 게임 속에 미니게임을 하나 넣기 위해 이런 툴을 대충 만들어다 작업자에게 던졌고 그 아웃풋이 이렇게 저렇게 전달되어 다시 나에게 온 걸 보니 상태가 영 좋지 ... file 조루나 2021.10.20 209
21 게임 터렛 관절 무-빙- file 조루나 2021.07.23 233
20 게임 게임에 한 붓 그리기 퍼즐을 넣고 싶다길래... file 조루나 2021.07.15 201
19 게임 2D 쿼터뷰 타일 게임을 3D처럼 해달라잖아! file 조루나 2021.05.27 262
18 게임 2D 쿼터뷰 게임의 스프라이트 Sorting Order 정렬 방법 file 조루나 2021.04.30 287
17 게임 스크롤러 에셋과 VerticalLayoutGroup의 저주 file 조루나 2021.03.10 250
16 게임 스프라이트 하프 밉맵 file 조루나 2020.11.20 201
15 게임 3D 입문2. Mixamo 애니메이션으로 날로 먹기 1 file 조루나 2020.11.10 258
14 게임 3D 입문. Vroid Studio로 날먹 해보기. file 조루나 2020.11.09 321
Board Pagination Prev 1 2 3 Next
/ 3