VC 6.0 을 바탕 으로 C 언어 를 사용 하여 러시아 블록 을 실현 합 니 다.
누 드 로 쓴 러시아 블록 코드 는 의견 이 있 거나 징용 하고 싶 으 면 댓 글 을 달 면 된다.
효 과 는 다음 과 같 습 니 다:
코드:
/***************************************************************/
/*
* VC 6.0
* :
* 1、
* 2、 、 、 ( )
* 3、
* 4、
* 5、
* 6、 set_windows_pos
*
* 1、
* 2、 ,
* 2017.3.22
* :
*/
/***************************************************************/
#include<stdio.h>
#include<windows.h>
#include<conio.h>
#include<string.h>
#define BACK 176//
#define BACK_INT -80//
#define FRAME 178//
#define NODE 219//
#define NODE_INT -37//
#define ERROR -1
#define OK 0
int score = 0;//
static int time = 500;// , 500
char back[20][30] = {0};// x , y ,
int block_type = 0;//
void backgroud_init(void);//
void set_windows_pos(int i, int j);//
void block_display(int block_type, int dir_type, int coor_x, int coor_y, int color_type);//
void time_add(void);//
void block_type_change(void);//
int block_move_check_x(int block_type, int dir_type, int coor_x, int coor_y);//
int block_move_check_y(int block_type, int dir_type, int coor_x, int coor_y, int dir_block);//
int new_back_y_check(int block_type, int dir_type, int coor_y);//
int block_clear_sort(void);// ,
void block_clear_x(int row);// ( )
int main(void)
{
int c = 0;
int new_dir_type = 0;//
int befor_dir_type = 0;//
int new_back_x = 0;// x
int new_back_y = 0;// y
int befor_back_x = 0;// x
int befor_back_y = -1;// y
int block_dir = -1;//
backgroud_init();//
while(1)
{
block_type_change();//
new_back_y = 8;// , y 8
time = 500;
// ,flush
for(new_back_x = 0; new_back_x < 20; new_back_x++)
{
befor_dir_type = new_dir_type;
befor_back_x = new_back_x - 1;
befor_back_y = new_back_y;
block_dir = -1;// -1
block_display(block_type, 0, 17, 26, NODE);//
if(kbhit())//
{
c = getch();
if(c > 0)
{
switch(c)
{
case 119://
if(0 == new_dir_type)
{
new_dir_type = 1;//
}
else
{
new_dir_type = 0;//
}
break;
case 97://
new_back_y--;
block_dir = 0;
break;
case 100://
new_back_y++;
block_dir = 1;
break;
case 115://
time_add();//
break;
default://ESC
break;
}
}
}
new_back_y = new_back_y_check(block_type, new_dir_type, new_back_y);//
block_display(block_type, befor_dir_type, befor_back_x, befor_back_y, BACK);//
if(-1 != block_dir)//
{
if(ERROR == block_move_check_y(block_type, new_dir_type, new_back_x, new_back_y, block_dir))//
{
new_back_y = befor_back_y;
}
}
block_display(block_type, new_dir_type, new_back_x, new_back_y, NODE);//
if(ERROR == block_move_check_x(block_type, new_dir_type, new_back_x, new_back_y))//
{
break;
}
Sleep(time);
}
block_display(block_type, 0, 17, 26, BACK);//
if(OK == block_clear_sort())// ,
{
set_windows_pos(8, 22);//
printf("%d", score);
}
}
return 0;
}
/***************************************************************/
/*** ***/
/*** , x , y 。y(0 - 19) ***/
/*** ,20 - 30 ***/
/***************************************************************/
void backgroud_init(void)
{
int x = 0, y = 0;
for(x = 0; x < 20; x++)
{
for(y = 0; y < 20; y++)
{
back[x][y] = BACK;
}
}
for(x = 0; x < 20; x++)
{
for(y = 20; y < 30; y++)
{
if((0 == x) || (4 == x) || (10 == x) || (19 == x))
{
back[x][y] = FRAME;
}
if((20 == y) || (29 == y))
{
back[x][y] = FRAME;
}
}
}
//
for(x = 0; x < 20; x++)
{
for(y = 0; y < 30; y++)
{
printf("%c", back[x][y]);
}
printf("
");
}
// TETRIS
set_windows_pos(2, 22);// windows
printf("TETRIS
");
//
set_windows_pos(6, 22);// windows
printf("SORT
");
set_windows_pos(8, 22);
printf("%d
", score);
//
set_windows_pos(12, 22);// windows
printf("EXPECT
");
}
/***************************************************************/
/*** windows , TC gotoxy ***/
/***i,j x,y ***/
/***************************************************************/
void set_windows_pos(int i, int j)// windows , TC gotoxy
{
/*if((0 > i) || (0 > j))
{
return ERROR;
}*/
/*windows x , X
*/
COORD pos={j,i};
HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut,pos);
}
/***************************************************************/
/*********************** / ***************************/
/*** :block_type 1: 2:2 3:7 4: ***/
/*** :dir_type 0: 1: ***/
/*** :coor_x coor_y ***/
/*** :color_type BACK NODE ***/
/*** coor_x,coor_y ***/
/***************************************************************/
void block_display(int block_type, int dir_type, int coor_x, int coor_y, int color_type)
{
int x = 0, y = 0;
switch (block_type)
{
case 1://
if(0 == dir_type)//
{
for(y = coor_y; y >= (coor_y - 3); y--)
{
back[coor_x][y] = color_type;//
set_windows_pos(coor_x, y);// windows
printf("%c", back[coor_x][y]);
}
}
else if(1 == dir_type)//
{
for(x = coor_x; (x >= (coor_x - 3)) && (x >= 0); x--)
{
back[x][coor_y] = color_type;//
set_windows_pos(x, coor_y);// windows
printf("%c", back[x][coor_y]);
}
}
else
{
printf("dir_type is error!
");
}
break;
case 2://2
if(0 == dir_type)//
{
for(y = coor_y; y >= coor_y - 1; y--)
{
back[coor_x][y] = color_type;//
set_windows_pos(coor_x, y);// windows
printf("%c", back[coor_x][y]);
}
coor_x--;
coor_y--;
if(coor_x < 0)
{
return;
}
for(y = coor_y; y >= coor_y - 1; y--)
{
back[coor_x][y] = color_type;//
set_windows_pos(coor_x, y);// windows
printf("%c", back[coor_x][y]);
}
}
else if(1 == dir_type)//
{
for(x = coor_x; (x >= coor_x - 1) && (x >= 0); x--)
{
back[x][coor_y] = color_type;//
set_windows_pos(x, coor_y);// windows
printf("%c", back[x][coor_y]);
}
coor_x--;
coor_y--;
if(coor_x < 0)
{
return;
}
for(x = coor_x; x >= coor_x - 1; x--)
{
back[x][coor_y] = color_type;//
set_windows_pos(x, coor_y);// windows
printf("%c", back[x][coor_y]);
}
}
else
{
printf("dir_type is error!
");
}
break;
case 3://7
if(0 == dir_type)//
{
for(y = coor_y; y >= coor_y - 2; y--)
{
back[coor_x][y] = color_type;//
set_windows_pos(coor_x, y);// windows
printf("%c", back[coor_x][y]);
}
coor_x--;
coor_y = coor_y - 2;
if(coor_x < 0)
{
return;
}
back[coor_x][coor_y] = color_type;//
set_windows_pos(coor_x, coor_y);// windows
printf("%c", back[coor_x][coor_y]);
}
else if(1 == dir_type)//
{
for(x = coor_x; (x >= coor_x - 2) && (x >= 0); x--)
{
back[x][coor_y] = color_type;//
set_windows_pos(x, coor_y);// windows
printf("%c", back[x][coor_y]);
}
coor_x = coor_x - 2;
coor_y--;
if(coor_x < 0)
{
return;
}
back[coor_x][coor_y] = color_type;//
set_windows_pos(coor_x, coor_y);// windows
printf("%c", back[coor_x][coor_y]);
}
else
{
printf("dir_type is error!
");
}
break;
case 4://
if((0 == dir_type) || (1 == dir_type))//
{
for(y = coor_y; y >= coor_y - 1; y--)
{
back[coor_x][y] = color_type;//
set_windows_pos(coor_x, y);// windows
printf("%c", back[coor_x][y]);
}
coor_x--;
if(coor_x < 0)
{
return;
}
for(y = coor_y; y >= coor_y - 1; y--)
{
back[coor_x][y] = color_type;//
set_windows_pos(coor_x, y);// windows
printf("%c", back[coor_x][y]);
}
}
else
{
printf("dir_type is error!
");
}
break;
default:
printf("block_type is error!
");
break;
}
}
void time_add(void)//
{
if(500 == time)
{
time = 100;// 100
}
else if(100 == time)
{
time = 500;
}
else
{
;//
}
}
void block_type_change(void)//
{
block_type++;
if(block_type > 4)
{
block_type = 1;
}
}
/***************************************************************/
/******************* y ***************************/
/*** :block_type 1: 2:2 3:7 4: ***/
/*** :dir_type 0: 1: ***/
/*** :coor_y ( ) ***/
/***************************************************************/
int new_back_y_check(int block_type, int dir_type, int coor_y)
{
if(coor_y > 19)
{
coor_y = 19;
}
switch (block_type)
{
case 1://
if(0 == dir_type)//
{
if(coor_y - 3 < 0)
{
coor_y = 3;
}
}
else if(1 == dir_type)//
{
if(coor_y < 0)
{
coor_y = 0;
}
}
else
{
printf("dir_type is error!
");
}
break;
case 2://2
if(0 == dir_type)//
{
if(coor_y - 2 < 0)
{
coor_y = 2;
}
}
else if(1 == dir_type)//
{
if(coor_y - 1 < 0)
{
coor_y = 1;
}
}
else
{
printf("dir_type is error!
");
}
break;
case 3://7
if(0 == dir_type)//
{
if(coor_y - 2 < 0)
{
coor_y = 2;
}
}
else if(1 == dir_type)//
{
if(coor_y - 1 < 0)
{
coor_y = 1;
}
}
else
{
printf("dir_type is error!
");
}
break;
case 4://
if((0 == dir_type) || (1 == dir_type))//
{
if(coor_y - 1 < 0)
{
coor_y = 1;
}
}
else
{
printf("dir_type is error!
");
}
break;
default:
printf("block_type is error!
");
break;
}
return coor_y;
}
/*
, ERROR
*/
/***************************************************************/
/**** , ERROR ***/
/*** :block_type 1: 2:2 3:7 4: ***/
/*** :dir_type 0: 1: ***/
/*** :coor_x coor_y ***/
/*** coor_x,coor_y ***/
/***************************************************************/
int block_move_check_x(int block_type, int dir_type, int coor_x, int coor_y)
{
int ret = OK;
int x = 0, y = 0;
switch (block_type)
{
case 1://
if(0 == dir_type)//
{
for(y = coor_y; y >= coor_y - 3; y--)
{
if(NODE_INT == back[coor_x + 1][y])
{
ret = ERROR;
break;
}
}
}
else if(1 == dir_type)//
{
if(NODE_INT == back[coor_x + 1][coor_y])
{
ret = ERROR;
}
}
else
{
printf("dir_type is error!
");
}
break;
case 2://2
if(0 == dir_type)//
{
for(y = coor_y; y >= coor_y - 1; y--)
{
if(NODE_INT == back[coor_x + 1][coor_y])
{
ret = ERROR;
break;
}
}
coor_x--;
coor_y =coor_y - 2 ;
if(NODE_INT == back[coor_x + 1][coor_y])
{
ret = ERROR;
}
}
else if(1 == dir_type)//
{
if(NODE_INT == back[coor_x + 1][coor_y])
{
ret = ERROR;
}
coor_x--;
coor_y--;
if(NODE_INT == back[coor_x + 1][coor_y])
{
ret = ERROR;
}
}
else
{
printf("dir_type is error!
");
}
break;
case 3://7
if(0 == dir_type)//
{
for(y = coor_y; y >= coor_y - 2; y--)
{
if(NODE_INT == back[coor_x + 1][y])
{
ret = ERROR;
break;
}
}
}
else if(1 == dir_type)//
{
if(NODE_INT == back[coor_x + 1][coor_y])
{
ret = ERROR;
}
coor_x = coor_x - 2;
coor_y--;
if(NODE_INT == back[coor_x + 1][coor_y])
{
ret = ERROR;
}
}
else
{
printf("dir_type is error!
");
}
break;
case 4://
if((0 == dir_type) || (1 == dir_type))//
{
for(y = coor_y; y >= coor_y - 1; y--)
{
if(NODE_INT == back[coor_x + 1][y])
{
ret = ERROR;
break;
}
}
}
else
{
printf("dir_type is error!
");
}
break;
default:
printf("block_type is error!
");
break;
}
return ret;
}
/***************************************************************/
/**** ***/
/*** :block_type 1: 2:2 3:7 4: ***/
/*** :dir_type 0: 1: ***/
/*** :coor_x coor_y ( ) ***/
/*** :dir_block ( ) ***/
/***************************************************************/
int block_move_check_y(int block_type, int dir_type, int coor_x, int coor_y, int dir_block)
{
int x = 0, y = 0;
int ret = OK;
switch (block_type)
{
case 1://
if(0 == dir_type)//
{
if(1 == dir_block)//
{
if(NODE_INT == back[coor_x][coor_y])
{
ret = ERROR;
}
}
else if(0 == dir_block)//
{
if(NODE_INT == back[coor_x][coor_y - 3])
{
ret = ERROR;
}
}
else
{
printf("dir_block is error!");
}
}
else if(1 == dir_type)//
{
// ,
for(x = coor_x; x >= coor_x - 3; x--)
{
if(NODE_INT == back[x][coor_y])
{
ret = ERROR;
break;
}
}
}
else
{
printf("dir_type is error!
");
}
break;
case 2://2
if(0 == dir_type)//
{
if(1 == dir_block)//
{
if(NODE_INT == back[coor_x][coor_y])
{
ret = ERROR;
break;
}
if(NODE_INT == back[coor_x - 1][coor_y - 1])
{
ret = ERROR;
}
}
else if(0 == dir_block)//
{
if(NODE_INT == back[coor_x][coor_y - 1])
{
ret = ERROR;
break;
}
if(NODE_INT == back[coor_x - 1][coor_y - 2])
{
ret = ERROR;
}
}
else
{
printf("dir_block is error!");
}
}
else if(1 == dir_type)//
{
if(1 == dir_block)//
{
for(x = coor_x; x >= coor_x - 1; x--)
{
if(NODE_INT == back[x][coor_y])
{
ret = ERROR;
break;
}
}
if(NODE_INT == back[coor_x - 2][coor_y - 1])
{
ret = ERROR;
}
}
else if(0 == dir_block)//
{
if(NODE_INT == back[coor_x][coor_y])
{
ret = ERROR;
break;
}
coor_x--;
coor_y--;
for(x = coor_x; x >= coor_x - 1; x--)
{
if(NODE_INT == back[x][coor_y])
{
ret = ERROR;
break;
}
}
}
else
{
printf("dir_block is error!");
}
}
else
{
printf("dir_type is error!
");
}
break;
case 3://7
if(0 == dir_type)//
{
if(1 == dir_block)//
{
if(NODE_INT == back[coor_x][coor_y])
{
ret = ERROR;
break;
}
if(NODE_INT == back[coor_x - 1][coor_y - 2])
{
ret = ERROR;
}
}
else if(0 == dir_block)//
{
if(NODE_INT == back[coor_x][coor_y - 2])
{
ret = ERROR;
break;
}
if(NODE_INT == back[coor_x - 1][coor_y - 2])
{
ret = ERROR;
}
}
else
{
printf("dir_block is error!");
}
}
else if(1 == dir_type)//
{
if(1 == dir_block)//
{
for(x = coor_x; (x >= coor_x - 2) && (x >= 0); x--)
{
if(NODE_INT == back[x][coor_y])
{
ret = ERROR;
break;
}
}
}
else if(0 == dir_block)//
{
for(x = coor_x - 1; (x >= coor_x - 2) && (x >= 0); x--)
{
if(NODE_INT == back[x][coor_y])
{
ret = ERROR;
break;
}
}
coor_x = coor_x - 2;
coor_y--;
if(NODE_INT == back[coor_x][coor_y])
{
ret = ERROR;
}
}
else
{
printf("dir_block is error!");
}
}
else
{
printf("dir_type is error!
");
}
break;
case 4://
if((0 == dir_type) || (1 == dir_type))//
{
if(1 == dir_block)//
{
for(x = coor_x; x >= coor_x - 1; x--)
{
if(NODE_INT == back[x][coor_y])
{
ret = ERROR;
break;
}
}
}
else if(0 == dir_block)//
{
for(x = coor_x; x >= coor_x - 1; x--)
{
if(NODE_INT == back[x][coor_y - 1])
{
ret = ERROR;
break;
}
}
}
else
{
printf("dir_block is error!");
}
}
else
{
printf("dir_type is error!
");
}
break;
default:
printf("block_type is error!
");
break;
}
return ret;
}
void block_clear_x(int row)//
{
int x = 0, y = 0;
char back_replace[20][30] = {0};// back
memcpy(back_replace, back, sizeof(back));// back back_replace
for(x = 0; x <= row; x++)
{
for(y = 0; y < 20; y++)
{
back[x][y] = BACK;//
}
}
for(x = row; x >= 1; x--)
{
for(y = 0; y < 20; y++)
{
back[x][y] = back_replace[x - 1][y];// ,
}
}
set_windows_pos(0, 0);// windows
for(x = 0; x < 20; x++)
{
for(y = 0; y < 20; y++)
{
printf("%c", back[x][y]);
}
printf("
");
}
}
/*
*/
int block_clear_sort(void)
{
int x = 0, y = 0;
int ret = ERROR;
int flag = 0;
for(x = 19; x >= 0; x--)//
{
flag = 0;
for(y = 0; y < 20; y++)
{
if(NODE_INT == back[x][y])
{
flag++;//
}
if(20 == flag)// 20
{
block_clear_x(x);//
score++;//
ret = OK;
}
}
}
return ret;
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 구현 천둥 제거 게임 상세 정보먼저 작은 메뉴를 표시하고 게임을 할지 여부를 선택하십시오.사용자가 종료를 선택하면 프로그램 실행이 끝나고, 사용자가 게임을 선택하면 지뢰 제거 위치 좌표를 입력하라는 메시지가 표시됩니다.사용자가 입력한 좌표가 바둑...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.