Guest User

TetrisKoreaWinpra

a guest
Apr 11th, 2015
254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.32 KB | None | 0 0
  1. #include "Header.h"
  2. #include "Moving.h"
  3.  
  4. //충돌검사 함수들
  5. int CheckShockLeft(XYPOS *p,Block block)
  6. {
  7.     int i, j;
  8.  
  9.     for (i = 0; i < block.Xlen; i++)
  10.     {
  11.         for (j = 0; j < block.Ylen; j++)
  12.         {
  13.             if (pix[X + i][Y + j] == 1 && pix[X + i][Y + j - 1] < 0)
  14.                 return 0;
  15.         }
  16.     }
  17.  
  18.     return 1;
  19. }
  20. int CheckShockRight(XYPOS *p, Block block)
  21. {
  22.     int i, j;
  23.  
  24.     for (i = 0; i < block.Xlen; i++)
  25.     {
  26.         for (j = 0; j < block.Ylen; j++)
  27.         {
  28.             if (pix[X + i][Y + j] == 1 && pix[X + i][Y + j + 1] < 0)
  29.                 return 0;
  30.         }
  31.     }
  32.  
  33.     return 1;
  34. }
  35. int CheckShockDown(XYPOS *p, Block block)
  36. {
  37.     int i, j;
  38.     for (i = 0; i < block.Xlen; i++)
  39.     {
  40.         for (j = 0; j < block.Ylen; j++)
  41.         {
  42.             if (pix[X + i][Y + j] == 1 && pix[X + i + 1][Y + j] < 0)
  43.                 return 0;
  44.         }
  45.     }
  46.  
  47.     return 1;
  48. }
  49. int CheckShockSuperDown(XYPOS *p, Block block)
  50. {
  51.     int testORI;
  52.     int testRES;
  53.  
  54.     int i=0, j, k;//i,j는 블록 한칸한칸의 검사에 쓰이고, k는 블록전체 이동시 충돌검사를 위해 선언됨
  55.     //i,k는 세로축, j는 가로축
  56.  
  57.     for (k = 1; X + k < FLOOR_BOUND; k++)
  58.     {
  59.         for (i = 0; i < block.Xlen; i++)
  60.         {
  61.             for (j = 0; j < block.Ylen; j++)
  62.             {
  63.                 testORI = pix[X + i][Y + j];
  64.                 testRES = pix[X + i + k][Y + j];
  65.  
  66.  
  67.                 if (pix[X + i][Y + j] == 1 && pix[X + i + k][Y + j] < 0)
  68.                     return k-1;
  69.             }
  70.         }
  71.     }
  72.     return k - 1;
  73. }
  74.  
  75. //블록회전가능여부 체크함수들
  76. int CheckShockTurn(XYPOS *p, Block block)
  77. {
  78.     int i, j;
  79.  
  80.     for (i = 0; i < block.Xlen; i++)
  81.     {
  82.         for (j = 0; j < block.Ylen; j++)
  83.         {
  84.             if (pix[X + i][Y + j] == 1 && (pix[(X + j)][Y + ((block.Xlen - 1) - i)]) < 0)
  85.             {
  86.                 return 0;//현재 회전 불가능하다면 함수종료
  87.             }
  88.         }
  89.     }
  90.  
  91.     return 1;//회전 가능하면 1 리턴
  92. }
  93. int CheckShockLeftTurn(XYPOS *p, Block block)
  94. {
  95.     int i, j;
  96.  
  97.     for (i = 0; i < block.Xlen; i++) //이동후 회전 가능한지 검사하는 for문
  98.     {
  99.         for (j = 0; j < block.Ylen; j++)
  100.         {
  101.             if (pix[X + i][(Y - 1) + j] == 1 && (pix[(X + j)][(Y - 1) + ((block.Xlen - 1) - i)]) < 0)
  102.             {
  103.                 return 0; //왼쪽이동후에도 회전 불가능하다면 함수 종료
  104.             }
  105.         }
  106.     }
  107.     Y--;
  108.     return 1;//회전 가능하면 1 리턴
  109. }
  110. int CheckShockRightTurn(XYPOS *p, Block block)
  111. {
  112.     int i, j;
  113.  
  114.     for (i = 0; i < block.Xlen; i++) //이동후 회전 가능한지 검사하는 for문
  115.     {
  116.         for (j = 0; j < block.Ylen; j++)
  117.         {
  118.             if (pix[X + i][(Y + 1) + j] == 1 && (pix[(X + j)][(Y + 1) + ((block.Xlen - 1) - i)]) < 0)
  119.             {
  120.                 return 0; //오른쪽이동후에도 회전 불가능하다면 함수 종료
  121.             }
  122.         }
  123.     }
  124.     Y++;
  125.     return 1;//회전 가능하면 1 리턴
  126. }
  127. int CheckShock4dLeftTurn(XYPOS *p, Block block)
  128. {
  129.     int i, j;
  130.  
  131.     for (i = 0; i < block.Xlen; i++) //이동후 회전 가능한지 검사하는 for문
  132.     {
  133.         for (j = 0; j < block.Ylen; j++)
  134.         {
  135.             if (pix[X + i][Y + j] == 1 && (pix[(X + j)][(Y - 1) + ((block.Xlen - 1) - i)]) < 0)
  136.             {
  137.                 goto check2; //왼쪽이동후에도 회전 불가능하다면 check2로 이동
  138.             }
  139.         }
  140.     }
  141.  
  142.     return 1;//좌측으로 한번 이동후 회전 가능하면 1 리턴
  143.  
  144.  
  145.     check2:
  146.     for (i = 0; i < block.Xlen; i++) //이동후 회전 가능한지 검사하는 for문
  147.     {
  148.         for (j = 0; j < block.Ylen; j++)
  149.         {
  150.             if (pix[X + i][Y + j] == 1 && (pix[(X + j)][(Y - 2) + ((block.Xlen - 1) - i)]) < 0)
  151.             {
  152.                 return 0; //왼쪽 두번 이동후에도 회전 불가능하다면 함수 종료
  153.             }
  154.         }
  155.     }
  156.     return 2;//좌측으로 두번 이동후 회전 가능하면 2 리턴
  157. }
  158. int CheckShock4dRightTurn(XYPOS *p, Block block)
  159. {
  160.     int i, j;
  161.  
  162.     for (i = 0; i < block.Xlen; i++) //이동후 회전 가능한지 검사하는 for문
  163.     {
  164.         for (j = 0; j < block.Ylen; j++)
  165.         {
  166.             if (pix[X + i][Y + j] == 1 && (pix[(X + j)][(Y + 1) + ((block.Xlen - 1) - i)]) < 0)
  167.             {
  168.                 goto check2; //오른쪽이동후에도 회전 불가능하다면 check2로 이동
  169.             }
  170.         }
  171.     }
  172.  
  173.     return 1;//우측으로 한번 이동후 회전 가능하면 1 리턴
  174.  
  175.  
  176. check2:
  177.     for (i = 0; i < block.Xlen; i++) //이동후 회전 가능한지 검사하는 for문
  178.     {
  179.         for (j = 0; j < block.Ylen; j++)
  180.         {
  181.             if (pix[X + i][Y + j] == 1 && (pix[(X + j)][(Y + 2) + ((block.Xlen - 1) - i)]) < 0)
  182.             {
  183.                 return 0; //오른쪽 두번 이동후에도 회전 불가능하다면 함수 종료
  184.             }
  185.         }
  186.     }
  187.     return 2;//우측으로 두번 이동후 회전 가능하면 2 리턴
  188. }
Advertisement
Add Comment
Please, Sign In to add comment