#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
//-------------------------------------------------------------
//흰색배경을 만들기위한 작업
//INTENSITY는 색상을 밝게 만들어준다.
#define RED_BG (BACKGROUND_RED | BACKGROUND_INTENSITY )
#define GREEN_BG (BACKGROUND_GREEN | BACKGROUND_INTENSITY )
#define BLUE_BG (BACKGROUND_BLUE | BACKGROUND_INTENSITY )
#define WHITE_BG (RED_BG | GREEN_BG | BLUE_BG )
//-------------------------------------------------------------
//전경색+배경색 을 만들기 위한 작업
#define RED (WHITE_BG | FOREGROUND_RED | FOREGROUND_INTENSITY ) //빨강
#define GREEN (WHITE_BG | FOREGROUND_GREEN | FOREGROUND_INTENSITY ) //밝은초록
#define DEEPGREEN (WHITE_BG | FOREGROUND_GREEN ) //어두운초록
#define BLUE (WHITE_BG | FOREGROUND_BLUE | FOREGROUND_INTENSITY ) //파랑
#define YELLOW (WHITE_BG | RED_FG | GREEN_FG ) //노랑
#define VIOLET (WHITE_BG | RED_FG | BLUE_FG ) //보라
#define WGREEN (WHITE_BG | BLUE_FG | GREEN_FG ) //연두
#define BLACK (WHITE_BG | 0x000000) //검정 , 블록과 틀에 쓰임
#define GOLD (WHITE_BG | FOREGROUND_RED | FOREGROUND_GREEN) //황금
//-------------------------------------------------------------
//각종 키배치
#define UP 72 //블록 회전
#define DOWN 80 //블록 1칸 강제개행
#define LEFT 75 //블록 왼쪽이동
#define RIGHT 77 //블록 오른쪽이동
#define SPACE 32 //블록 강제개행
#define ENTER 13 //게임 시작과 멈춤기능
//-------------------------------------------------------------
//게임에 필요한 각종 함수모음.
void rand_block(void); //랜덤으로 블록 생성하는 함수.
void colortext(void); //텍스트 배경과 색상뿌려주는 함수.
void draw_background(void); //백그라운드를 그려주는 함수.
void draw_block(void); //블록을 그려주는 함수.
void gotoxy(int,int); //커서를 이동시켜주는 함수.
void textset(void); //각종 기본텍스트 출력함수.
void cursorhide(void); //커서 숨김 함수.
void style(void); //블록 스타일을 결정하는 함수.
void linedel(int); //백그라운드로 읽어낸 라인을 삭제함.
void game_process(void); //게임 처리 함수.
//-------------------------------------------------------------
//각종 블록타입을 정하는 구조체.
char style_A[3][3]={
{"aaa"},
{"00a"},
{"000"}}; //ㄱ
char style_B[3][3]={
{"bbb"},
{"b00"},
{"000"}}; //리버스 ㄱ
char style_C[3][3]={
{"cc0"},
{"0cc"},
{"000"}}; //ㄱㄴ
char style_D[3][3]={
{"0dd"},
{"dd0"},
{"000"}}; //리버스 ㄱㄴ
char style_E[3][3]={
{"0e0"},
{"eee"},
{"000"}}; //ㅗ
char style_F[2][2]={
{"ff"},
{"ff"}}; //ㅁ
char style_G[4][4]={
{"gggg"},
{"0000"},
{"0000"},
{"0000"}};//ㄱ; //ㅡ
char background[35][40]={ //게임 백그라운드 코드.
{"1555555555555555555552155555555555555520"},
{"6000000000000000000006600000000000000060"},
{"3555555555555555555554355555555555555540"},
{"1555555555555555555552155555555555555520"},
{"6000000000000000000006600000000000000060"},
{"6000000000000000000006600000000000000060"},
{"6000000000000000000006600000000000000060"},
{"6000000000000000000006600000000000000060"},
{"6000000000000000000006600000000000000060"},
{"6000000000000000000006600000000000000060"},
{"6000000000000000000006600000000000000060"},
{"6000000000000000000006355555555555555540"},
{"6000000000000000000006155555555555555520"},
{"6000000000000000000006600000000000000060"},
{"6000000000000000000006600000000000000060"},
{"6000000000000000000006600000000000000060"},
{"6000000000000000000006600000000000000060"},
{"6000000000000000000006600000000000000060"},
{"6000000000000000000006600000000000000060"},
{"6000000000000000000006600000000000000060"},
{"6000000000000000000006600000000000000060"},
{"6000000000000000000006355555555555555540"},
{"6000000000000000000006155555555555555520"},
{"6000000000000000000006600000000000000060"},
{"6000000000000000000006355555555555555540"},
{"6000000000000000000006155555555555555520"},
{"6000000000000000000006600000000000000060"},
{"6000000000000000000006600000000000000060"},
{"6000000000000000000006600000000000000060"},
{"6000000000000000000006600000000000000060"},
{"6000000000000000000006600000000000000060"},
{"6000000000000000000006600000000000000060"},
{"6000000000000000000006600000000000000060"},
{"355555555555555555555435555555555555554"}
};
int put=0; //입력한 키값을 저장하는 변수.
int random_choice=0; //랜덤으로 블록값을 선택받는 변수.
int next_block=0; //다음 블록값을 선택받는 변수.
int main(){
system("mode con lines=34"); //콘솔창의 크기 조절.
draw_background();
textset();
cursorhide();
if(getch() == 13){ //엔터키를 누르면 게임 처리함수로 이동.
game_process();
}
return 0;
}
void game_process(void){
while(getch()!=EOF){
rand_block();
random_choice = getch();
switch(random_choice){
case 0 :
gotoxy(10,5);
}
}
return ;
}
void rand_block(void){
srand(time(NULL));
random_choice = rand()%7+11; //랜덤으로 블록 생성.
next_block = rand()%7+11; //다음 블록 저장.
return;
}
void draw_background(void){
int x,y;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BLACK);
gotoxy(0,0);
for(y=0; y<35; y++){
for(x=0; x<40; x++){
if(background[y][x] == '0') printf(" ");
if(background[y][x] == '1') printf("┏");
if(background[y][x] == '2') printf("┓");
if(background[y][x] == '3') printf("┗");
if(background[y][x] == '4') printf("┛");
if(background[y][x] == '5') printf("━");
if(background[y][x] == '6') printf("┃");
}
}
return ;
}
void textset(void){ //기본 텍스트 설정함수.
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BLUE);
gotoxy(2,1);
printf(" NONAME TETRIS 2008!!");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), DEEPGREEN);
gotoxy(48,1);
printf(" Made by JaeWook LEE");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), RED);
gotoxy(48,23);
printf("Score : ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BLACK);
gotoxy(48,26);
printf(" ↑ : 블럭 모양변화");
gotoxy(48,27);
printf(" ↓ : 블럭 1칸 개행");
gotoxy(48,28);
printf(" ← : 블럭 왼쪽이동");
gotoxy(48,29);
printf(" → : 블럭 오른쪽이동");
gotoxy(48,30);
printf("SPACE : 블럭 강제 개행");
gotoxy(48,31);
printf("ENTER : 시작 / 멈춤");
gotoxy(48,32);
printf("CTRL+Z : 게임 종료");
return ;
}
void gotoxy(int x, int y){ //커서 위치 이동함수
COORD Pos = {x, y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
return ;
}
void cursorhide(void){ //커서 제거함수.
HANDLE hConsole;
CONSOLE_CURSOR_INFO ConsoleCursor;
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
ConsoleCursor.bVisible = 0;
ConsoleCursor.dwSize = 1;
SetConsoleCursorInfo(hConsole , &ConsoleCursor);
return ;
}
댓글을 달아 주세요