U E D R , A S I H C RSS

Graphical Editor/Celfin

~cpp
#include <iostream>
#include <queue>

using namespace std;

bool bitmap1[252][252];

char bitmap[252][252];

char instruction;
int x1, x2, y1, y2;
int size_x, size_y;
char color, temp;
char name[255], trash[255];
int i, j;

void CreateBitmap()
{
	for(i=0; i<=size_x+1; i++)
		for(j=0; j<=size_y+1; j++)
			bitmap[i][j] = '.';
	for(i=1; i<=size_x; i++)
		for(j=1; j<=size_y; j++)
			bitmap[i][j] = 'O';
}

void brush(int x_1, int y_1, int x_2, int y_2, char b_color)
{
	int tempInt;
	if(x_1>size_x || x_2>size_x || y_1>size_y || y_2>size_y)
		return;
	if(x_1>x_2)
	{
		tempInt = x_1;
		x_1 = x_2;
		x_2 = tempInt;
	}
	if(y_1>y_2)
	{
		tempInt = y_1;
		y_1 = y_2;
		y_2 = tempInt;
	}
	for(i=x_1; i<=x_2; i++)
		for(j=y_1; j<=y_2; j++)
			bitmap[i][j] = b_color;
}

void printing()
{
	cout << name << endl;
	for(j=1; j<=size_y; j++)
	{
		for(i=1; i<=size_x; i++)
			cout << bitmap[i][j];
		cout <<endl;
	}
}

void regionBrush(int x, int y, char b_color)
{
	const int PLUS_X[8] = {+0, +1, +1, +1, +0, -1, -1, -1};
	const int PLUS_Y[8] = {+1, +1, +0, -1, -1, -1, +0, 1};
	queue<int> pointList_X;
	queue<int> pointList_Y;
	pointList_X.push(x);
	pointList_Y.push(y);
	while(0 != pointList_X.size())
	{
		x = pointList_X.front();
		pointList_X.pop();
		y = pointList_Y.front();
		pointList_Y.pop();
		if (bitmap[x][y]!=temp)
			continue;

		bitmap[x][y] = b_color;
		for (j = 0; j < 8; j++)
		{
			if(bitmap[x + PLUS_X[j]][y + PLUS_Y[j]]==temp && bitmap1[x + PLUS_X[j]][y + PLUS_Y[j]])
			{
				pointList_X.push(x + PLUS_X[j]);
				pointList_Y.push(y + PLUS_Y[j]);
				bitmap1[x + PLUS_X[j]][y + PLUS_Y[j]]=false;
			}
		}
	}
}

int main()
{
	while(cin>>instruction)
	{
		if(instruction=='X')
			break;
		if(instruction=='I' || instruction=='C')
		{
			if(instruction=='I')
				cin >> size_x >> size_y;
			CreateBitmap();
		}
		else if(instruction=='L' || instruction=='V' || instruction=='H' || instruction=='K')
		{
			if(instruction=='L')
			{
				cin>> x1>>y1>>color;
				x2=x1; y2=y1;
			}
			else if(instruction=='V')
			{
				cin>> x1>>y1>>y2>>color;
				x2=x1;
			}
			else if(instruction=='H')
			{
				cin >> x1>>x2>>y1>>color;
				y2=y1;
			}
			else
				cin >>x1>>y1>>x2>>y2>>color;
			brush(x1,y1,x2,y2,color);
		}
		else if(instruction=='F')
		{
			cin >>x1>>y1>>color;
			temp = bitmap[x1][y1];
			for(i=0; i<size_x+2; i++)
				for(j=0; j<size_y+2; j++)
					bitmap1[i][j]=true;
			regionBrush(x1, y1, color);
		}
		else if(instruction=='S')
		{
			cin >> name;
			printing();
		}
		cin.getline(trash, 254);
	}
	return 0;
}
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.0057 sec