⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rus1.c

📁 俄罗斯方块 用ncurses编写
💻 C
📖 第 1 页 / 共 3 页
字号:
#include <stdlib.h>;
#include <ncurses.h>;
#include <time.h>;
#include <sys/time.h>;
#include <unistd.h>;
#include <fcntl.h>;

#define  rbox_top  5
#define  rbox_left 20
#define  rbox_w    21
#define  rbox_h    24
#define  H_H        '#'

#define  SPEED     400000

struct point
{
        int rX;
        int rY;
};

struct point  Cur;
struct point  Old;

int shape;
int direction;

int arr_rbox[rbox_h][rbox_w];
int rFlag;
struct rbox
{
               struct point r1;
        struct point r2;
        struct point r3;
        struct point r4;
};
struct rbox CurBox;

void init_windows(void);
int  check_mvnext(int x,int y);
void turn_rbox(void);
void create_rbox(void);
void show_box(void);
void check_line(void);
void show_all(void);

void initial()
{
        initscr();
            cbreak();
            nonl();
            noecho();
        curs_set(0);
        // init_pair(100, COLOR_RED, COLOR_BLUE);
          intrflush(stdscr,FALSE);
            keypad(stdscr,TRUE);
            refresh();
}

int main(void)
{
        int ch;
        char tmp_str[40];
        int k;
        time_t delay;

        initial();
        init_windows();
        fcntl( 0, F_SETFL, O_NONBLOCK); 
        create_rbox();
        delay = time(NULL);
        while(1)
        {
                
                
                ch = getch();
                switch(ch)
                {
                        case KEY_UP:
                                turn_rbox();
                                break;
                            case KEY_DOWN: 
                                    Old.rX = Cur.rX++;
                                    Old.rY = Cur.rY;
                                break;
                            case KEY_RIGHT:
                                Old.rY = Cur.rY++;
                                Old.rX = Cur.rX;
                                break;
                            case KEY_LEFT:
                                    Old.rY = Cur.rY--;
                                    Old.rX = Cur.rX;
                                break;
                            case 27:
                                endwin(); 
                                     exit(0);
                }
                k=check_mvnext(Cur.rX,Cur.rY);
                if(k==0)
                {
                        show_box();
                }
                else
                {
                        Cur.rY=Old.rY;
                        Cur.rX=Old.rX;
                }
                sprintf(tmp_str,"x=%d  y=%d  ",Cur.rX,Cur.rY);
                mvaddstr(10,50,tmp_str);
                if((delay+1) < time(NULL))
                {
                        Old.rX = Cur.rX++;
                            Old.rY = Cur.rY;
                            if(check_mvnext(Cur.rX,Cur.rY)==0)
                            {
                                    show_box();
                            }
                            else
                            {
                                    arr_rbox[CurBox.r1.rX+Old.rX][CurBox.r1.rY+Old.rY]=1;
                                    arr_rbox[CurBox.r2.rX+Old.rX][CurBox.r2.rY+Old.rY]=1;
                                    arr_rbox[CurBox.r3.rX+Old.rX][CurBox.r3.rY+Old.rY]=1;
                                    arr_rbox[CurBox.r4.rX+Old.rX][CurBox.r4.rY+Old.rY]=1;
                                    check_line();
                                    show_all();
                                    create_rbox();
                                    if(check_mvnext(Cur.rX,Cur.rY)!=0)
                                    {
                                            mvaddstr(12,50,"Game Over, press ESC to exit");
                                            mvaddstr(14,50,"Play this game, to run again");
                                    }
                            }
                        delay = time(NULL);
                        
                }
                                    
                            
        }
        return 0;
}
void init_windows(void)
{
        int i;
        int j;
        mvaddstr(rbox_top,rbox_left,       "+-------------------+");
        for(i=rbox_top+1;i<(rbox_top+rbox_h-1);i++)
                mvaddstr(i,rbox_left,"|                   |");
        mvaddstr(rbox_top+rbox_h-1,rbox_left,"+-------------------+");
        mvaddstr(3,23,"rbox for tomken");
        mvaddch(8,10,'W');
        mvaddch(9,10,'E');
        mvaddch(10,10,'L');
        mvaddch(11,10,'L');
        mvaddch(12,10,'C');
        mvaddch(13,10,'O');
        mvaddch(14,10,'W');
        mvaddch(15,10,'E');
        for(i=0;i<rbox_w;i++)
                for(j=0;j<rbox_h;j++)
                {
                        if(i==0 || j==0 || i==(rbox_w-1) || j==(rbox_h-1))
                        {
                                arr_rbox[j][i]=1;
                        }else
                        {
                                arr_rbox[j][i]=0;
                        }
                }
}
void create_rbox(void)
{
        shape = 2;
        
        srand((int) time(0));
        shape  = (int) (7.0*rand()/RAND_MAX+1.0);
        direction = 1;
        Cur.rX = 2;
        Old.rX = 2;
        
        Cur.rY = 10;
        Old.rY = 10;

        switch(shape)
        {
                case 1:
                       CurBox.r1.rX =  -1;
                       CurBox.r1.rY =  0 ;

                       CurBox.r2.rX =  0 ;
                       CurBox.r2.rY =  0 ;

                       CurBox.r3.rX =  1 ;
                       CurBox.r3.rY =  0 ;

                       CurBox.r4.rX =  2 ;
                       CurBox.r4.rY =  0 ;
                       break;
                case 2:
                       CurBox.r1.rX =  -1 ;
                       CurBox.r1.rY =  0 ;

                       CurBox.r2.rX =  0 ;
                       CurBox.r2.rY =  0 ;

                       CurBox.r3.rX =  0 ;
                       CurBox.r3.rY =  1 ;

                       CurBox.r4.rX =  1 ;
                       CurBox.r4.rY =  0 ;
                       break;
                case 3:
                       CurBox.r1.rX =  -1;
                       CurBox.r1.rY =  1 ;

                       CurBox.r2.rX =  0 ;
                       CurBox.r2.rY =  0 ;

                       CurBox.r3.rX =  0 ;
                       CurBox.r3.rY =  1 ;

                       CurBox.r4.rX =  1 ;
                       CurBox.r4.rY =  0 ;
                       break;
                case 4:
                       CurBox.r1.rX =  -1;
                       CurBox.r1.rY =  0 ;

                       CurBox.r2.rX =  0 ;
                       CurBox.r2.rY =  0 ;

                       CurBox.r3.rX =  0 ;
                       CurBox.r3.rY =  1 ;

                       CurBox.r4.rX =  1 ;
                       CurBox.r4.rY =  1 ;
                       break;
                case 5:
                       CurBox.r1.rX =  -1;
                       CurBox.r1.rY =  0 ;

                       CurBox.r2.rX =  0 ;
                       CurBox.r2.rY =  0 ;

                       CurBox.r3.rX =  -1;
                       CurBox.r3.rY =  1 ;

                       CurBox.r4.rX =  0 ;
                       CurBox.r4.rY =  1 ;
                       break;
                case 6:
                       CurBox.r1.rX =  -1;
                       CurBox.r1.rY =  0 ;

                       CurBox.r2.rX =  -1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -