'Project (C++)'에 해당되는 글 24건

  1. 2019.11.26 3주차 - 둘째날
  2. 2019.11.25 3주차 - 첫째날
  3. 2019.11.22 2주차 - 다섯째날
  4. 2019.11.21 2주차 - 넷째날
  5. 2019.11.20 2주차 - 셋째날

오늘의 할 일:
0) 챡! 들러붙는 거 수정하기..... clear
여유되면 매치 4개 5개 추가하기..  .....pass

 

 

오늘 한 일:

1) 블록 생성 방법 수정  - 삭제하는 블록들이 삭제하기 전 생성 -> 0번째줄 블록만 생성. 나머진 0번째 줄 애들이 내려가며 생성

2) 블록이 줄줄이 겹쳐서 내려오다가 1번째 줄이 먼저 도착/ 아니면 한참 뒤에 내려오는 거 수정

3) 프레임 속도 개선 - 중복된 백터 검색 삭제, 불필요 검사 삭제

 

 

 

 

 

 

 

 

 

일단 0) 챡 들러붙는 문제는 예상대로 이동한 블록의 검사문이 원인... 맞았다...

특히 가로세로 중간에 있는 블록 검사문.

이게 밑에서 윗줄 중간에 가는건 아무 문제가 없는데,

좌우 이동시 이 검사문에 걸리면 자기 자신이 검사 대상에 들어가, 일치하는 것으로 나온다...

그걸 엄청난 디버깅과 고민과 생각 끝에 알아냈는데 해결법에 고심하다가...

어?? 어차피 내 자신이 그 가운데 낀블럭의 검사대상(좌우 양쪽)에 들어가면 제외 시키면 되잖아???? 하는 번뜩! 떠오른 생각때메..

 

	Block* _target2;
	Block* _target3;

	
	//가로 중간에 낀블럭일 때
	_target2 = getNearBlock(_other, LEFT);
	_target3 = getNearBlock(_other, RIGHT);
	//가로로 이동 했을때 검사 막기 위해서 검사 대상이 나 자신일 경우 제외
	if (_target != _target2 && _target !=_target3 && _target2 !=NULL && _target3 !=NULL) 
	{
		if (_targetBlockType == _target2->getNum() && _targetBlockType == _target3->getNum())
		{
			return true;
		}
	}

 

이렇게 조건을 수정했더닠ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

깔 ㅡ 끔. 세상 편 ㅡ 안.

결국 숫자와 블록들로 검사하는 함수같은건 필요없던 것이닼ㅋㅋㅋㅋ

 

되돌아가는 매치는 그냥 가로세로 3개만 검사하고

전체검사하는거에서 카운트 ++ 해서 점수 더주면 될듯.

 

 

 

 

2) 블록이 삭제하며 생성할 때는 자신의 좌표의 -만큼 위에 생성하게 했다. 그렇게하면 늦게는 떨어져도 겹치지는 않으니까... 근데 삭제하는 애들은 그냥 삭제만 되고 0번째줄이 내려갈때 생성하는게 맞는거 같아서, 그렇게 다시 바꿨더니 ... 포개져서 생성되는 관계로 포개져서 내려오고 상대적으로 가까운 0번째줄이 먼저 도착하는 현상이 생긴다..ㅠㅠ

 

별 짓을 다 하다가... 생각해보니 이거 상호참조 되어있잖아? 블록이랑 보드랑.

 

그럼 블록이 보드한테 내 밑 블록 좀 소환해 달라고 한 다음...

내 밑 블록 rect.top이 내rect.bottom에서 여백 만큼 벌어졌을 때 내려가게 하면 되자너...?

어차피 밑 블럭 없으면 null이 소환되니까 그때를 예외를 넣어주면 해결.

 

 

.....

뭔가... 오래 고민하다가.. 

백터 쓰지말걸..ㅠㅠ 클래스 쓰지 말걸 그랬나..ㅠㅠ 라며 절망에 빠지고... 

