#include #include #include #include #include static const char ttyfn[]="/dev/tty"; /* X^31+X^13+1 */ #define RPOLY 0x80002001UL unsigned long rseed=1; int rnd(int bits) { int i; for(i=0; i>=1; } return rseed&((1<5*(mc[i]=='*')) continue; term_gotoxy(mx[i],my[i]); c[3]='0'+rnd(3); putp(c); putp((mv[i]^=1)==0 ? t_dim : t_bold); /*putp(tparm(t_setf,rnd(3))); */ putchar(mc[i]); } } #define MXM 1000 main(void) { /* trzeba jakos opisac kierunki, moze tak: */ static const int dt[]={0,1,1,1,0,-1,-1,-1,0,1}; /* zmiana x: dt[d+2]; zmiana y: dt[d]; */ int i,x,y,ms,d,r,m,mx[MXM],my[MXM]; char mv[MXM],mc[MXM]; /* trzeba jakos generowac liczby pseudolosowe... */ /* srand(12345); */ rseed=1|time(NULL); /* inicjalizacja obslugi terminala */ if(term_init(NULL/*"vt100"*/)<0) return -1; /* wyczysc ekran */ sleep(1); clearscreen(); m=choinka_init("choinka.txt", "*+#", mx, my, mc); memset(mv,0,sizeof(mv)); ms=256; /*fprintf(stderr,"%d gwiazdek\n",m); fflush(stderr);*/ nast: /* zaczekaj chwile */ poll(NULL,0,ms); /* jesli sa dane z klawiatury to przeczytej */ r=0; if(read(1,&r,1)==1) { if(r=='0') goto stop; /* '0' oznacza koniec */ /* inne cyfry ustawiaja szybkosc weza */ if((unsigned)(r-'0')<10) ms=2048>>(r-'1'); } /*fprintf(stderr,"("); fflush(stderr);*/ choinka_mig(m, mx, my, mc, mv); /*fprintf(stderr,")"); fflush(stderr);*/ fflush(stdout); goto nast; /* konczac program odtworz ustawienia terminala */ stop: clearscreen(); tcsetattr(1,TCSAFLUSH,&old_t); return 0; }