新程序_基于 graphics.h 库的画图程序
查看原帖
新程序_基于 graphics.h 库的画图程序
1034211
TIS_Minecraft_CNAI楼主2023/11/14 21:19
//使用时加上 -mwindos
#include <graphics.h>
#include <cstdio>
#include <cmath>
using namespace std;
class Point {
	protected:
		int x;
		int y;
		int r;
		int x1;
		int y1;
	public:
		Point() {
			x=0;
			y=0;
			r=0;
			x1=0;
			y1=0;
		}
		virtual void set(int a,int b)=0;
		virtual void setstart(int a,int b)=0;
		virtual void draw()=0;
		virtual void drawf()=0;
		int getx() const {
			return x;
		}
		int gety() const {
			return y;
		}
};
class MyCircle:public Point {
		virtual void set(int a,int b) {
			int dx=getx()-a;
			int dy=gety()-b;
			r=(int)sqrt(dx*dx+dy*dy);
			x1=a;
			y1=b;
		}
		virtual void setstart(int a,int b) {
			x=a;
			y=b;
			r=0;
			x1=a;
			y1=b;
		}
		virtual void draw() {
			circle(x,y,r);
		}
		virtual void drawf() {
			setfillstyle(SOLID_FILL,getcolor());
			pieslicef(x,y,0,360,r);
		}
};
class rcircle:public Point {
	public:
		virtual void set(int a,int b) {
			x1=getx()-a;
			y1=gety()-b;
		}
		virtual void setstart(int a,int b) {
			x=a;
			y=b;
			r=0;
			x1=0;
			y1=0;
		}
		virtual void draw() {
			ellipsef(x,y,0,360,x1,y1);
		}
		virtual void drawf() {
			setfillstyle(SOLID_FILL,getcolor());
			fillellipse(x,y,x1,y1);
		}
};
class MyLine:public MyCircle {
	public:
		virtual void draw() {
			line(x,y,x1,y1);
		}
		virtual void drawf() {
			line(x,y,x1,y1);
		}
};
class Ju:public MyCircle {
	public:
		virtual void draw() {
			rectangle(x,y,x1,y1);
		}
		virtual void drawf() {
			setfillstyle(SOLID_FILL,getcolor());
			int poly[8]= {x,y,x1,y,x1,y1,x,y1};
			fillpoly(4,poly);
		}
};
int main() {
	int b=0;
	MyCircle r;
	rcircle nr;
	MyLine l;
	Ju ju;
	Point *p=&r;
	bool bDraw=false;
	initgraph(800,600);
	setfillstyle(SOLID_FILL,BLUE);
	bar(10,20,40,50);
	setfillstyle(SOLID_FILL,YELLOW);
	bar(40,20,70,50);
	setfillstyle(SOLID_FILL,RED);
	bar(70,20,100,50);
	setfillstyle(SOLID_FILL,GREEN);
	bar(100,20,130,50);
	setfillstyle(SOLID_FILL,WHITE);
	bar(130,20,160,50);
	setfillstyle(SOLID_FILL,0xFF6100);
	bar(160,20,190,50);
	setfillstyle(SOLID_FILL,0xA020E0);
	bar(190,20,220,50);

	setfillstyle(SOLID_FILL,WHITE);
	bar(10,51,40,81);
	setfillstyle(SOLID_FILL,BLACK);
	line(15,66,35,66);
	setfillstyle(SOLID_FILL,WHITE);
	bar(10,82,40,112);
	setfillstyle(SOLID_FILL,BLACK);
	circle(25,97,10);
	setfillstyle(SOLID_FILL,WHITE);
	bar(10,113,40,143);
	setfillstyle(SOLID_FILL,BLACK);
	rectangle(15,120,35,136);
	setfillstyle(SOLID_FILL,WHITE);
	bar(10,144,40,174);
	setfillstyle(SOLID_FILL,BLACK);
	ellipsef(25,159,0,360,10,6);

	setfillstyle(SOLID_FILL,WHITE);
	bar(10,175,40,205);
	outtextxy(15,180,"fill");
	setfillstyle(SOLID_FILL,WHITE);
	bar(10,206,40,236);
	outtextxy(10,210,"unfill");

	outtextxy(335,35,"line width");
	setfillstyle(SOLID_FILL,WHITE);
	bar(400,20,430,50);
	setfillstyle(SOLID_FILL,BLACK);
	bar(405,35,425,36);
	setfillstyle(SOLID_FILL,WHITE);
	bar(435,20,465,50);
	setfillstyle(SOLID_FILL,BLACK);
	bar(440,35,460,38);
	setfillstyle(SOLID_FILL,WHITE);
	bar(470,20,500,50);
	setfillstyle(SOLID_FILL,BLACK);
	bar(475,35,495,40);

	outtextxy(565,35,"line style");
	setfillstyle(SOLID_FILL,WHITE);
	bar(630,20,660,50);
	setcolor(BLACK);
	setlinestyle(PS_SOLID,0,1,NULL);
	line(632,35,657,35);
	setfillstyle(SOLID_FILL,WHITE);
	bar(665,20,695,50);
	setcolor(WHITE);
	setlinestyle(PS_DOT,0,1,NULL);
	line(667,35,690,35);

	setlinewidth(3);
	setcolor(WHITE);
	line(45,55,45,595);
	line(45,55,795,55);
	line(45,595,795,595);
	line(795,55,795,595);
	setlinewidth(1);

	setfillstyle(SOLID_FILL,WHITE);
	bar(10,300,40,330);
	outtextxy(10,305,"clear");

	setfont(16,0,"宋体");
	setcolor(0x00F000F0);
	setbkcolor(BLACK);
	setlinestyle(PS_SOLID);
	mouse_msg msg= {0};

	for(; is_run(); delay_fps(60)) {
		while(mousemsg()) {
			msg=getmouse();
		}
		if(msg.is_down()) {
			if(msg.is_left()) {
				if(msg.x>9&msg.x<41&msg.y>19&msg.y<51) {
					setcolor(0x0000FF);
				} else if(msg.x>39&msg.x<71&msg.y>19&&msg.y<51) {
					setcolor(0xFFFF00);
				} else if(msg.x>69&msg.x<101&msg.y>19&&msg.y<51) {
					setcolor(0xFF0000);
				} else if(msg.x>99&msg.x<131&msg.y>19&&msg.y<51) {
					setcolor(0x00FF00);
				} else if(msg.x>129&msg.x<161&msg.y>19&&msg.y<51) {
					setcolor(0xFFFFFF);
				} else if(msg.x>159&msg.x<191&msg.y>19&&msg.y<51) {
					setcolor(0xFF6100);
				} else if(msg.x>189&msg.x<211&msg.y>19&&msg.y<51) {
					setcolor(0xA020E0);
				} else if(msg.x>399&msg.x<431&msg.y>19&&msg.y<51) {
					setlinewidth(1);
					setcolor(getcolor());
				} else if(msg.x>434&msg.x<466&msg.y>19&&msg.y<51) {
					setlinewidth(3);
					setcolor(getcolor());
				} else if(msg.x>469&msg.x<501&msg.y>19&&msg.y<51) {
					setlinewidth(9);
					setcolor(getcolor());
				} else if(msg.x>9&msg.x<41&msg.y>299&msg.y<331) {
					setfillstyle(SOLID_FILL,BLACK);
					bar(48,58,792,592);
				} else if(msg.x>630&msg.x<650&msg.y>20&msg.y<50) {
					setlinestyle(PS_SOLID,0,1,NULL);
					setcolor(getcolor());
				} else if(msg.x>665&msg.x<695&msg.y>20&msg.y<50) {
					setlinestyle(PS_DOT,0,1,NULL);
					setcolor(getcolor());
				} else if(msg.x>9&msg.x<41&msg.y>50&msg.y<82) {
					p=&l;
				} else if(msg.x>9&msg.x<41&msg.y>81&msg.y<113) {
					p=&r;
				} else if(msg.x>9&msg.x<41&msg.y>112&msg.y<144) {
					p=&ju;
				} else if(msg.x>9&msg.x<41&msg.y>143&msg.y<175) {
					p=&nr;
				} else if(msg.x>9&msg.x<41&msg.y>174&msg.y<206) {
					b=1;
				} else if(msg.x>9&msg.x<41&msg.y>205&msg.y<237) {
					b=0;
				} else if(msg.x>45&msg.x<795&msg.y>55&msg.y<595) {
					p->setstart(msg.x,msg.y);
					setwritemode(R2_XORPEN);
					bDraw=true;
				}
			}
		}
		if(msg.is_right()) {
			if(bDraw) {
				if(b==0) {
					p->draw();
				} else {
					p->drawf();
				}
				setwritemode(R2_COPYPEN);
				bDraw=false;
			}
		} else if(msg.is_move()) {
			if(bDraw) {
				if(b==0) {
					p->draw();
				} else {
					p->drawf();
				}
				p->set(msg.x,msg.y);
				if(b==0) {
					p->draw();
				} else {
					p->drawf();
				}
			}
		} else if(msg.is_up()) {
			if(bDraw) {
				setwritemode(R2_COPYPEN);
				p->set(msg.x,msg.y);
				if(b==0) {
					p->draw();
				} else {
					p->drawf();
				}
				bDraw=false;
			}
		}
		xyprintf(0,0,"x=%4d y=%4d",msg.x,msg.y);
	}
	closegraph();
	return 0;
}

2023/11/14 21:19
加载中...