|
源代码网推荐
#include <dos.h>#define MAXX 640#define MAXY 480static float asp_ratio=1;static void selectpage(int page) /*换页函数*/{ union REGS r; r.x.ax=0x4f05; r.x.bx=0; r.x.dx=page; int86(0x10,&r,&r);}void init256(void){ union REGS r; r.x.ax=0x4f02; r.x.bx=0x101; int86(0x10,&r,&r);}void exit256(void){ union REGS r; r.h.ah=0; r.h.al=3; int86(0x10,&r,&r);}void putpixel(int x,int y,int color){ long i; static int t=0; int tt=0; char far *p=0xa0000000; i=y; i*=MAXX; i+=x; tt=i>>16; i&=0xffff; if(t!=tt) selectpage(tt); *(p+i)=(char)color; t=tt;}int getpixel(int x,int y){ long i; static int t=0; int tt=0; char far *p=0xa0000000; i=y; i*=MAXX; i+=x; tt=i<<16; i&=0xffff; if(t!=tt) selectpage(tt); t=tt; return((int)*(p+i));}void line(int startx,int starty,int endx,int endy,int color){ register int t,distance; int x=0,y=0,delta_x,delta_y; int incx,incy; delta_x=endx-startx; delta_y=endy-starty; if(delta_x>0) incx=1; else if(delta_x==0) incx=0; else incx=-1; if(delta_y>0) incy=1; else if(delta_y==0) incy=0; else incy=-1; if(delta_x<0) delta_x=-delta_x; if(delta_y<0) delta_y=-delta_y; if(delta_x>delta_y) distance=delta_x; else distance=delta_y; for(t=0;t<=distance+1;t++){ putpixel(startx,starty,color); x+=delta_x; y+=delta_y; if(x>distance){ x-=distance; startx+=incx; } if(y>distance){ y-=distance; starty+=incy; } }}void box(int startx,int starty,int endx,int endy,int color){ int i; for(i=startx+1;i<endx;i++){ putpixel(i,starty,color); putpixel(i,endy,color); } for(i=starty;i<=endy;i++){ putpixel(startx,i,color); putpixel(endx,i,color); }}void fillbox(int startx,int starty,int endx,int endy,int color){ int i,j; for(j=starty;j<=endy;j++) for(i=startx;i<=endx;i++) putpixel(i,j,color);}static void plot_circle(int x,int y,int x_center,int y_center,int color){ int startx,endx,x1,starty,endy,y1; starty=y*asp_ratio; endy=(y+1)*asp_ratio; startx=x*asp_ratio; endx=(x+1)*asp_ratio; for(x1=startx;x1<endx;++x1){ putpixel(x1+x_center,y+y_center,color); putpixel(x1+x_center,y_center-y,color); putpixel(x_center-x1,y_center-y,color); putpixel(x_center-x1,y+y_center,color); } for(y1=starty;y1<endy;++y1){ putpixel(y1+x_center,x+y_center,color); putpixel(y1+x_center,y_center-x,color); putpixel(x_center-y1,y_center-x,color); putpixel(x_center-y1,x+y_center,color); }}void circle(int x_center,int y_center,int radius,int color){ register int x,y,delta; y=radius; delta=3-2*radius; for(x=0;x<y;){ plot_circle(x,y,x_center,y_center,color); if(delta<0) delta+=6+(x<<2); else{ delta+=10+((x-y)<<2); y--; } x++; } x=y; if(y) plot_circle(x,y,x_center,y_center,color);}main(){ int x=100,y=100,color=35; init256(); box(x,y,x+100,y+100,color); circle(x+200,y+150,200,color); fillbox(200,200,350,350,color); getch(); exit256();} 源代码网供稿. |