한달프로젝트를 지난 맵툴 프로젝트였던 닭크서울을 개선해서 마무리 해야겠다.. 이런 느낌으로 마음을 비우고 다시 코드를 봤더니... 쨘 ㅡ 하고 해결되어버렸다...

 

 

근데 백터 대신 배열 쓰는것이 좋을 거 같기도 하다.. 속도면에서..

하지만 그건 급한게 아니니까!

 

 

내일의 할 일:

블럭 사이즈들 줄이고

위에 코난 달리는거 띄우쟈.

블록들에 이미지도 씌우쟈

 

야호 드디어 이미지 시작!

 

 

 

 

 

 

 

 

 

 

 

 

'Project (C++) > 1 Month Project' 카테고리의 다른 글

3주차 - 넷째날  (0) 2019.11.28
3주차 - 셋째날  (0) 2019.11.27
3주차 - 첫째날  (0) 2019.11.25
2주차 - 다섯째날  (0) 2019.11.22
2주차 - 넷째날  (0) 2019.11.21
Posted by 파인애옹
,

오늘의 할 일

클릭하면 바로 삭제하는거 개선

프레임수 떨어지는 것 개선 

매치검사 함수 개선 

.........

 

 

열심히 했지만 한게 없다.. 울고 싶다...아 울까.

 

 

 

 

 

 

0) tempGoalIndex 생성

블록이 교체중에 일치하지않음에도 불구하고 위에서 신규블록을 생성하는... 그런 현상을 막기위해

임시로 움직이는 척! 하기위한 인덱스값을 주었다.

그런 의미에서 매치를 미리 해서, 매치하는게 주변에 있으면 true 반환, 그대로 goalIndex를 바꿔주고

그렇지 않으면 tempGoalIndex에 움직여야 할 곳의 좌표를 주고, 되돌아가야 한다는 bool을 설정했다.

 

1) 블록 이동 조건 수정

0번을 하기 위해서는 블록의 moveBlock()함수를 수정해야 했다.

해당 함수에 인자값으로 어느 인덱스로 이동해야하는지 지정하도록 수정했다.

 

그러면 일치검사에서 일치하지 않으면 moveBlock(tempIndex) 이런식으로 할 수 있다..

tempIndex위치에 가면, 돌아가야 한다는 bool을 다시 false로 바꿔주면, 

현재위치와 index위치가 다르기에 알아서 돌아간다..

 

근데.. 움직였을 때, 가로세로 어느것 하나가 일치하는게 있으면 안돌아간다..

아 왜 진짜 왬ㄴㄹ옴ㄴㅇ로ㅕㅓㅣㅏㅏㅣ 이중if가 먹히지 않는거야 왜 ...

이거는 내일 다시 뜯어봐야 겠다 ㅠ.

코드 뜯어보다가 속터져 진짜..

임시인덱스로 움직이고 다시 검사하게 할까? 아닌데에..

 

2) 매치 함수 수정

일전에는 그냥 단순히 블록과 방향을 인자로 주면, 그 방향의 블록과 일치하는지를 검사했다.

그런데 1번블록의 값과 2번블록 주변이랑 비교를 해야하는데..

기존의 걸로 하면 그냥 1번블록 주변이랑 비교를 하더라..ㅠㅠ

 

그래서 2번블록을 기준으로 보는거지만, 1번블록의 블록종류로 봐야하기 때문에..

1번블록의 종류를 인자로 하나 더 받는 함수를 추가했다.. 

근데.. 이게 잘 안먹혀서 1번의 문제가 생기는 듯..

 

하.. 미치겠네..

눈앞이 깜깜스. ㅠ 왜 2번매치가 안먹히는지 이해가 안돼....

 

 

// 왼쪽 끝에 붙었을 때
if (isSameEachBlock(_blockType, _target1, RIGHT))
{
	_target2 = getNearBlock(_target1, RIGHT);
	if (isSameEachBlock(_blockType, _target2, RIGHT))
	{
		return isMatched = true;
	}
} 

 

