Java代写:CS3100 Shapes, Shapes, so many Shapes

代写Java的图形绘制,练习OOP设计以及Graphics类的用法。

Purpose

The purpose of this assignment is to get a better understanding of inheritance in Java by writing and using derived classes.

Brief Description

Your program will read in a plain text file full of commands to create pictures, with each picture full of shapes, draw the pictures, and make the pictures “dance”. The program will follow the commands; in the order the commands are given.

Details

You will write six classes. Five of them will be Circle, Rectangle, Colored Rectangle, a driver program called Homework1.java, and a geometric shape of your choice that must be a descendant of Shape.
The sixth class will be Picture, a generic class that stores Shapes. Picture will have:

  • draw(Graphics g, Color c, int x, int y… other parameters…): a method that, when called, draws all the non-colored shapes in the Picture collection in the color specified as a parameter to draw(). (Any ColoredRectangles in the collection will be drawn in their own colors. All other Shapes will be drawn in the color specified in the call to Picture.draw().) draw() will also have two integer locations, specifying the location for the whole picture. draw() may have parameters, in addition to the color, x and y, if you find them useful.
  • dance(Graphics g, int x, int y, int maxX, int maxY… other parameters…): a method that, when called, makes all the individual shapes within the Picture dance. dance() will have at least four input parameters: x and y, for the location where the dances will start/be centered around, and maxX and maxY, for the largest possible x and y at which shapes will be visible (the size of your DrawingPanel window). (When implementing dance(), students choose whether in the x and y input specify the starting location for a dance, or specify the center of a dance.)
  • Important Note: Picture dance() and draw() may involve parameters not specified by me. However, the Shape objects the Picture draws must be stored as private data by each Picture object and must not be passed in as parameters to dance() or draw().
  • whatever private data fields or supporting methods you find necessary and appropriate

Hint: Consider using one of the members of the Java Collections Framework as either the parent class for Picture or as a data member within Picture.
Given: Shape.java: the base class for the shape classes. Read the comments in Shape.java! The comments in Shape.java describe the input parameters for the methods. The “dancing” in the dance() method should happen at a slow enough speed that a human being can see what is happening.
Circle will be a non-abstract subclass of Shape with added data that controls size. You may choose to make the size be the radius of the circle, the diameter, or something else. However, a circle of size 10 should be about twice the size of a circle of size 5. Your Circle class must work withTestCircle.java.
Rectangle will be a non-abstract subclass of Shape with added data “length” and “width”.
ColoredRectangle is a derived class of Rectangle with added data “color” (which will be stored as a Java Standard Library Color object).
YourClass is a subclass of Shape or of one of its descendants with at least one added data item and appropriate methods. In the input files provided, “Sshape” specifies that a “student shape” should be created. Five numbers are given as sample input – two are to specify the x, y location of the shape, but the other three, plus the color and the word, may or may not be used by you as inputs to your shape creation.
Your shape classes must work with test code similar to that in TestCircle.java. (In other words, the grader has TestRectangle.java, TestColoredRect.java, etc.)

Requirement

Your code must properly adhere to The Rules of object-oriented inheritance, particularly the rule that “Subclass IS-A ParentClass” must always be a true sentence. (Examples: “Car IS-A Vehicle”, “CircularLinkedList IS-A LinkedList”, “Dog IS-A Mammal”.) “Picture IS-A Shape” is NOT a true sentence. Consider a child drawing a picture of a pig – a big, pink circle for the body, four rectangles for the legs, smaller circle for the head, perhaps another rectangle for the snout. The picture of a pig is a grouping of shapes.
Write a driver (client program), called Homework1.java, that reads commands to create pictures and fill them with shapes. When all shapes have been added to a particular picture, the input files may specify that the picture be drawn in a particular color and location, or made to dance. The input files may specify the creation of as many pictures as the user wants, each picture containing as many shapes as the user wants, and shapes may be drawn as many times as the user wants.

  • The driver program must run successfully from the command line / command prompt of a computer (Terminal program on Mac computers, Command Prompt on Windows, etc) using commands like “java Homework1 java Homework1 hwk1input1.txt”, “java Homework1 hwk1input2.txt”, and, in general, “java Homework1 validInputFileName.txt”.
  • When main() starts, in your Homework1.java, args[0] will store a String equal to “validInputFileName.txt”, if the grader were to use the above command. (You can see sample code for reading in an integer this way in the sample driver you were given for MiniProgram 2.) Some sample input test files are provided below, in the list of useful files.
  • Here is sample code to grab the name of the file the user wants your program to open, and open it:
1
2
3
4
5
6
if (args.length <= 0) {
System.out.println("Please use: java Homework1 validInputFileName.txt");
System.exit(0);
}
File f = new File (args[0]);
Scanner input = new Scanner(f);

You might consider embedding your “Scanner input” creation inside a try-catch statement (see the appendices of your textbook for instructions on how to do this), since the Scanner constructor will throw a “FileNotFoundException” if the user types the name of a file that does not exist and your program tries to open the non-existant file for reading.

Useful files

  • Hw1pics.pdf, trying to explain the relationships between Shapes and Pictures
  • Shape.java, the base class for the shape classes
  • Picture.java, some “starter code” for your Picture class – this code is intended to give you ideas; it will not compile or work as-is
  • You will also need DrawingPanel.java (look under “Code files that appear…”, part of the way down the page).
  • Hwk1Useful.java
  • TestCircle.java
  • hwk1input1.txt (circle)
  • hwk1input1a.txt (rectangle)
  • hwk1input2.txt
  • hwk1input3.txt

The grader will have a number of additional plain text files full of commands to create pictures, draw them, and make them dance, to use when testing your programs.
Commands may be found in input files:

  • start picture N: begins the creation of a new picture, and provides a single character identifier for that picture. The identifier may be used in later commands to specify which picture to draw or dance.
  • end picture: ends the creation of a particular picture. Pictures may only be created one at a time. Between start and end of picture creation, there should be only commands to create new shape objects.
  • erase: erase the entire window. (Try drawing a rectangle the size of the DrawingPanel window, the same color as the background.)
  • circle x y size: create a new Circle object, with the given x and y values, and add it to the current Picture. Size will control the size of the circle when it is drawn.
  • rectangle x y length width
  • coloredrect x y length width color
  • Sshape x y int int int color word: create a shape of your choice. The first two integers should specify the x and y coordinates of the shape within the picture. The other integers and words may be used, or not, as you need.
  • draw picture N color int int : draw picture with identifier N, in the color named, at the x y location specified by the two integers.
  • dance picture N x y: make picture with identifier N dance, starting from or centering around the x y location specified by the two integers. The dancing should happen slowly enough that a human being can see what is happening.

Hint: Take a look at the Java Graphics class.
You may add additional data and functionality to your classes as desired. You may not modify Shape source code.
(If you think there is a compelling reason to change Shape, contact the professor. Any change made will apply to the code used by all cs3100 students.)
Insights and Lessons Learned. In readme.txt include a paragraph or two describing what you learned from writing and testing this program. Do your very best to make this well-written. This will be an aspect of the assignment that will count heavily.

What To Turn In

Here is the list of things you have to turn in:

  1. Upload to the homework submission system before midnight on the due date:
    • Your final source code. I will compile and test your programs on the Macs in the lab.
    • Your insights and lessons learned ‘readme.txt’ file.
    • Also upload a plain text file containing commands you created for your Homework1.java program, to show off the best parts of what you implemented.