#define __LIBRARY__ #include #include #include #include #include #define __NR_init_graphics 87 #define __NR_get_message 88 #define __NR_timer_create 89 #define __NR_paint 90 #define SCREEN_COLOR 2 #define MSG_MOUSE_CLICK 1 #define MSG_TIME 2 #define BIRD_X 30 #define BIRD_Y 100 #define BIRD_WIDTH 10 #define BIRD_HEIGHT 8 #define BIRD_COLOR 5 #define BIRD_UP_SPEED 6 #define BIRD_FALL_SPEED 2 #define OBJECT_WIDTH 15 #define OBJECT_HEIGHT 40 #define OBJECT_COLOR 3 #define OBJECT_POSX_L 50 #define OBJECT_POSX_R 150 #define OBJECT_POSY_L 0 #define OBJECT_POSY_R 150 #define OBJECT_SPEED 4 typedef struct MESS{ unsigned char mid; int pid; struct MESS *next; }message; typedef struct usertimer{ long jiffies; int type; long init_jiffies; int pid; struct usertimer *next; }user_timer; typedef struct OB{ unsigned char posx; unsigned char posy; unsigned char width; unsigned char height; unsigned char color; }object; _syscall1(int,init_graphics,int,color) _syscall1(int,get_message,unsigned char*,msg) _syscall2(int,timer_create,long,milliseconds,int,type) _syscall1(int,paint,unsigned char*,ob) int Rand(int x,int y){ int t; t=time(NULL); return x+t%y; } void forpaint(object ob){ unsigned char *c=(unsigned char *)malloc(sizeof(object)); *c=ob.posx; *(c+1)=ob.posy; *(c+2)=ob.width; *(c+3)=ob.height; *(c+4)=ob.color; paint(c); free(c); } int main(){ object objects[20]; int i; objects[0].posx=BIRD_X; objects[0].posy=BIRD_Y; objects[0].width=BIRD_WIDTH; objects[0].height=BIRD_HEIGHT; objects[0].color=BIRD_COLOR; for(i=1;i<20;i++){ objects[i].height=OBJECT_HEIGHT/10*i; objects[i].width=OBJECT_WIDTH; objects[i].posx=OBJECT_POSX_L+Rand(10,15)*i; objects[i].posy=(i%2)?(200-objects[i].height):OBJECT_POSY_L; objects[i].color=OBJECT_COLOR; } init_graphics(SCREEN_COLOR); for(i=0;i<20;i++){ forpaint(objects[i]); } timer_create(100,0); while(1){ unsigned char *msg=(unsigned char *)malloc(sizeof(unsigned char)); get_message(msg); if(*msg==MSG_MOUSE_CLICK){ objects[0].color=SCREEN_COLOR; forpaint(objects[0]); objects[0].posy-=BIRD_UP_SPEED; objects[0].color=BIRD_COLOR; forpaint(objects[0]); } else if(*msg==MSG_TIME){ objects[0].color=SCREEN_COLOR; forpaint(objects[0]); objects[0].posy+=BIRD_FALL_SPEED; objects[0].color=BIRD_COLOR; forpaint(objects[0]); for(i=1;i<20;i++){ objects[i].color=SCREEN_COLOR; forpaint(objects[i]); objects[i].posx-=OBJECT_SPEED; objects[i].color=OBJECT_COLOR; forpaint(objects[i]); if((objects[i].posx+objects[i].width)<0){ objects[i].posx=150; objects[i].posy=Rand(OBJECT_POSY_L,OBJECT_POSY_R); } } } free(msg); } return 0; }