VC 6.0 을 바탕 으로 C 언어 를 사용 하여 러시아 블록 을 실현 합 니 다.

본 논문 의 사례 는 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; }
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기