//지정된 타입과, 해당블록의 방향에 있는 타입이 일치하는지
bool BlockBoard::isSameEachBlock(int _blockType, Block * _target1, DIRECTION _direction)
{
	bool isSame = false;

	if (!isSideNullBlock(_target1, _direction))
	{
		Block* _target2 = getNearBlock(_target1, _direction);
		{
			int num1 = _blockType;
			int num2 = _target2->getNum();

			if (num1 == num2)
			{
				isSame = true;
			}
		}
	}
	return isSame;
}

 

분명 이런식으로 비교하는 애들이 다 잘못되서... 낀애들 아닌 가생이에 붙는애들 함수가 다 이상한거 같은데..

낼 말짱한 정신으로 다시 봐야겠다..

 

아아 피곤해에..

기한 내에 끝낼 수 있을 까  ㅠ ㅠ

 

 

내일의 할 일:

챡! 들러붙는 거 수정하기

여유되면 매치 4개 5개 추가하기..

 

내일까지만 해보고.. 뭔가 영 답이 없다 싶으면 그냥 이미지 붙이는거 시작해야겠다..

 

 

'Project (C++) > 1 Month Project' 카테고리의 다른 글

3주차 - 셋째날  (0) 2019.11.27
3주차 - 둘째날  (0) 2019.11.26
2주차 - 다섯째날  (0) 2019.11.22
2주차 - 넷째날  (0) 2019.11.21
2주차 - 셋째날  (0) 2019.11.20
Posted by 파인애옹
,

오늘의 할 일

3개 매치 조건 및 삭제 등등 확인. ..... clear★

 

 

 

 

오늘 한 일

1. 어제 만들었던 이동한 블록 기준으로 3개 매칭 계산 함수 (6가지 조건) 수정

--> 불필요한 중복 조건 삭제

 

2. 블록 삭제 함수 발동 조건 수정

1) 모든 블록이 멈추어 있을 때 자동으로 검사 (각개 블록이 보드의 변수 값을 true  또는 false로 바꿈)

2) 마우스로 블록을 교체 할 때 주변블럭 3개 검사

 

3. 블록 이동 조건 수정

1) isDownBlockStillMoving() 이란 함수를 만듦. 해당 함수는 보드에 있는,,

인자값으로 받은 블록의 아랫줄 블록이 움직이는지를 검사하여 반환하고,

밑에가 움직이지 않는다면 아래가 빈칸인지 검사해서 내려가게 함.

===> 이게 올바른 솔루션인지 ? 사실 좀 헷갈림. 생각을 좀 더 해봐야할 듯..

===> 그런데 이렇게 했더니 상위에서 구멍이 뽕뽕 뚫리는게 사라진 것 같은 건 기분탓..?

 

 

4. 마우스 클릭 해서 두 블록 선택했을 때 조건 변경

이게 제일 오래 걸렸다..

마우스 충돌 문제 때문에 어제 선택한 블록의 주변 값중에 null 블록이 있으면, 임시로 1픽셀짜리 렉트를 만들었는데..

아무래도 아닌 것 같아서..

밤새 고민하다가 인덱스값 기준으로 하게 했다.

그리고 블록들이 보드에 "나 매치됐어 삭제해줭" 하는 명령도 내리게 고쳤다..

밤새 머리속으로 코드를 생각해놨던 거라.. 그 내용으로 고치는데 한 10분?정도 걸렸었고..

벡터가 터지기 시작했다.. ㅠㅠㅠㅠㅠㅠ 그리고 멘탈도 터지고 ㅠㅠㅠ

5시간동안 정말 여기저기 중단점 찍어서 한줄씩 돌리고...

선택하자마자 터져서, 혹시 임시로 저장하는 firstBlock에 NULL같은게 들어갔나 엄청 뜯어보고 ㅠㅠ

검색해도 마땅히 속시원하게 나오지도 않았다..

그러다가 결국 헬프를 요청했고....역시나.. 천재개발자님의 조언으로 ㅠㅠ 의외로 쉽게 해결했다...

 

Visual studio 2017

오류명 : 예외가 발생함 

예외가 throw됨: 읽기 액세스 위반입니다. _Mycont이(가) nullptr였습니다.

 

