워리어 콤보 모작 개발일지

워리어콤보 개발일지 - 뒤로 갈 때 "일치함" 콘솔창에 띄우기

다모아 2023. 9. 19. 00:26

할 일


stack.ToArray()로 스택 0번부터 ~ i번까지 정보 가져오기

 

내가 생각한 출력 결과물 (아래 좌표라 적혀있는거임)

 

해결방법

stack.ToArray() -> 배열에 담아서 Debug.Log 찍기

TestSaveLocation에는 type, row, col 값이 들어있는데 이 값을 그냥 stackBlock.ToArray()로 Debug.Log 하면 그냥 Block의 정보만 나왔다. 

어떻게 해야할지 고민하던중 그럼 배열에 넣어서 type값도 가져오고 row, col 값도 가져오자 생각이 들어서 배열에 ToArray를 넣어서 가져오게 되었다.

 


근데 뭔가 생각해보니까

1, 2, 3을 넣는다 가정하면

스택은 3 -> 2 -> 1 순으로 들어가고

큐는 1 -> 2-> 3 순으로 들어가서

스택 Push 할 때 큐 Enqueue 해주면 되는거 아닌가? 싶은 생각이 들었다.

--

근데 배열로도 만들어보고 , 큐로도 만들어봤는데 약간의 문제점들이 있었다.

큐는 
스택이 Push로 4, 3, 2, 1 될 때
큐가 1, 2, 3, 4 인데

스택 4가 큐 3이랑 type, row, col 값이 같으면 둘 다 Pop, Enqueue 하게 해야함, 근데
스택은 Push가 한번 됐으니까 2번 해줘야할듯? --> 안될듯

 

안되는 이유 : 결국 type, col, row 값을 알려면 배열로 가져와서 알 수 밖에 없었음.

그러면 스택과 큐 모두 배열로 만들어줘서 type, col, row 값을 추출해줄 수 밖에 없어서 너무 비효율 같았음

 

배열로 만들어서 하다가

for(int i = 0; i < stackBlock.Count; i++) {
	TestSaveLocation info = stackBlock.ToArray();
    Debug.LogFormat("{0} : ({1},{2})", info[i].type, info[i].row, info[i].col);
}

이런 식으로 만들어서 썼었는데

 

강사님이 말씀해주신 Prev, Curr, Next[나는 this.location 걸로 썼다.]

로 변수를 구성해서 만들었다.

 


내가 마우스를 되돌아갔을 때 Prev와 Next가 일치한 type, col, row 값이라면 Debug.Log로 "일치함"을 출력하라

 

이걸 계속 못하고 있었는데 그래서 엄청 많이 고민하였다.

 

고민의 흔적들..

더보기

할 일 : 스택 Pop 하면서 선 뒤로 긋기

어떻게 뒤로가게 할 것인가?
1. 똑같은 색을 마우스가 갔을 때 --> 이건 안됌 2번 째 닿는 것도 똑같은 색임

2. listCount >= 2 일 때, Pop 하고 stack 0번째 gameObject를 SetPosition(0,gameObject)하고
stack 1번 째 gameObject를 SetPosition(1, ...) 해준다!
---> 이것도 아님 [이유 : listCount가 2이상이면 무조건 Pop을 해서..]

3. row, col 값이랑 type이랑 저장된 값이 같으면 Pop하고 선긋자

내가 알고싶은 정보가 뭐야
1 -> 2 -> 3 
      4 <-   순으로 갔을 때
4번째에 2번 자리에 간다고 생각하면
4번째에서 2번째 자리의 row랑 col 값을 알고싶은거??

단순히 생각해서
마우스 Button이 클릭중일 때 다시 3번째에서 2번째 자리로 간다고 생각하면
그냥 2번째 gameObject 마우스가 갔을 때 Pop해줘라
그럼 2번째 정보를 저장해둬야되려나?

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
스택 출력 (좌표) 먼저 해보기 [완]

