For today's activity, you will be using inheritance in the cs1graphics framework to refine a new Face class. We'll get you started with face.py that has a preliminary definition and an embedded demo script that, if the class is completed, will produce the following animation.
We have provided an initial constructor (though you will need to modify that constructor to succeed), and we've given an implementation of a setColor method. Here are the methods you should provide in order to support the given animation.
Create a method speak(message) which displays the message as a Text item (replacing any previous message that might have been displayed). We suggest an approach where you have a latent Text object already created and displayed as part of the constructor, but one that so happens to display the empty string as the message. Then you simply need to change the message for the cs1graphics Text instance using its setMessage method.
Create methods closeEyes() and openEyes() that can be used to switch between the default round eyes and the "closed" eyes that are horizontal lines. One approach would be to pre-create both sets of eyes (perhaps as two different layers), so that you can simply switch out one set for the other when changing from open to close or vice versa.
Create methods frown() and smile() that change the orientation of the curve that makes the mouth. A simple rotation would suffice if you make sure to change the reference point appropriately at the time of construction.
While our script won't call closeEyes or openEyes twice in a row, your class would be better if it maintains state information to know whether eyes are open, so that it can robustly handle such duplicative calls. Similarly, consider what happens if frown() were called rom a state when already frowning.