그리고 오른쪽 호출스택을 보면, 예외 중단점은 BlockBoard 클래스의 update함수 62번째 줄이었다.

그 62번째 줄은 blocks들을 돌며 update()를 해주는 for문의 선언문..........

결론부터 말하면 iterator가 오류가 있었던 것이다..

예외가 발생함 이라고 뜨는 메세지박스가 가리키는 코드가 ++에서 오류를 냈다고도 알려주고 있고..

 

벡터(이터레이터)의 오류가 생겼던 이유는.. 결론부터 말하면,

blocks 라는 벡터를 update()를 해주는데 이터레이터가 도는 중간에 벡터값이 변경이 되서이다..

 

데이터가 크기가 변경되면 그 크기 만큼의 공간을 찾아 함께 움직이고, <>안의 크기만큼 증가된 주소값을 찾아다니는 이터레이터가 길을 잃게 되면 저 오류가 생기는 것이었다..

 

혹시나 해서 매치됐을 때 지워주는 함수도 블록시켰는데 계속 오류가 나서 ㅠㅠ

그래서 울뻔했는데....ㅋㅋㅋ 알고보니 블록들이 개별적으로 "나 지워줭!!!"하는 함수를 보드쪽에 호출하고 있었던 것이다 ㅋㅋㅋㅋㅋㅋ

 

그래서 수업 끝나기 1시간 전에 결국 그 오류를 잡아냈고... 수정하고... 많이 좋아졌다.

 

근데 멈춰있는 블록들만 별도로 검사해서 터지게 하려고 했는데,, 으.. 프레임수가 엄청 떨어지고 있다.

 

 

 

주말에는 김장하러 시골 내려가야해서 작업은 못할 것 같고.

 

월요일부터는 몇가지 기능추가 하면서 파파파바ㅏㅂ박 진도를 빼야겠다.

얼추 베이스가 끝난 것 같아서 뿌ㅡ듯.

 

나도 애니팡처럼 하나 터질때 다른거 못움직이게 그냥 막아버리면 편할텐데.... 으으.. 진정한 갓게임 쓰리메치 비쥬얼드를 덕후가 되어버려서.. 쩔수없다...

 

 

월요일에 할 일

클릭하면 바로 삭제하는거 개선

프레임수 떨어지는 것 개선 - 블록 검사 속도 잘 나게.. 절반을 쪼개서 검사할까?

매치검사 함수 개선 - 3개 4개 5개 검사조건이 의외로 겹치고 경우의 수도 많아서... 예외도 많고..그래서 생각할거리가 많고 오래걸리는 듯.. 매치검사를 아예 전체적으로 뜯어 고쳐야 할수도..

 

 

 

 

 

'Project (C++) > 1 Month Project' 카테고리의 다른 글

3주차 - 둘째날  (0) 2019.11.26
3주차 - 첫째날  (0) 2019.11.25
2주차 - 넷째날  (0) 2019.11.21
2주차 - 셋째날  (0) 2019.11.20
2주차 - 둘째날  (0) 2019.11.19
Posted by 파인애옹
,

오늘의 할일

오늘 만든 코드들 적용해서 블록 터트리고 내려오게 하기. .......... clear

0) 일치하지 않으면 되돌아가기                                     .......... clear

특수블럭 옵션 추가하기                                           .......... ....?

 

 

 

오늘 한 일

1) 두번째 클릭시, 상하좌우가 아니면 reset하는 부분 함수로 뺌

2) 기준블록과 방향으로 블록 가져오는 함수 수정

3) 기준블록과 지시한 방향의 숫자가 같은지 확인하는 함수 수정

4) 밑줄로 내려가는 함수 호출 조건 수정 

5) 블록 움직였을 때, 움직인 블록 기준으로 주변 블록 매치 확인(3개만)

 

 

 

 

 

 

1) 두번째 클릭시, 상하좌우가 아니면 reset하는 부분 함수로 뺌

2) 기준블록과 방향으로 블록 가져오는 함수 수정

사실 이거 말고도 많은 부분을 함수로 빼서 불러오는 식으로 바꾸었다.

