#import <Foundation/Foundation.h>
typedef enum{
Kcircle,
KRectangle,
KOblateSpherold
}ShapeType;
typedef enum{
KredColor,
KGreenColor,
KBlueColor
}ShapeColor;
typedef struct{
int x,y,width,height;
}ShapeRect;
typedef struct {
ShapeType type;
ShapeColor fillColor;
ShapeRect bounds;
}Shape;
char *getcolor(ShapeColor colorname){
switch (colorname) {
case KredColor:
return "red";
break;
case KGreenColor:
return "green";
break;
case KBlueColor:
return "blue";
break;
default:
break;
}
}
void DrawCircle(ShapeRect bounds,
ShapeColor fillColor)
{
printf("drawing a circle at (%d %d %d %d) in %s\n",bounds.x,bounds.y,bounds.width,bounds.height, getcolor(fillColor));
}
void DrawRectang(ShapeRect bounds,
ShapeColor fillColor)
{
printf("drawing a rectang at (%d %d %d %d) in %s\n",bounds.x,bounds.y,bounds.width,bounds.height, getcolor(fillColor));
}
void DrawEgg(ShapeRect bounds,
ShapeColor fillColor)
{
printf("drawing a egg at (%d %d %d %d) in %s\n",bounds.x,bounds.y,bounds.width,bounds.height, getcolor(fillColor));
}
void drawshapes(Shape shapes[],int count)
{
int i;
for(i=0;i<count;i++){
switch (shapes[i].type) {
case Kcircle:
DrawCircle(shapes[i].bounds,shapes[i].fillColor);
break;
case KRectangle:
DrawRectang(shapes[i].bounds,shapes[i].fillColor);
break;
case KOblateSpherold:
DrawEgg(shapes[i].bounds,shapes[i].fillColor);
break;
}
}
}
int main(int argc, const char * argv[])
{
Shape shapes[3];
ShapeRect rect0 = {0,0,10,30};
shapes[0].type=Kcircle;
shapes[0].fillColor=KredColor;
shapes[0].bounds=rect0;
ShapeRect rect1 = {30,40,50,60};
shapes[1].type=KRectangle;
shapes[1].fillColor=KGreenColor;
shapes[1].bounds=rect1;
ShapeRect rect2 = {15,18,37,29};
shapes[2].type=KOblateSpherold;
shapes[2].fillColor=KBlueColor;
shapes[2].bounds=rect2;
drawshapes(shapes, 3);
return 0;
}