테트리스.....요
봄여우
질문 제목 : enter 키를 누르면, 임의의 테트리스 블록을 화면에 표시해야하구요.
다시 enter 키를 누르면, 이전의 테트리스 블록을 지우고 다른 하나의 테트리스 블록을 화면에 표시해야합니다..
while문 안에서 무한 반복을 해야 하구요. enter를 누를 때마다 새로운 난수가 생성되어 새로운 블록을 그리는 방식입니다.
while문이랑 enter키, 에서못 하겠어요...
질문 내용 :
#include stdio.h
#include stdlib.h// cursor의 화면 제어를 위하여 필요함.
#include windows.h// cursor의 화면 제어를 위하여 필요함.
#include time.h
#define print_wrectprintf(\xa1\xe0)
#define print_brectprintf(\xa1\xe1)
#define print_rightprintf(\xa1\xe6);
#define print_leftprintf(\xa1\xe7);
#define print_upprintf(\xa1\xe8);
#define print_downprintf(\xa1\xe9);
void gotoxy(int, int);// 함수 선언
void cursor_off();
void gotoxy(int x, int y)
{
coord pos = { x, y };
setconsolecursorposition(getstdhandle(std_output_handle), pos);
}
void cursor_off()
{
console_cursor_info coff = { 100, 0 };
setconsolecursorinfo(getstdhandle(std_output_handle), &coff);
}
int main(void)
{
int a, b, x, y, px, py, cx, cy, r;
long seed;int teris_block_7 [4][4] = {// block ■■
{0, 0, 0, 0},// ■■
{0, 0, 0, 0},
{1, 1, 0, 0},
{0, 1, 1, 0}
};
int teris_block_6 [4][4] = {// block ■■
{0, 0, 0, 0},// ■■
{0, 0, 0, 0},
{0, 1, 1, 0},
{1, 1, 0, 0}
};
int teris_block_5 [4][4] = {// block ■■
{0, 0, 0, 0},// ■■
{0, 0, 0, 0},
{0, 0, 0, 0},
{1, 1, 1, 1}
};
int teris_block_4 [4][4] = {// block ■■
{0, 0, 0, 0},// ■■
{0, 0, 0, 0},
{0, 1, 1, 0},
{0, 1, 1, 0}
};
int teris_block_3 [4][4] = {// block ■■
{0, 0, 0, 0},// ■■
{0, 0, 0, 0},
{0, 1, 0, 0},
{1, 1, 1, 0}
};
int teris_block_2 [4][4] = {// block ■■
{0, 0, 0, 0},// ■■
{1, 0, 0, 0},
{1, 0, 0, 0},
{1, 1, 0, 0}
};
int teris_block_1 [4][4] = {// block ■■
{0, 0, 0, 0},// ■■
{0, 1, 0, 0},
{0, 1, 0, 0},
{1, 1, 0, 0}
};
int teris_block_0 [4][4] = {// block ■■
{0, 0, 0, 0},// ■■
 sp;{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0}
};
// px = 6; py = 9; 라고 가정한다.
while (1) {/* 무한 반복
키보드 검사
만일 enter 키가 입력되었다면,
이전의 테트리스 블록 모양을 지운다.
난수를 1개 생성하여 새로 화면에 그릴 테트리스 블록의 모양을 결정한다.
새로운 테트리스 블록을 그린다.*/
seed = time(null);
srand(seed);
r = rand()%7 +1;
if ( r == 1)
{
px =6;
py =9;
for (y=0; y4; y++)
{
for (x=0; x4 ; x++)
{
cx = px + x;// cx = 블록 배열의 원소가 그려질 x 좌표
cy = py + y;// cy = 블록 배열의 원소가 그려질 y 좌표
if (teris_block_1 [x][y] == 1)
{
gotoxy(2*cx, cy); // 도형기호는 x축으로 두 칸을 차지하므로 2*cx
printf(%c%c, 0xa1, 0xe1);
}
}
}
}
if ( r == 2)
{
px =6;
py =9;
for (y=0; y4; y++)
{
for (x=0; x4 ; x++)
{
cx = px + x;// cx = 블록 배열의 원소가 그려질 x 좌표
cy = py + y;// cy = 블록 배열의 원소가 그려질 y 좌표
if (teris_block_2 [x][y] == 1)
{
gotoxy(2*cx, cy); // 도형기호는 x축으로 두 칸을 차지하므로 2*cx
printf(%c%c, 0xa1, 0xe1);
}
}
}
}
if ( r == 3)
{
px =6;
py =9;
for (y=0; y4; y++)
{
for (x=0; x4 ; x++)
{
cx = px + x;// cx = 블록 배열의 원소가 그려질 x 좌표
cy = py + y;// cy = 블록 배열의 원소가 그려질 y 좌표
if (teris_block_3 [x][y] == 1)
{
gotoxy(2*cx, cy); // 도형기호는 x축으로 두 칸을 차지하므로 2*cx
printf(%c%c, 0xa1, 0xe1);
}
}
}
}
if ( r == 4)
{
px =6;
py =9;
for (y=0; y4; y++)
{
for (x=0; x4 ; x++)
{
cx = px + x;// cx = 블록 배열의 원소가 그려질 x 좌표
cy = py + y;// cy = 블록 배열의 원소가 그려질 y 좌표
if (teris_block_4 [x][y] == 1)
{
gotoxy(2*cx, cy); // 도형기호는 x축으로 두 칸을 차지하므로 2*cx
printf(%c%c, 0xa1, 0xe1);
}
}
}
}
if ( r == 5)
{
px =6;
py =9;
for (y=0; y4; y++)
{
for (x=0; x4 ; x++)
{
cx = px + x;// cx = 블록 배열의 원소가 그려질 x 좌표
cy = py + y;// cy = 블록 배열의 원소가 그려질 y 좌표
if (teris_block_5 [x][y] == 1)
{
gotoxy(2*cx, cy); // 도형기호는 x축으로 두 칸을 차지하므로 2*cx
printf(%c%c, 0xa1, 0xe1);
}
}
}
}
if ( r == 6)
{
px =6;
py =9;
for (y=0; y4; y++)
{
for (x=0; x4 ; x++)
{
cx = px + x;// cx = 블록 배열의 원소가 그려질 x 좌표
cy = py + y;// cy = 블록 배열의 원소가 그려질 y 좌표
if (teris_block_6 [x][y] == 1)
{
gotoxy(2*cx, cy); // 도형기호는 x축으로 두 칸을 차지하므로 2*cx
printf(%c%c, 0xa1, 0xe1);
}
}
}
}
if ( r == 7)
{
px =6;
py =9;
for (y=0; y4; y++)
{
for (x=0; x4 ; x++)
{
cx = px + x;// cx = 블록 배열의 원소가 그려질 x 좌표
cy = py + y;// cy = 블록 배열의 원소가 그려질 y 좌표
if (teris_block_7 [x][y] == 1)
{
gotoxy(2*cx, cy); // 도형기호는 x축으로 두 칸을 차지하므로 2*cx
printf(%c%c, 0xa1, 0xe1);
}
}
}
}
break;
}
//가로 테두리
for(a=0 ; a = 30 ; a+=2)
{
gotoxy(a,0);
print_wrect;
gotoxy(a,24);
print_wrect;
}
//세로 테두리
for(b=0 ; b = 24 ; b+=1)
{
gotoxy(0,b);
print_wrect;
gotoxy(30,b);
print_wrect;
}
return 0;
}
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2694012 | 전공 비전공자 개발자 (10) | 말글 | 2025-05-07 |
2693984 | 오버로딩이 무엇인가요? (2) | 헛매질 | 2025-05-07 |
2693956 | PlaySound재생이 안됩니다!(C에 음악넣기) | 지존 | 2025-05-06 |
2693928 | &와 *의 사용에 관한 명확한 이해 | 제나 | 2025-05-06 |
2693903 | 반복문 설명좀요 ㅠㅠ (2) | 란새 | 2025-05-06 |
2693869 | stdio.h 는 왜 쓰는건가요? (1) | 큰꽃들 | 2025-05-06 |
2693842 | 포인터 변수의 주소값끼리 더하는 것에 대해서 질문드립니다. (1) | 진솔 | 2025-05-05 |
2693811 | 소수 출력;;;; | 화이트캣 | 2025-05-05 |
2693788 | 이런 함수는 없나요? (3) | 앤드류 | 2025-05-05 |
2693758 | txt파일 불러와서 행렬로 저장 | 큰애 | 2025-05-05 |
2693727 | scanf 오류 문제!! (2) | 큰나래 | 2025-05-04 |
2693704 | 구조체 주소록 문제인데 도와주세요 (2) | 도1도캣 | 2025-05-04 |
2693676 | 열혈강의 c언어 질문입니다 | 하양이 | 2025-05-04 |
2693647 | 12.620000 을요 12.620 으로 어떻게 표현해요? (2) | 파도 | 2025-05-04 |
2693619 | 타이틀 코드.. | 단순드립 | 2025-05-03 |
2693591 | 컴파일 에러에서 질문드립니다 (3) | 게자리 | 2025-05-03 |
2693463 | 동적할당 이용시 fwrite사용을 어떻게 해야하나요..? (10) | 일본어못해요 | 2025-05-02 |
2693387 | 배열문제입니다 수정오류캡쳐했습니다 (6) | 연하얀 | 2025-05-01 |
2693356 | text 입출력 내림차순 질문입니다 ㅠ | 빛글 | 2025-05-01 |
2693328 | C언어를이용해서 .txt파일 외에 다른 확장자 파일 삭제가 가능한지.. (2) | 대나무 | 2025-05-01 |