PC/Uva 11015/10267 图形编辑器(Graphical Editor)

#include <iostream>
#include <algorithm>

class GraphEditor
{
public:
	GraphEditor():image(nullptr),width(0),height(0)
	{
	}
	~GraphEditor()
	{
	}
	void excute()
	{
		char commad;
		while(std::cin>>commad){
			switch (commad){
			case 'I':
				creat_image();
				break;
			case 'C':
				clear_image();
				break;
			case 'L':
				set_pixel();
				break;
			case 'V':
				v_line();
				break;
			case 'H':
				h_line();
				break;
			case 'K':
				region();
				break;
			case 'F':
				fix_pixel();
				break;
			case 'S':
				save_image();
				break;
			case 'X':
				return;
				default:
					break;
			}
		}
		
	}
private:
	void creat_image()
	{
		if(!(std::cin>>width>>height)){
			return;
		}
		image=new char*[width];
		memset(image,0,sizeof(char)*width);
		for(int i=0;i!=width;i++){
			image[i]=new char[height];
			memset(image[i],'0',sizeof(char)*height);
		}
	}
	void clear_image()
	{
		for(int i=0;i!=width;i++){
			memset(image[i],'0',sizeof(char)*height);
		}
		memset(image,0,sizeof(char)*width);
	}
	void set_pixel()
	{
		int x(0),y(0);char c(0);
		if(!(std::cin>>x>>y>>c)){
			return;
		}
		if(x>width-1||y>height-1){
			return;
		}
		image[x][y]=c;
	}
	void v_line()
	{
		int x(0),y1(0),y2(0); char c(0);
		if(!(std::cin>>x>>y1>>y2>>c)){
			return;
		}
		if(x>width-1||y1>height-1||y2>height-1){
			return;
		}
		for(int i=y1-1;i!=y2;i++){
			image[x-1][i]=c;
		}
	}
	void h_line()
	{
		int y(0),x1(0),x2(0); char c(0);
		if(!(std::cin>>x1>>x2>>y>>c)){
			return;
		}
		if(x1>width-1||x2>width-1||y>height-1){
			return;
		}
		for(int i=x1-1;i!=x2;i++){
			image[i][y-1]=c;
		}
	}
	void region()
	{
		int x1(0),x2(0),y1(0),y2(0); char c(0);
		if(!(std::cin>>x1>>x2>>y1>>y2>>c)){
			return;
		}
		for(int i=x1-1;i!=x2;i++){
			for(int j=y1-1;j!=y2;j++){
				image[i][j]=c;
			}
		}
	}
	void fix_pixel()
	{
		int x(0),y(0);char c(0);
		if(!(std::cin>>x>>y>>c)){
			return;
		}
		char sc=image[x-1][y-1];
		if(sc==c){
			return;
		}
		image[x-1][y-1]=c;
		fix_pixel(x-1,y-1,c,sc);
	}

	void save_image()
	{
		char name[100];
		std::cin>>name;
		std::cout<<name<<std::endl;
		for(int i=0;i!=height;i++){
			for(int j=0;j!=width;j++){
				std::cout<<image[j][i]<<' ';
			}
			std::cout<<std::endl;
		}
	}
	void fix_pixel(int x ,int y ,char c,char sc)
	{
		if(x-1>=0&&image[x-1][y]==sc){
			image[x-1][y]=c;
			fix_pixel(x-1,y,c,sc);
		}
		if(x+1<=width-1&&image[x+1][y]==sc){
			image[x+1][y]=c;
			fix_pixel(x+1,y,c,sc);
		}
		if(y-1>=0&&image[x][y-1]==sc){
			image[x][y-1]=c;
			fix_pixel(x,y-1,c,sc);
		}
		if(y+1<=height-1&&image[x][y+1]==sc){
			image[x][y+1]=c;
			fix_pixel(x,y+1,c,sc);
		}
	}
	char** image;
	int width;
	int height;
};



int main()
{

	GraphEditor editor;

	editor.excute();

	getchar();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值