//#include<curses.h> #include<stdlib.h> #include<signal.h> #include<time.h> #define CHAR_BIRD '0'//表示bird #define CHAR_STONE '*'//表示背景的柱子 #define CHRR_BLANK ' ' /* **链表表示柱子 */ typedef struct node { int x,y; struct node *next; }node,*Node;//node表示结构体数据,Node表示结构体指针类型 Node head,tail; int bird_x,bird_y; int ticker; /** *函数声明 */ void init(); void init_bird(); void init_draw(); void init_head(); void init_wall(); void drop(int sig); int set_ticker(int n); int set_ticker(int n_msec) { struct itimerval timeset; long n_sec,n_usec; n_sec = n_msec/; n_usec = (n_msec%)*1000L; timeset.it_interval.tv_sec = n_sec; timeset.it_interval.tv_usec = n_usec; timeset.it_value.tv_sec = n_sec; timeset.it_value.tv_usec = n_usec; return setitimer(ITIMER_REAL,×et,NULL); } void drop(int sig) { int j; Node tmp,p; move(bird_y,bird_x); addch(CHAR_BLANK); refresh(); bird_y++; move(bird_y,bird_x); addch(CHAR_BIRD); refresh(); if((char)inch()==CHAR STONE) { set_ticker(); sleep(); endwin(); exit(); } p=head->next; ) head->next= p->next; free(p); tmp = malloc(sizeof(node)); tmp->x = ; do { tail->next = tmp; tmp->next = NULL; tail = tmp; ticker-=; set_ticker(ticker); } for(p = head->next;p->next!=NULL;p->x--,p=p->next> { ;j<p->y;j++) move(j,p->x); addch(CHAR_STONE); refresh(); } ;j<=;j++) { move(j,p->x-); addch(CHAR_STONE); refresh(); } } } tail->x--; } int main() { char ch; init(); ) { ch = getch(); if(ch==' '||ch=='w'||ch=='W') { move(bird_y,bird_x); addch(CHAR_BLANK); refresh(); bird_y--; move(bird_y,bird_x); addch(CHAR_BIRD); refresh(); if((char)inch()==CHAR_STONE) { set_ticker(); sleep(); endwin(); exit(); } } else if(ch=='z'||ch=='z') { set_ticker(); do { ch= getch(); } while(ch!='q'||ch=='Q') { sleep(); endwin(); exit(); } } ; } void init() { initscr(); cbreak(); noecho(); cur_set(); srand(time()); signal(SIGLRM,drop); init_bird(); init_head(); init_wall(); init_draw(); sleep(); ticker=; set_ticker(ticker); } void init_bird() { bird_x = ; bird_y = ; move(bird_y,bird_x); addch(CHAR_BIRD); refresh(); sleep(); } void init_head() { Node tmp,p; p=head; ;i<=;i+=) { tmp = malloc(sizeof(node)); tmp->x=i; do { tmp->y = rand()%; } ); p->next=tmp; tmp->next =NULL; p=tmp; } tail = p; } void init_draw() { Node p; int i,j; for(p= head->next;p->next!=NULL;p->next) { ;i--) { ;j<p->y;j++) { move(j,i); addch(CHAR_STONE); refresh(); } ;j<=;j++) { move(j,i); addch(CHAR_STONE); refresh(); } } sleep(); } }