본문 바로가기

Try Programs

솔플 테트리스 만들기 2

솔플 테트리스 프로젝트 2


CollisionCheck() 함수 , MoveSwitch(int a) 함수 구현하기



1. CollisionCheck()


이 함수는 영문 뜻 그대로 충돌 검사를 확인하는 함수로 쓰일 것이다.

블록이 바닥에 떨어지거나 맵 밖으로 나가지 못하게 제한하는 함수로써

원래 있던 블록이 바닥에 닿고 새로운 블록을 그리는 함수에서도 쓰이게 될 것이며,

블록을 돌리는 함수나 키 입력을 받아 블록을 움직이게 만들 함수 등에도 쓰이게 될 것이다.


그럼 이 CollisionCheck()함수의 구현을 보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
int CollisionCheck()        //충돌 검사 (블록이 떨어졌나 & 맵 밖으로 못 나가게 하는 조건)
{
    int i, j;
    for (i = 0; i<22; i++)
    {
        for (j = 0; j<12; j++)
        {
            if (collisionMap[i][j] != immutabilityMap[i][j])
                return 1;
        }
    }
    return 0;
}
cs


다른 함수들에 비해 그나마 간단하며 간략한 코드이다.

변하지 않은 맵의 데이터를 항상 가지고 있는 immutabilityMap 변수의 데이터

블록이 움직이거나 새로운 블록을 가져올 때 등, 여러 상황에서 데이터가 바뀌는

collisionMap 변수의 데이터와 비교를 해서 서로 다르면 1을 반환하고

같으면 0을 반환시키는 원리이다. (TRUE / FALSE)



2. MoveSwitch(int a) 함수


이 함수는 매개변수 a에 따라 움직임을 나타내는 변수 Move, Move2를 조정하는 함수이다.

Switch는 주로 On/Off 2가지 선택이 있기 때문에 매개변수 a에 들어가는 값은 0, 1 이 2가지이다.

함수의 내용은 다음과 같다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void MoveSwitch(int a)
{
    int i;
    for (i = 0; i<4; i++)
    {
        if (map[y + 1][x + i] >= 1)
        {
            if (a == 0)
                Move = 0;
            else if (a == 1)
                Move2 = 0;
            break;
        }
    }
}
cs


이 함수의 최종적 목표는 Move, Move2변수를 조정하는 데 있다.

혹시나 비슷한 스위치 함수를 만들 때 참고했으면 좋겠다.


(블록은 키입력을 받을 때 좌, 우로 움직이며

계속 아래로 떨어지는 것을 나타내기 위해 if조건문에 map[y+1][x+i]와 같이

x축에 변수 i가 들어간 모습을 알 수 있다.)



(도움을 주신 분: 레고(LEGO) : https://blog.naver.com/hosung337)