1. 좌표는 location에 담겨있다
2. 담겨있는 좌표를 어떻게 꺼내지?
마우스 버튼 클릭할 때마다 내가 저장한 스택 메모리들을 출력하게 만들자
스택의 맨 밑에부터 그리면 됌

선으로 그릴 때 배열이나 큐로 변환해서 사용
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
스택 -> 배열 구현한 걸 토대로

1, 2, 3이 들어가면 -------> 내가 하는 부분
스택 : 3 2 1
큐 : 1 2 3

빠지는거
스택 : 3 -> 2 -> 1
큐 : 1 -> 2 -> 3

하지만 스택에서 뺀 값을 큐에 넣어주면?
스택 : 3 2 1
큐 : 3 2 1

빠지는거
스택 : 3 -> 2 -> 1
큐 : 3 -> 2 -> 1 
똑같은데?

스택 -> 배열 -> 큐 로 넣어줘야되나 근데 그렇게까지 사용할 이유가?
큐를 사용하고자 하는 이유가 정보를 뽑아내려고 하는거지

스택이랑 큐에 동시에 넣고
정보는 큐에서 빼오는거 같은데
나는 type, col, row 값을 다른 스크립트에 저장하고 있어서
이게 안되네

아~
나는 무조건 배열로 해야된다
info[i].type, row, col 값이 큐에 저장한 값이랑 같으면 Pop과 Dequeue 해주는거
정보는 testLine에 넣어주고 하면 될듯?

약간 서순이 중요한거 같은데 느낌이

스택이 Push로 4, 3, 2, 1 될 때
큐가 1, 2, 3 인데

스택 4가 큐 3이랑 type, row, col 값이 같으면 둘 다 Pop, Enqueue 하게 해야함, 근데
스택은 Push가 한번 됐으니까 2번 해줘야할듯? --> 안될듯

그냥 내 생각대로면
스택 2개 써서
한 스택이 4, 3, 2, 1 될 때
한 스택은 서순 좀 느리게 해서 3, 2, 1 일 때
4번이랑 3번 row , col, type 같은지 비교해서 하면 될 거 같기도 하고

스택이 Push로 4, 3, 2, 1 될 때
큐가 3, 4 인데

아니다 이게 그냥
큐는 2개 가지고 있는거야 스택 4번이랑 큐 3번이 row, col, type 값이 같으면
일치한다는 정보를 일단 debug해보자

안된다 이게 2개 가지고 있는걸로 하면 2개에서 1개로 돌아올 때 성립이 안됌

그냥 배열로 하자
(-1)번째가 같으면 일치한다는 글 해보자

왜 계속 (3,5) 처음꺼만 알고있을까?

1, 2, 3 기준 배열로 들어오는 순서
스택 : 3, 2, 1
배열 : 1, 2, 3
으로 들어가네
그래서 계속 Count로 찍었을 때 마지막꺼가 나온거
생각 --> Prev, Curv

전꺼랑 현재꺼 저장..
2 curr 들어가면서 stack에 들어가고 prev 안건드리고
prev를 null로 해놓고
curr 하기 전에 prev 에 저장해놓고 curr 한다 debug

변수 2개 정해서 curr , prev 저장해놓기

1. 0개에서 1개 될 때 Curr 에 저장
2. 2개로 넘어갈 때 listCount가 1에서 2로 넘어갈 때 Prev에 Curr값을 저장해놓고
   if문으로 type, col, row 값이 같은지 확인
3-1. 확인 후에 다르다면 현재 Curr값을 저장하고 위에꺼 반복
3-2. 확인 후에 같다면 현재 Curr값을 저장하고 Prev는 저장 X
왔을 때 curr값은 와야함

curr가 먼저 가고 검사하고 prev가 따라오고
next
1. curr가 가고
2. prev가 따라오고

해결방법
변수를 3개
prev, curr, next를 써서 해결하였다.


최종 결과

 

마우스가 같은 곳으로 갈 때 "일치함" 글이 잘 나온다!!

이제 "일치함"상태일 때 Pop해주고 선그리기를 해주면 될 것 같다.