#include #include #include #include #define SWAP(a,b) { (a)^=(b); (b)^=(a); (a)^=(b); } static void l(int w, char d[][w], char c, int x, int y, int x2, int y2) { int dx, dy, p; dx=2*abs(x2-x); dy=2*abs(y2-y); if(dx>dy) { if(x>x2) { SWAP(x,x2); SWAP(y,y2); } p=dy-dx; if(y=0) { y++; p-=dx; } x++; p+=dy; } } else { /* long X slope going up */ while(d[y][x]=c, x!=x2) { if(p>=0) { y--; p-=dx; } x++; p+=dy; } } } else { if(y>y2) { SWAP(x,x2); SWAP(y,y2); } p=dx-dy; if(x=0) { x++; p-=dy; } y++; p+=dx; } } else { /* long Y slope going left */ while(d[y][x]=c, y!=y2) { if(p>=0) { x--; p-=dy; } y++; p+=dx; } } } } void st(int w, int h) { char m[h][w]; static int p[3][2]={{4, 4}, {10, 10}, {6, 6}}; static int v[3][2]={{1, 1}, {1, -1}, {-1, -1}}; int y, i; memset(m, ' ', sizeof m); for(i=0;i<3;i++) { if(p[i][0]<0) p[i][0]=0; else if(p[i][0]>=w) p[i][0]=w-1; if(p[i][1]<0) p[i][1]=0; else if(p[i][1]>=h) p[i][1]=h-1; } l(w, m, '@', p[0][0], p[0][1], p[1][0], p[1][1]); l(w, m, '@', p[1][0], p[1][1], p[2][0], p[2][1]); l(w, m, '@', p[0][0], p[0][1], p[2][0], p[2][1]); for(i=0;i<3;i++) { p[i][0]+=v[i][0]; p[i][1]+=v[i][1]; if(p[i][0]<0 || p[i][0]>=w) { v[i][0]=-v[i][0]; } if(p[i][1]<0 || p[i][1]>=h) { v[i][1]=-v[i][1]; } } for(y=0;y