Please make the complete program, Distinguish between header files and class files. I give three of the classes below, but I do not know if they are complete.I already posted this question before, but the answer was incorreect. ask any questions if you need any help. --------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------- ----------------------------------- Section 1: Project Objectives By given a class hierarchy, focus on Object-Oriented-Design concept, design and write multiple classes. Be able to apply the concepts of inheritance, polymorphism, abstract classes, pure virtual functions, function overriding, etc. Be familiar with common functions in vector class in C++. Section 2: Background Introduction Video game programmers often have to maintain a collection of figures that are simultaneously moving in various directions on the screen. In this project, we will design a solution to a simplified version of the problem. We will maintain a collection of geometric shapes and simultaneously animate those shapes. The functions used to directly access the screen and manage the timer are peculiar to Microsoft Windows, but the principles used are very general and are applicable to all operating systems. Section 3: Project Description We begin with a class that represents a shape that is able to move in any of eight different directions, with each direction being specified by a pair of integer (X, Y) coordinates. Upward or downward motion is indicated by a Y component of ±1. A value of 0 for an X or Y coordinate indicates lack of motion in that direction. Thus, a value of (0,-1) for (X, Y) indicates motion straight up, a value of (-1, 0) indicates motion to the left, and (1, 1) indicates motion that is simultaneously downward and to the right. In this project, you will need to design five classes, namely Shape, ComplexShape, SimpleShape, Box and Tent. These classes form the inheritance hierarchy as showing in the following figure. Shape ComplexShape SimpleShape Box Tent Figure 1 1 Section 3.1: Classes Description The Shape class has a move() function that is pure virtual. This is because a shape is moved by erasing it at its current position and redrawing it at new position and it is not possible to know how to draw a shape without knowing what type of shape it is. The SimpleShape class represents objects that can be drawn at a given position in a specified color. Accordingly, it has member variables for representing position and color and member functions for setting and accessing those values. The SimpleShape class inherits from Shape, notice that the SimpleShape class is still abstract because if provides no implementation for the draw() method. The class does implement the move() method, though. The is because the move() method works the same way for all subclasses of.