원래 DIRECTION 기준으로 주위 블록을 가져올 때, 주변에 없으면 그냥 기준블록을 반환하게 했는데..

뭔가 아닌 것 같아서 NULL로 반환하기로 바꾸었다.

그랬더니 두번째 블록을 클릭해서 선택하는 함수의 예외처리 쪽에서 오류가 발생,..

4방향 블록이 아닌걸 클릭하면 첫번째 블록 선택을 reset 해야하는데,,

4방향 블록 중 하나가 NULL이면 오류가 난다..

그래서 NULL일때, 그 클릭 조건을 대용할 RECT를 임의로 1픽셀짜리 구석탱이에 만들어주고 처리했다.. 

 

 

 

3) 기준블록과 지시한 방향의 숫자가 같은지 확인하는 함수 생성

블록을 바꾼 이후 일치하는지 검색해서 사라질때가 너무 오래걸렸다.

그래서 움직인 블록을 기준으로 검사하기 위해서 필요한 함수라 만듦..

 

4) 밑줄로 내려가는 함수 호출 조건 수정

이전에는 보드쪽에서 하나씩 검사하면서 내려줬는데,,

이젠 그냥 블록이 보드에 요청해서 검사하는 식으로 바꾸었다.

 

 

 

 

0) 일치하지 않으면 되돌아가기

< 블록에 추가된 변수 >

long selectedTime // 교체할때 선택된 시간
bool flagMoveBack //되돌아가야하는지
POINT lastGoalIndex // 교체되기 전 인덱스 임시저장용 변수

 

블록이 교체될 때, 블록에게 새로운 인덱스를 주기 전, 현재 인덱스를 저장하게 했다. 그리고 선택된 시간도..

그리고 보드쪽에서 주변에 일치하는게 있는지 검사를 한다. 

교체한 후에 만약 일치하지 않으면, 블록한테 "야, 너 되돌아가야해!" 라고 플레그를 세운다.

블록은 일정 시간이 지난 후에, 자신의 플레그를 체크하고,

만약 돌아야하면 가장 최근 블록을 다시 현재의 인덱스로 바꾼다.

 

5) 블록 움직였을 때, 움직인 블록 기준으로 주변 블록 매치 확인(3개만)

주변 블록들이 멈춰있다면,, 검사해서 삭제하게 했다. 근데 이부분 뭔가 오류가 있는 듯. .ㅠㅠ

근데 영상에 보면.. ㅠㅠㅠㅠㅠ  막 블록이 겹치기도 하고.... 아오..ㅠ

 

 

 

 

내일의 할 일

3개 매치 조건 및 삭제 등등 확인.

 

아니 3개 매치라고해도./

1) 중간에 꼈을 때 가로

2) 중간에 꼈을 때 세로

3) 4) 가로 양쪽 끝

5) 6) 세로 양쪽 끝

 

6개 조건이야......... 

아 이러니 버그가 안생기나..

 

 

 

'Project (C++) > 1 Month Project' 카테고리의 다른 글

3주차 - 첫째날  (0) 2019.11.25
2주차 - 다섯째날  (0) 2019.11.22
2주차 - 셋째날  (0) 2019.11.20
2주차 - 둘째날  (0) 2019.11.19
2주차 - 첫째날  (0) 2019.11.18
Posted by 파인애옹
,

오늘의 할일

가로세로 일치 조건 검사문 수정 ...............clear

기존에 만든 함수 수정해서 상하좌우 블록 가져오는 함수들에 대입하기...............clear

 

 

 

오늘의 한 일..

 

 

< 코드 검사(Unit test)>

 1) 상하좌우 블록 유무 검사 함수 검사

 2) 상하좌우 블록 가져오기 함수 검사

 

< 코드 수정>

 3) 매치 검사 수정 (상시검사 or 클릭이동 검사 -> 블록이 움직이지 않을 때 검사 하도록, 보드에 신호받아 처리)

 4) 줄 이동 함수 수정 (밑에서 위의 블록 끌어내리기 -> 밑에 블록이 있는지 체크 후 이동) 

5) 블록 백터 이터레이터로 선언한 맴버변수를 블록 클래스로 변경..

6) 중복되는 변수들 안쓰는 함수들 정리

 

 

 

 

 

너무 종일 고생해서... 나온건 없는데 고생을 엄청 해서..

길게 포스팅 할 여력이 없다..

 

1. 가운데에 부분에 있는 블록이,, 상하 좌우가 없어진 상태에서 무언가를 하려고 하면 가끔 터짐.

2. 가로블록이 없어질 때 오류가 가끔 많이 자주 생김..

 

결론적으론 해결 한 것 같다.

일단 하나씩 하나씩.. 제일 중요하다 생각하는, 상하좌우 블록 가져오기, 일치 조건 검사문 테스트를 했다..

여기에서.. 문제가 우선 하나 발견.

상하좌우 블록이 아닌 블록을 클릭했을 때 취소처리를 하는데..

상하좌우 블록 가져오기와 상하좌우 방향 반환하는 함수 등등에서 예외처리가 안되어가지고 ㅠㅠ

그래서 계속 오류가 났었다..

return 값이 있는 함수에선,, 반드시 if문과 상관없는 default return 값이 있어야한다... 메모..메모..

 

 

 

모든 함수를 다 막았다..

마우스 클릭했을 때 상하좌우 블록이 NULL인지 체크하는 변수를 만들어서,

인자로 클릭한 블록 클래스를 넣어줘서 테스트.

 

성공적..

이걸 시작으로 몇개 함수를 정리하고.. 전체적으로 코드갈이를 싸악 했다..

 

 

 

 

 

 

블록이 사라지면서 위에 있는 블록을 가지고 내려오는 접근방법은.. 

아무리 생각해봐도 잘못된 방법 인 것 같았다.

객체지향 아닌가 객체지향향! 각각의 객체들이 알아서 움직이고 그래야징.

 

 

그래서 생각하고 생각한 결과... 

현재 (어제까지) 상태였던 코드 이동 조건 / 매치 삭제 후 행동을 바꿨다.

 

 

* 밑에서 블록이 내려가며 위에 있는 블록한테 자기 인덱스를 건네주는 방법이 아닌,,

블록이 "내 밑에 뭐 있어?" 라고 물어보고,, 없으면

보드가 "없네~ 내려가~~" 라고 하는 형식으로.

 

* 블록이 사라질 때, "나 간다.. 안뇽..(일치되서 삭제함수 불림)" 하면,

보드가 "아앗,, 신규블록 생성!!!" 하도록..

 

 

그리고 그것들을 위해 오늘 가장 시간을 많이 투자하고 고생하고.. 삽질도 많이했던..

결과물이다..

 

1) 블록 지우기

2) -1 라인에 신규 블록 생성

3) 블록들이 내 밑에 누구있어?? 라면서 검사 요청

4) 보드가 검사하고 밑에 없으면 밑의 인덱스를 반환해줌
5) 각자 자신의 인덱스위치로 알아서 감.

 

 

 

하.. ... 뿌듯해.. 

별거 아닌거 같은데.. ㅠㅠ.. 왜 고작 이걸로.. 이렇게... 고생을 하고 있는지..

아니면 별거인건가..? 

 

 

 

내일의 할일

오늘 만든 코드들 적용해서 블록 터트리고 내려오게 하기. (금방 하겠지..?)

일치하지 않으면 되돌아가기

특수블럭 옵션 추가하기

 

흐엥.. 할일이 밀려나고 있다..

그래도 뭔가 제대로 된 방향으로 가고 있는 것 같아서 혼자 그걸로 만족.

 

짧게 서너줄만 할랬는데 엄청 길게썼네... ㅎ

'Project (C++) > 1 Month Project' 카테고리의 다른 글

2주차 - 다섯째날  (0) 2019.11.22
2주차 - 넷째날  (0) 2019.11.21
2주차 - 둘째날  (0) 2019.11.19
2주차 - 첫째날  (0) 2019.11.18
1주차 - 여섯째날  (0) 2019.11.16
Posted by 파인애옹
,