테트리스 짜보다가 질문입니다.
일진오빠
#include blockinfo.h
#include point.h
#include KeyCursorControl.h
#include blockStageControl.h
#include common.h
#include conio.h
#define GBOARD_HEIGHT 20
#define GBOARD_WIDTH 20
#define GBOARD_ORIGIN_X 4
#define GBOARD_ORIGIN_Y 2
static int gameBoardInfo[GBOARD_HEIGHT+1][GBOARD_WIDTH+2]={0, };
static int CurPosX;
static int CurPosY;
static int BlockIdx;
static int RotateIdx;
void InitBlockPos(int x, int y)
{
if(x0 || y0)
return ;
CurPosX=x;
CurPosY=y;
SetCurrentCursorPos(CurPosX, CurPosY);
}
void ChooseBlock(void)
{
srand((unsigned int)time(NULL));
BlockIdx=(rand()%NUM_OF_BLOCK)*4;
}
int GetCurrentBlockIdx(void)
{
return BlockIdx+RotateIdx;
}
void BlockDown(void)
{
DeleteBlock(blockModel[GetCurrentBlockIdx()]);
CurPosY+=1;
SetCurrentCursorPos(CurPosX, CurPosY);
ShowBlock(blockModel[GetCurrentBlockIdx()]);
}
void DeleteBlock(char blockModel[][4])
{
int y,x;
point curPos=GetCurrentCursorPos();
for(y=0; y4; y++)
{
for(x=0; x4; x++)
{
SetCurrentCursorPos(curPos.x+(2*x), curPos.y+y);
if(blockModel[y][x]==1)
printf( );
}
}
SetCurrentCursorPos(curPos.x, curPos.y);
}
void ShowBlock(char blockModel[][4])
{
int y,x;
point curPos=GetCurrentCursorPos();
for(y=0; y4; y++)
{
for(x=0; x4; x++)
{
SetCurrentCursorPos(curPos.x+(2*x),curPos.y+y);
if(blockModel[y][x]==1)
printf(■);
}
}
SetCurrentCursorPos(curPos.x, curPos.y);
}
void BlockLeftRotate(void)
{
int nextRotSte;
DeleteBlock(blockModel[GetCurrentBlockIdx()]);
nextRotSte=RotateIdx+1;
nextRotSte%=4;
RotateIdx=nextRotSte;
SetCurrentCursorPos(CurPosX, CurPosY);
ShowBlock(blockModel[GetCurrentBlockIdx()]);
}
void BlockLeftMove(void)
{
DeleteBlock(blockModel[GetCurrentBlockIdx()]);
CurPosX-=2;
SetCurrentCursorPos(CurPosX, CurPosY);
ShowBlock(blockModel[GetCurrentBlockIdx()]);
}
void BlockRightMove(void)
{
DeleteBlock(blockModel[GetCurrentBlockIdx()]);
CurPosX+=2;
SetCurrentCursorPos(CurPosX, CurPosY);
ShowBlock(blockModel[GetCurrentBlockIdx()]);
}
void DrawGameBoard(void)
{
int x, y;
for(y=0; y=GBOARD_HEIGHT; y++)
{
SetCurrentCursorPos(GBOARD_ORIGIN_X, GBOARD_ORIGIN_Y+y);
if(y==GBOARD_HEIGHT)
printf(┗);
else
printf(┃);
}
for(y=0; y=GBOARD_HEIGHT; y++)
{
SetCurrentCursorPos(GBOARD_ORIGIN_X+ (GBOARD_WIDTH+1)*2, GBOARD_ORIGIN_Y+y);
if(y==GBOARD_HEIGHT)
printf(┛);
else
printf(┃);
}
for(x=1; xGBOARD_WIDTH+1; x++)
{
SetCurrentCursorPos(GBOARD_ORIGIN_X+x*2, GBOARD_ORIGIN_Y+GBOARD_HEIGHT);
printf(━);
}
SetCurrentCursorPos(0,0);
}
void InitgameBoardInfo(void)
{
int i,j;
for(i=0; iGBOARD_HEIGHT; i++)
{
gameBoardInfo[i][0]=1; //왼쪽 경계면 초기화
gameBoardInfo[i][GBOARD_WIDTH+2]=1; //오른쪽 경계면 초기화
}
for(i=0; iGBOARD_WIDTH+2; i++)
gameBoardInfo[GBOARD_HEIGHT+1][i]=1; // 바닥 경계면 초기화
}
int DetectCollision(int posX, int posY, char blockModel[][4])
{
int x,y;
int arrX=(posX-GBOARD_ORIGIN_X)/2;
int arrY=posY-GBOARD_ORIGIN_Y;
for(x=0; x4; x++)
{
for(y=0; x4; y++)
{
if(blockModel[y][x]==1 && gameBoardInfo[arrY+y][arrX+x]==1)
return 0;
}
}
return 1;
} - 이 함수가 충돌을 검사한다는데 왜 blockModel[y][x]정보를 검사하는지 잘 모르겠습니다...이중 for문을 도는 저부분이 이해가 가질 않네요.. 고수님들의 친절한 설명부탁드려요~~~
-
솔길
blockModel은 블록의 쌓인 상태를 저장하는 배열인거같군요...
실제 좌표에서 사용하는 (x,y)는 배열에서는 반대입니다..
{1,2,3}
{4,5,6} 을 좌표로 표현하면 2의값은 (1,0)이 되지만 배열에서는 [0][1]이 되는걸 이해하시면 될듯합니다.
블록의 쌓인걸 저장하는 배열을 다시한번 이해하셔야할것같습니다. -
해뜰참
소스를 전부다 올리신건가요??빠진것같은데
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2676092 | C언어 책 (2) | 아서 | 2024-11-24 |
2676065 | 웹사이트 또는 메신저 등에서 원하는 텍스트를 검사하는방법?? (1) | 모든 | 2024-11-23 |
2676033 | 배열 기초연습중 발생하는 에러 ㅠㅜ... | Creative | 2024-11-23 |
2676005 | keybd_event 게임 제어 | 영글 | 2024-11-23 |
2675900 | 진짜기본적인질문 | 글길 | 2024-11-22 |
2675845 | 수정좀해주세요ㅠㅠㅠ | 해골 | 2024-11-21 |
2675797 | 병합 정렬 소스 코드 질문입니다. (2) | 도래솔 | 2024-11-21 |
2675771 | 큐의 활용이 정확히 어떻게 되죠?? | 해긴 | 2024-11-21 |
2675745 | 도서관리 프로그램 질문이요 | 도리도리 | 2024-11-20 |
2675717 | 2진수로 변환하는것! (3) | 동생몬 | 2024-11-20 |
2675599 | for문 짝수 출력하는 법 (5) | 널위해 | 2024-11-19 |
2675575 | Linux 게시판이 없어서.. | 첫삥 | 2024-11-19 |
2675545 | 구조체 이용할 때 함수에 자료 넘겨주는 것은 어떻게 해야 하나요? | 아연 | 2024-11-19 |
2675518 | 사각형 가로로 어떻게 반복해서 만드는지좀.. 내용 | 신당 | 2024-11-18 |
2675491 | !느낌표를 입력하는것은 어떻게합니까~~?ㅠㅠ (5) | 사지타리우스 | 2024-11-18 |
2675411 | 파일입출력으로 받아온 파일의 중복문자열을 제거한 뒤 파일출력 | 앨버트 | 2024-11-17 |
2675385 | 링크드리스트 주소록 질문드립니다. (1) | 겨루 | 2024-11-17 |
2675356 | 2진수를 10진수로 바꾸려고 하는데 막히네요.. | 풀잎 | 2024-11-17 |
2675297 | Prity 비트 발생기 | 한란 | 2024-11-16 |
2675249 | C책 좀 추천해 주세요 (2) | 딸기우유 | 2024-11-16 |