Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 파일분할된거 걍 한군데다 복붙해논거임
- 게임오버만 구현 안돼있음
- #ifndef __HEADER_H__
- #define __HEADER_H__
- #define _CRT_SECURE_NO_WARNINGS
- #include<stdio.h>
- #include<stdlib.h>
- #include<conio.h>
- #include<Windows.h>
- #include<string.h>
- #include<stdlib.h>
- #include<time.h>
- #define LEFT 75 // 좌측방향키
- #define RIGHT 77 // 우측방향키
- #define UP 72 // 위쪽방향키
- #define DOWN 80 // 아래방향키
- #define SPACE 32 // 스페이스바
- #define DELAY 300
- #define X (p->x)
- #define Y (p->y)
- #define RIGHT_BOUND 11
- #define FLOOR_BOUND 20
- int pix[22][12];
- typedef struct
- {
- int x, y;
- }XYPOS;
- typedef struct
- {
- int **block;//2원배열 블록 동적할당을 위함.
- int Xlen;
- int Ylen;
- }Block;
- #endif
- #ifndef __CHECK_SHOCK_H__
- #define __CHECK_SHOCK_H__
- int CheckShockLeft(XYPOS *, Block);
- int CheckShockRight(XYPOS *, Block);
- int CheckShockDown(XYPOS *, Block);
- int CheckShockSuperDown(XYPOS *, Block);
- int CheckShockTurn(XYPOS *, Block);
- int CheckShockLeftTurn(XYPOS *, Block);
- int CheckShockRightTurn(XYPOS *, Block);
- int CheckShock4dLeftTurn(XYPOS *, Block);
- int CheckShock4dRightTurn(XYPOS *, Block);
- #endif
- #ifndef __MAKING_BLOCK_H__
- #define __MAKING_BLOCK_H__
- void MakeCrossBlock(void);
- void MakeSquareBlock(void);
- void MakeStickBlock(void);
- void MakeNNBlock(void);
- void MakeRNBlock(void);
- void MakeLLBlock(void);
- void MakeRLBlock(void);
- #endif
- #ifndef __MOVING_H__
- #define __MOVING_H__
- void MoveSuperDown(XYPOS*, Block);
- void MoveDown(XYPOS*, Block);
- void MoveLeft(XYPOS*, Block);
- void MoveRight(XYPOS*, Block);
- void Move3dTurn(XYPOS*, Block);
- void Move3dTurnSwap(XYPOS*, Block, int*);
- void Move4dTurn(XYPOS*, Block);
- void Move4dTurnSwap(XYPOS*, Block, int*);
- #endif
- #ifndef __PRINT_FUNCTION_H__
- #define __PRINT_FUNCTION_H__
- void InitializeScreen(void);
- void PrintAllScreen(void);
- void DeleteLine(void);
- #endif
- #include "Header.h"
- #include "CheckShock.h"
- #include "MakingBlock.h"
- #include "Moving.h"
- #include "Printfunc.h"
- int main(void)
- {
- int selectBlock;
- InitializeScreen();
- PrintAllScreen();
- while (!_kbhit())
- {
- if (_getch())
- break;
- }
- while (1)
- {
- srand((int)time(NULL));
- switch (selectBlock = rand() % 7)
- {
- case 1:
- MakeSquareBlock();
- break;
- case 2:
- MakeCrossBlock();
- break;
- case 3:
- MakeStickBlock();
- break;
- case 4:
- MakeNNBlock();
- break;
- case 5:
- MakeRNBlock();
- break;
- case 6:
- MakeLLBlock();
- break;
- case 0:
- MakeRLBlock();
- break;
- }
- DeleteLine();
- }
- putchar('\n');
- return 0;
- }
- #include "Header.h"
- #include "Printfunc.h"
- #include "Moving.h"
- #include "CheckShock.h"
- void MakeCrossBlock(void)
- {
- int i, j;
- XYPOS * p = (XYPOS*)malloc(sizeof(XYPOS) * 1);
- X = -2;
- Y = 4; //좌표초기화
- Block c;
- c.block = (int**)malloc(sizeof(int) * 3);
- c.block[0] = (int*)malloc(sizeof(int) * 3);
- c.block[1] = (int*)malloc(sizeof(int) * 3);
- c.block[2] = (int*)malloc(sizeof(int) * 3);//배열할당
- c.block[0][0] = 0; c.block[0][1] = 1; c.block[0][2] = 0;
- c.block[1][0] = 1; c.block[1][1] = 1; c.block[1][2] = 1;
- c.block[2][0] = 0; c.block[2][1] = 0; c.block[2][2] = 0;
- c.Xlen = 3;
- c.Ylen = 3;
- // {0,1,0}
- // {1,1,1}
- // {0,0,0}
- //블록 형태지정 및 배열길이정보 입력
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = c.block[i][j];
- }
- }//블록의 형태를 좌표에 삽입
- system("cls");
- PrintAllScreen();
- for (; X < DOWN;)
- {
- if (_kbhit())
- {
- switch (_getch())
- {
- case DOWN:
- MoveDown(p, c);
- break;
- case LEFT:
- MoveLeft(p, c);
- break;
- case RIGHT:
- MoveRight(p, c);
- break;
- case UP:
- Move3dTurn(p, c);
- break;
- case SPACE:
- MoveSuperDown(p, c);
- break;
- }
- }
- else if (CheckShockDown(p, c) == 1) //바닥충돌검사 & 중력
- {
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = 0;
- }
- }//블록 제거
- X++;
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = c.block[i][j];
- }
- }//블록 한칸아래 생성
- Sleep(DELAY);//중력 딜레이
- system("cls");
- PrintAllScreen();
- }
- else
- {
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] == 1)
- pix[X + i][Y + j] = -2;
- }
- }//블록 고정
- break;
- }
- }//중력
- free(c.block[0]);
- free(c.block[1]);
- free(c.block[2]);
- free(c.block);
- free(p);
- }
- void MakeSquareBlock(void)
- {
- int i, j;
- XYPOS * p = (XYPOS*)malloc(sizeof(XYPOS) * 1);
- X = -2;
- Y = 5; //좌표초기화
- Block c;
- c.block = (int**)malloc(sizeof(int) * 2);
- c.block[0] = (int*)malloc(sizeof(int) * 2);
- c.block[1] = (int*)malloc(sizeof(int) * 2);
- //배열할당
- c.block[0][0] = 1; c.block[0][1] = 1;
- c.block[1][0] = 1; c.block[1][1] = 1;
- c.Xlen = 2;
- c.Ylen = 2;
- // {0,1,0}
- // {1,1,1}
- // {0,0,0}
- //블록 형태지정 및 배열길이정보 입력
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = c.block[i][j];
- }
- }//블록의 형태를 좌표에 삽입
- system("cls");
- PrintAllScreen();
- for (; X < DOWN;)
- {
- if (_kbhit())
- {
- switch (_getch())
- {
- case DOWN:
- MoveDown(p, c);
- break;
- case LEFT:
- MoveLeft(p, c);
- break;
- case RIGHT:
- MoveRight(p, c);
- break;
- case SPACE:
- MoveSuperDown(p, c);
- break;
- }
- }
- else if (CheckShockDown(p, c) == 1) //바닥충돌검사 & 중력
- {
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = 0;
- }
- }//블록 제거
- X++;
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = c.block[i][j];
- }
- }//블록 한칸아래 생성
- Sleep(DELAY);//중력 딜레이
- system("cls");
- PrintAllScreen();
- }
- else
- {
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] == 1)
- pix[X + i][Y + j] = -2;
- }
- }//블록 고정
- break;
- }
- }//중력
- free(c.block[0]);
- free(c.block[1]);
- free(c.block);
- free(p);
- }
- void MakeNNBlock(void)
- {
- int i, j;
- int turnSwap = 0;
- XYPOS * p = (XYPOS*)malloc(sizeof(XYPOS) * 1);
- X = -3;
- Y = 5; //좌표초기화
- Block c;
- c.block = (int**)malloc(sizeof(int) * 3);
- c.block[0] = (int*)malloc(sizeof(int) * 3);
- c.block[1] = (int*)malloc(sizeof(int) * 3);
- c.block[2] = (int*)malloc(sizeof(int) * 3);//배열할당
- c.block[0][0] = 1; c.block[0][1] = 0; c.block[0][2] = 0;
- c.block[1][0] = 1; c.block[1][1] = 1; c.block[1][2] = 0;
- c.block[2][0] = 0; c.block[2][1] = 1; c.block[2][2] = 0;
- c.Xlen = 3;
- c.Ylen = 3;
- // {1,0,0}
- // {1,1,0}
- // {0,1,0}
- //블록 형태지정 및 배열길이정보 입력
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = c.block[i][j];
- }
- }//블록의 형태를 좌표에 삽입
- system("cls");
- PrintAllScreen();
- for (; X < DOWN;)
- {
- if (_kbhit())
- {
- switch (_getch())
- {
- case DOWN:
- MoveDown(p, c);
- break;
- case LEFT:
- MoveLeft(p, c);
- break;
- case RIGHT:
- MoveRight(p, c);
- break;
- case UP:
- Move3dTurnSwap(p, c, &turnSwap);
- break;
- case SPACE:
- MoveSuperDown(p, c);
- break;
- }
- }
- else if (CheckShockDown(p, c) == 1) //바닥충돌검사 & 중력
- {
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = 0;
- }
- }//블록 제거
- X++;
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = c.block[i][j];
- }
- }//블록 한칸아래 생성
- Sleep(DELAY);//중력 딜레이
- system("cls");
- PrintAllScreen();
- }
- else
- {
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] == 1)
- pix[X + i][Y + j] = -2;
- }
- }//블록 고정
- break;
- }
- }//중력
- free(c.block[0]);
- free(c.block[1]);
- free(c.block[2]);
- free(c.block);
- free(p);
- }
- void MakeRNBlock(void)
- {
- int i, j;
- int turnSwap = 0;
- XYPOS * p = (XYPOS*)malloc(sizeof(XYPOS) * 1);
- X = -3;
- Y = 4; //좌표초기화
- Block c;
- c.block = (int**)malloc(sizeof(int) * 3);
- c.block[0] = (int*)malloc(sizeof(int) * 3);
- c.block[1] = (int*)malloc(sizeof(int) * 3);
- c.block[2] = (int*)malloc(sizeof(int) * 3);//배열할당
- c.block[0][0] = 0; c.block[0][1] = 0; c.block[0][2] = 1;
- c.block[1][0] = 0; c.block[1][1] = 1; c.block[1][2] = 1;
- c.block[2][0] = 0; c.block[2][1] = 1; c.block[2][2] = 0;
- c.Xlen = 3;
- c.Ylen = 3;
- // {0,0,1}
- // {0,1,1}
- // {0,1,0}
- //블록 형태지정 및 배열길이정보 입력
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = c.block[i][j];
- }
- }//블록의 형태를 좌표에 삽입
- system("cls");
- PrintAllScreen();
- for (; X < DOWN;)
- {
- if (_kbhit())
- {
- switch (_getch())
- {
- case DOWN:
- MoveDown(p, c);
- break;
- case LEFT:
- MoveLeft(p, c);
- break;
- case RIGHT:
- MoveRight(p, c);
- break;
- case UP:
- Move3dTurnSwap(p, c, &turnSwap);
- break;
- case SPACE:
- MoveSuperDown(p, c);
- break;
- }
- }
- else if (CheckShockDown(p, c) == 1) //바닥충돌검사 & 중력
- {
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = 0;
- }
- }//블록 제거
- X++;
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = c.block[i][j];
- }
- }//블록 한칸아래 생성
- Sleep(DELAY);//중력 딜레이
- system("cls");
- PrintAllScreen();
- }
- else
- {
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] == 1)
- pix[X + i][Y + j] = -2;
- }
- }//블록 고정
- break;
- }
- }//중력
- free(c.block[0]);
- free(c.block[1]);
- free(c.block[2]);
- free(c.block);
- free(p);
- }
- void MakeLLBlock(void)
- {
- int i, j;
- XYPOS * p = (XYPOS*)malloc(sizeof(XYPOS) * 1);
- X = -3;
- Y = 4; //좌표초기화
- Block c;
- c.block = (int**)malloc(sizeof(int) * 4);
- c.block[0] = (int*)malloc(sizeof(int) * 4);
- c.block[1] = (int*)malloc(sizeof(int) * 4);
- c.block[2] = (int*)malloc(sizeof(int) * 4);
- c.block[3] = (int*)malloc(sizeof(int) * 4);//배열할당
- c.block[0][0] = 0; c.block[0][1] = 1; c.block[0][2] = 0; c.block[0][3] = 0;
- c.block[1][0] = 0; c.block[1][1] = 1; c.block[1][2] = 0; c.block[1][3] = 0;
- c.block[2][0] = 0; c.block[2][1] = 1; c.block[2][2] = 1; c.block[2][3] = 0;
- c.block[3][0] = 0; c.block[3][1] = 0; c.block[3][2] = 0; c.block[3][3] = 0;
- c.Xlen = 4;
- c.Ylen = 4;
- // {0,1,0,0}
- // {0,1,0,0}
- // {0,1,1,0}
- // {0,0,0,0}
- //블록 형태지정 및 배열길이정보 입력
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = c.block[i][j];
- }
- }//블록의 형태를 좌표에 삽입
- system("cls");
- PrintAllScreen();
- for (; X < DOWN;)
- {
- if (_kbhit())
- {
- switch (_getch())
- {
- case DOWN:
- MoveDown(p, c);
- break;
- case LEFT:
- MoveLeft(p, c);
- break;
- case RIGHT:
- MoveRight(p, c);
- break;
- case UP:
- Move4dTurn(p, c);
- break;
- case SPACE:
- MoveSuperDown(p, c);
- break;
- }
- }
- else if (CheckShockDown(p, c) == 1) //바닥충돌검사 & 중력
- {
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = 0;
- }
- }//블록 제거
- X++;
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = c.block[i][j];
- }
- }//블록 한칸아래 생성
- Sleep(DELAY);//중력 딜레이
- system("cls");
- PrintAllScreen();
- }
- else
- {
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] == 1)
- pix[X + i][Y + j] = -2;
- }
- }//블록 고정
- break;
- }
- }//중력
- free(c.block[0]);
- free(c.block[1]);
- free(c.block[2]);
- free(c.block[3]);
- free(c.block);
- free(p);
- }
- void MakeRLBlock(void)
- {
- int i, j;
- XYPOS * p = (XYPOS*)malloc(sizeof(XYPOS) * 1);
- X = -3;
- Y = 4; //좌표초기화
- Block c;
- c.block = (int**)malloc(sizeof(int) * 4);
- c.block[0] = (int*)malloc(sizeof(int) * 4);
- c.block[1] = (int*)malloc(sizeof(int) * 4);
- c.block[2] = (int*)malloc(sizeof(int) * 4);
- c.block[3] = (int*)malloc(sizeof(int) * 4);//배열할당
- c.block[0][0] = 0; c.block[0][1] = 0; c.block[0][2] = 1; c.block[0][3] = 0;
- c.block[1][0] = 0; c.block[1][1] = 0; c.block[1][2] = 1; c.block[1][3] = 0;
- c.block[2][0] = 0; c.block[2][1] = 1; c.block[2][2] = 1; c.block[2][3] = 0;
- c.block[3][0] = 0; c.block[3][1] = 0; c.block[3][2] = 0; c.block[3][3] = 0;
- c.Xlen = 4;
- c.Ylen = 4;
- // {0,0,1,0}
- // {0,0,1,0}
- // {0,1,1,0}
- // {0,0,0,0}
- //블록 형태지정 및 배열길이정보 입력
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = c.block[i][j];
- }
- }//블록의 형태를 좌표에 삽입
- system("cls");
- PrintAllScreen();
- for (; X < DOWN;)
- {
- if (_kbhit())
- {
- switch (_getch())
- {
- case DOWN:
- MoveDown(p, c);
- break;
- case LEFT:
- MoveLeft(p, c);
- break;
- case RIGHT:
- MoveRight(p, c);
- break;
- case UP:
- Move4dTurn(p, c);
- break;
- case SPACE:
- MoveSuperDown(p, c);
- break;
- }
- }
- else if (CheckShockDown(p, c) == 1) //바닥충돌검사 & 중력
- {
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = 0;
- }
- }//블록 제거
- X++;
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = c.block[i][j];
- }
- }//블록 한칸아래 생성
- Sleep(DELAY);//중력 딜레이
- system("cls");
- PrintAllScreen();
- }
- else
- {
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] == 1)
- pix[X + i][Y + j] = -2;
- }
- }//블록 고정
- break;
- }
- }//중력
- free(c.block[0]);
- free(c.block[1]);
- free(c.block[2]);
- free(c.block[3]);
- free(c.block);
- free(p);
- }
- void MakeStickBlock(void)
- {
- int i, j;
- int turnSwap = 0;
- XYPOS * p = (XYPOS*)malloc(sizeof(XYPOS) * 1);
- X = -4;
- Y = 4; //좌표초기화
- Block c;
- c.block = (int**)malloc(sizeof(int) * 4);
- c.block[0] = (int*)malloc(sizeof(int) * 4);
- c.block[1] = (int*)malloc(sizeof(int) * 4);
- c.block[2] = (int*)malloc(sizeof(int) * 4);
- c.block[3] = (int*)malloc(sizeof(int) * 4);//배열할당
- c.block[0][0] = 0; c.block[0][1] = 1; c.block[0][2] = 0; c.block[0][3] = 0;
- c.block[1][0] = 0; c.block[1][1] = 1; c.block[1][2] = 0; c.block[1][3] = 0;
- c.block[2][0] = 0; c.block[2][1] = 1; c.block[2][2] = 0; c.block[2][3] = 0;
- c.block[3][0] = 0; c.block[3][1] = 1; c.block[3][2] = 0; c.block[3][3] = 0;
- c.Xlen = 4;
- c.Ylen = 4;
- // {0,1,0,0}
- // {0,1,0,0}
- // {0,1,0,0}
- // {0,1,0,0}
- //블록 형태지정 및 배열길이정보 입력
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = c.block[i][j];
- }
- }//블록의 형태를 좌표에 삽입
- system("cls");
- PrintAllScreen();
- for (; X < DOWN;)
- {
- if (_kbhit())
- {
- switch (_getch())
- {
- case DOWN:
- MoveDown(p, c);
- break;
- case LEFT:
- MoveLeft(p, c);
- break;
- case RIGHT:
- MoveRight(p, c);
- break;
- case UP:
- Move4dTurnSwap(p, c, &turnSwap);
- break;
- case SPACE:
- MoveSuperDown(p, c);
- break;
- }
- }
- else if (CheckShockDown(p, c) == 1) //바닥충돌검사 & 중력
- {
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = 0;
- }
- }//블록 제거
- X++;
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = c.block[i][j];
- }
- }//블록 한칸아래 생성
- Sleep(DELAY);//중력 딜레이
- system("cls");
- PrintAllScreen();
- }
- else
- {
- for (i = 0; i < c.Xlen; i++)
- {
- for (j = 0; j < c.Ylen; j++)
- {
- if (pix[X + i][Y + j] == 1)
- pix[X + i][Y + j] = -2;
- }
- }//블록 고정
- break;
- }
- }//중력
- free(c.block[0]);
- free(c.block[1]);
- free(c.block[2]);
- free(c.block[3]);
- free(c.block);
- free(p);
- }
- #include "Header.h"
- #include "Printfunc.h"
- #include "CheckShock.h"
- void MoveSuperDown(XYPOS* p, Block block)
- {
- int downPoint = CheckShockSuperDown(p, block);
- int i, j;
- if (downPoint > 0)
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = 0;
- }
- }//블록 제거
- X += downPoint;
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = block.block[i][j];
- }
- }//블록 완전 낙하
- }
- else
- return;
- system("cls");
- PrintAllScreen();
- return;
- }
- void MoveDown(XYPOS* p, Block block)
- {
- if (CheckShockDown(p, block) == 1)
- {
- int i, j;
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = 0;
- }
- }//블록 제거
- X++;
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = block.block[i][j];
- }
- }//블록 한칸아래 생성
- }
- else
- return;
- system("cls");
- PrintAllScreen();
- return;
- }
- void MoveLeft(XYPOS* p, Block block)
- {
- int i, j;
- if (CheckShockLeft(p, block) == 1)
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = 0;
- }
- }//블록 제거
- Y--;
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = block.block[i][j];
- }
- }//블록 한칸아래 생성
- }
- else
- return;
- system("cls");
- PrintAllScreen();
- return;
- }
- void MoveRight(XYPOS* p, Block block)
- {
- int i, j;
- if (CheckShockRight(p, block) == 1)
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = 0;
- }
- }//블록 제거
- Y++;
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = block.block[i][j];
- }
- }//블록 한칸아래 생성
- }
- else
- return;
- system("cls");
- PrintAllScreen();
- return;
- }
- void Move3dTurn(XYPOS* p, Block block)
- {
- int i, j;
- int temp[3][3];
- //임시블록 생성
- if (CheckShockTurn(p, block) == 1)
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = 0;
- }
- }//블록 제거
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- temp[j][i] = block.block[(block.Xlen - 1) - i][j];
- }
- }
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- block.block[i][j] = temp[i][j];
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = block.block[i][j];
- }
- }//블록 회전
- }
- else if (CheckShockLeftTurn(p, block) == 1) //왼쪽으로 이동후 회전가능한가?
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = 0;
- }
- }//블록 제거
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- temp[j][i] = block.block[(block.Xlen - 1) - i][j];
- }
- }
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- block.block[i][j] = temp[i][j];
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = block.block[i][j];
- }
- }//블록 회전
- }
- else if (CheckShockRightTurn(p, block) == 1)//오른쪽으로 이동후 회전가능한가?
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = 0;
- }
- }//블록 제거
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- temp[j][i] = block.block[(block.Xlen - 1) - i][j];
- }
- }
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- block.block[i][j] = temp[i][j];
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = block.block[i][j];
- }
- }//블록 회전
- }
- else
- return;
- system("cls");
- PrintAllScreen();
- return;
- }
- void Move3dTurnSwap(XYPOS* p, Block block, int* swap)
- {
- int i, j;
- int temp[3][3];
- //임시블록 생성
- if (CheckShockTurn(p, block) == 1)
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = 0;
- }
- }//블록 제거
- if (*swap == 0)//값이 0이면 시계방향 회전
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- temp[j][i] = block.block[(block.Xlen - 1) - i][j];
- }
- }
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- block.block[i][j] = temp[i][j];
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = block.block[i][j];
- }
- }
- *swap = 1;//회전 후 스왑해줌
- }//블록 회전
- else//swap!=0이면 반시계 회전
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- temp[j][i] = block.block[i][(block.Xlen - 1) - j];
- }
- }
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- block.block[i][j] = temp[i][j];
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = block.block[i][j];
- }
- }
- *swap = 0;//회전 후 스왑해줌
- }
- }
- else if (CheckShockLeftTurn(p, block) == 1) //왼쪽으로 이동후 회전가능한가?
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = 0;
- }
- }//블록 제거
- if (*swap == 0)//값이 0이면 시계방향 회전
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- temp[j][i] = block.block[(block.Xlen - 1) - i][j];
- }
- }
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- block.block[i][j] = temp[i][j];
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = block.block[i][j];
- }
- }
- *swap = 1;//회전 후 스왑해줌
- }//블록 회전
- else//swap!=0이면 반시계 회전
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- temp[j][i] = block.block[i][(block.Xlen - 1) - j];
- }
- }
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- block.block[i][j] = temp[i][j];
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = block.block[i][j];
- }
- }
- *swap = 0;//회전 후 스왑해줌
- }
- }
- else if (CheckShockRightTurn(p, block) == 1)//오른쪽으로 이동후 회전가능한가?
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = 0;
- }
- }//블록 제거
- if (*swap == 0)//값이 0이면 시계방향 회전
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- temp[j][i] = block.block[(block.Xlen - 1) - i][j];
- }
- }
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- block.block[i][j] = temp[i][j];
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = block.block[i][j];
- }
- }
- *swap = 1;//회전 후 스왑해줌
- }//블록 회전
- else//swap!=0이면 반시계 회전
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- temp[j][i] = block.block[i][(block.Xlen - 1) - j];
- }
- }
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- block.block[i][j] = temp[i][j];
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = block.block[i][j];
- }
- }
- *swap = 0;//회전 후 스왑해줌
- }
- }
- else
- return;
- system("cls");
- PrintAllScreen();
- return;
- }
- void Move4dTurn(XYPOS* p, Block block)
- {
- int i, j;
- int temp[4][4];
- int movePoint;
- //임시블록 생성
- if (CheckShockTurn(p, block) == 1)
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = 0;
- }
- }//블록 제거
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- temp[j][i] = block.block[(block.Xlen - 1) - i][j];
- }
- }
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- block.block[i][j] = temp[i][j];
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = block.block[i][j];
- }
- }//회전
- }
- else if ((movePoint = CheckShock4dLeftTurn(p, block)) > 0) //왼쪽으로 이동후 회전가능한가?
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = 0;
- }
- }//블록 제거
- Y -= movePoint;
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- temp[j][i] = block.block[(block.Xlen - 1) - i][j];
- }
- }
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- block.block[i][j] = temp[i][j];
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = block.block[i][j];
- }
- }//회전
- }
- else if ((movePoint = CheckShock4dRightTurn(p, block)) > 0) //왼쪽으로 이동후 회전가능한가?
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = 0;
- }
- }//블록 제거
- Y += movePoint;
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- temp[j][i] = block.block[(block.Xlen - 1) - i][j];
- }
- }
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- block.block[i][j] = temp[i][j];
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = block.block[i][j];
- }
- }//회전
- }
- else
- return;
- system("cls");
- PrintAllScreen();
- return;
- }
- void Move4dTurnSwap(XYPOS* p, Block block, int* swap)
- {
- int i, j;
- int temp[4][4];
- int movePoint;
- //임시블록 생성
- if (CheckShockTurn(p, block) == 1)
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = 0;
- }
- }//블록 제거
- if (*swap == 0)//값이 0이면 시계방향 회전
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- temp[j][i] = block.block[(block.Xlen - 1) - i][j];
- }
- }
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- block.block[i][j] = temp[i][j];
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = block.block[i][j];
- }
- }
- *swap = 1;//회전 후 스왑해줌
- }//블록 회전
- else//swap!=0이면 반시계 회전
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- temp[j][i] = block.block[i][(block.Xlen - 1) - j];
- }
- }
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- block.block[i][j] = temp[i][j];
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = block.block[i][j];
- }
- }
- *swap = 0;//회전 후 스왑해줌
- }
- }
- else if ((movePoint = CheckShock4dLeftTurn(p, block)) > 0) //왼쪽으로 이동후 회전가능한가?
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = 0;
- }
- }//블록 제거
- Y -= movePoint;
- if (*swap == 0)//값이 0이면 시계방향 회전
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- temp[j][i] = block.block[(block.Xlen - 1) - i][j];
- }
- }
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- block.block[i][j] = temp[i][j];
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = block.block[i][j];
- }
- }
- *swap = 1;//회전 후 스왑해줌
- }//블록 회전
- else//swap!=0이면 반시계 회전
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- temp[j][i] = block.block[i][(block.Xlen - 1) - j];
- }
- }
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- block.block[i][j] = temp[i][j];
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = block.block[i][j];
- }
- }
- *swap = 0;//회전 후 스왑해줌
- }
- }
- else if ((movePoint = CheckShock4dRightTurn(p, block)) > 0) //왼쪽으로 이동후 회전가능한가?
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = 0;
- }
- }//블록 제거
- Y += movePoint;
- if (*swap == 0)//값이 0이면 시계방향 회전
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- temp[j][i] = block.block[(block.Xlen - 1) - i][j];
- }
- }
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- block.block[i][j] = temp[i][j];
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = block.block[i][j];
- }
- }
- *swap = 1;//회전 후 스왑해줌
- }//블록 회전
- else//swap!=0이면 반시계 회전
- {
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- temp[j][i] = block.block[i][(block.Xlen - 1) - j];
- }
- }
- for (i = 0; i < block.Xlen; i++)
- {
- for (j = 0; j < block.Ylen; j++)
- {
- block.block[i][j] = temp[i][j];
- if (pix[X + i][Y + j] >= 0)
- pix[X + i][Y + j] = block.block[i][j];
- }
- }
- *swap = 0;//회전 후 스왑해줌
- }
- }
- else
- return;
- system("cls");
- PrintAllScreen();
- return;
- }
- #include "Header.h"
- void InitializeScreen(void)
- {
- int i, j;
- for (i = 0; i < 22; i++)
- {
- for (j = 0; j < 12; j++)
- {
- pix[i][j] = -1;
- }
- }
- for (i = 0; i < 20; i++)
- {
- for (j = 1; j < 11; j++)
- {
- pix[i][j] = 0;
- }
- }
- }
- void PrintAllScreen(void)
- {
- int i, j;
- for (i = 0; i < 22; i++)
- {
- for (j = 0; j < 12; j++)
- {
- switch (pix[i][j])
- {
- case -2:
- fputs("■", stdout);
- break;
- case -1:
- fputs("▩", stdout);
- break;
- case 0:
- fputs(" ", stdout);
- break;
- case 1:
- fputs("▣", stdout);
- break;
- }
- }
- putchar('\n');
- }
- }
- void DeleteLine(void)
- {
- int i, j;
- int ILimit;
- for (i = 0; i < FLOOR_BOUND; i++)
- {
- if (pix[i][1] < 0 && pix[i][2] < 0 && pix[i][3] < 0 && pix[i][4] < 0 && pix[i][5] < 0 &&
- pix[i][6] < 0 && pix[i][7] < 0 && pix[i][8] < 0 && pix[i][9] < 0 && pix[i][10] < 0)
- {
- ILimit = i;
- for (i = ILimit - 1; i >= 0; i--)
- {
- for (j = 1; j < RIGHT_BOUND; j++)
- {
- pix[i + 1][j] = pix[i][j];
- }
- }
- for (j = 1; j < RIGHT_BOUND; j++)
- pix[0][j] = 0;
- }
- }//라인이 전부 마이너스값(블록이 있는공간)인지 확인
- }
Advertisement
Add Comment
Please, Sign In to add comment