For this project, you will design and implement an editor for creating shapes. Once the program is done, you should be able to launch it, create some shapes (rectangles, circles, and polygons), and save the resulting collection of shapes in a file. Later, you will be able to load that same file with the program and continue adding shapes to it.
The shapes file syntax should follow this pattern:
# Comment lines start with #, blank lines are ignored
circle x y r [boundaryColor fillColor]
rectangle left top right bottom [boundaryColor fillColor]
polygon n x1 y1 ... xn yn [boundaryColor fillColor]
Here, the colors are optional. If they are absent, the shapes will use the default boundary color and no fill color. Also, "n" in the polygon line is the number of vertices. For example:
# This file represents a red circle with black boundary, a very wide transparent
# rectangle, and a transparent triangle.
circle 100 100 40 black red
rectangle 50 150 700 200
polygon 3 200 50 190 100 300 100
I imagine you can come up with a very long list of optional features, so I will just say that everything else is optional.
I would like you to use this program to bring together the things we have studied and talked about this term. Command-line design, functional design, code construction techniques (assertions, commenting strategy, style, etc.), design patterns if relevant, usability, etc. I will read your code for all of these things. Having a functioning program is important, but for this particular project, high-quality design is more desirable than lots of cool features.
All design matters being equal, I will undoubtedly give a little boost to programs that have richer feature sets. But all design matters are never equal. Furthermore, I will give a smaller boost for ambitious programs than I usually do. Ease of use and clarity of code design will be worth more than a bunch of neato features.
Start early, have fun, and keep in touch.
Have a great summer and beyond.