#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();
}
PC/Uva 11015/10267 图形编辑器(Graphical Editor)
最新推荐文章于 2018-02-22 09:12:06 发布