📄 rus1.c
字号:
#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 + -