Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Header.h"
- #include "Moving.h"
- //충돌검사 함수들
- int CheckShockLeft(XYPOS *p,Block block)
- {
- int i, j;
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] == 1 && pix[X + i][Y + j - 1] < 0)
- return 0;
- }
- }
- return 1;
- }
- int CheckShockRight(XYPOS *p, Block block)
- {
- int i, j;
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] == 1 && pix[X + i][Y + j + 1] < 0)
- return 0;
- }
- }
- return 1;
- }
- int CheckShockDown(XYPOS *p, Block block)
- {
- int i, j;
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] == 1 && pix[X + i + 1][Y + j] < 0)
- return 0;
- }
- }
- return 1;
- }
- int CheckShockSuperDown(XYPOS *p, Block block)
- {
- int testORI;
- int testRES;
- int i=0, j, k;//i,j는 블록 한칸한칸의 검사에 쓰이고, k는 블록전체 이동시 충돌검사를 위해 선언됨
- //i,k는 세로축, j는 가로축
- for (k = 1; X + k < FLOOR_BOUND; k++)
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- testORI = pix[X + i][Y + j];
- testRES = pix[X + i + k][Y + j];
- if (pix[X + i][Y + j] == 1 && pix[X + i + k][Y + j] < 0)
- return k-1;
- }
- }
- }
- return k - 1;
- }
- //블록회전가능여부 체크함수들
- int CheckShockTurn(XYPOS *p, Block block)
- {
- int i, j;
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] == 1 && (pix[(X + j)][Y + ((block.Xlen - 1) - i)]) < 0)
- {
- return 0;//현재 회전 불가능하다면 함수종료
- }
- }
- }
- return 1;//회전 가능하면 1 리턴
- }
- int CheckShockLeftTurn(XYPOS *p, Block block)
- {
- int i, j;
- for (i = 0; i < block.Xlen; i++) //이동후 회전 가능한지 검사하는 for문
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][(Y - 1) + j] == 1 && (pix[(X + j)][(Y - 1) + ((block.Xlen - 1) - i)]) < 0)
- {
- return 0; //왼쪽이동후에도 회전 불가능하다면 함수 종료
- }
- }
- }
- Y--;
- return 1;//회전 가능하면 1 리턴
- }
- int CheckShockRightTurn(XYPOS *p, Block block)
- {
- int i, j;
- for (i = 0; i < block.Xlen; i++) //이동후 회전 가능한지 검사하는 for문
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][(Y + 1) + j] == 1 && (pix[(X + j)][(Y + 1) + ((block.Xlen - 1) - i)]) < 0)
- {
- return 0; //오른쪽이동후에도 회전 불가능하다면 함수 종료
- }
- }
- }
- Y++;
- return 1;//회전 가능하면 1 리턴
- }
- int CheckShock4dLeftTurn(XYPOS *p, Block block)
- {
- int i, j;
- for (i = 0; i < block.Xlen; i++) //이동후 회전 가능한지 검사하는 for문
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] == 1 && (pix[(X + j)][(Y - 1) + ((block.Xlen - 1) - i)]) < 0)
- {
- goto check2; //왼쪽이동후에도 회전 불가능하다면 check2로 이동
- }
- }
- }
- return 1;//좌측으로 한번 이동후 회전 가능하면 1 리턴
- check2:
- for (i = 0; i < block.Xlen; i++) //이동후 회전 가능한지 검사하는 for문
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] == 1 && (pix[(X + j)][(Y - 2) + ((block.Xlen - 1) - i)]) < 0)
- {
- return 0; //왼쪽 두번 이동후에도 회전 불가능하다면 함수 종료
- }
- }
- }
- return 2;//좌측으로 두번 이동후 회전 가능하면 2 리턴
- }
- int CheckShock4dRightTurn(XYPOS *p, Block block)
- {
- int i, j;
- for (i = 0; i < block.Xlen; i++) //이동후 회전 가능한지 검사하는 for문
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] == 1 && (pix[(X + j)][(Y + 1) + ((block.Xlen - 1) - i)]) < 0)
- {
- goto check2; //오른쪽이동후에도 회전 불가능하다면 check2로 이동
- }
- }
- }
- return 1;//우측으로 한번 이동후 회전 가능하면 1 리턴
- check2:
- for (i = 0; i < block.Xlen; i++) //이동후 회전 가능한지 검사하는 for문
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] == 1 && (pix[(X + j)][(Y + 2) + ((block.Xlen - 1) - i)]) < 0)
- {
- return 0; //오른쪽 두번 이동후에도 회전 불가능하다면 함수 종료
- }
- }
- }
- return 2;//우측으로 두번 이동후 회전 가능하면 2 리턴
- }
Advertisement
Add Comment
Please, Sign In to add comment