CSE 131 Module 4: Input & Output

Extensions

Extension 1: Create an Instrument (6 points):

Authors
We have seen how sound can be represented as a summation of sine waves. In this extension, you will process a description of an instrument, which specifies the relative intensities of that instruments overtones. You will modify a copy of PlayThatTune so that the sound emitted for each note has the profile of the specified instrument.

Warm Up

Overview

Procedure

  1. First prompt the user for how many frequency factors the user wishes to specify. In the above example, 3 such frequencies were used.
  2. For each frequency factor, prompt the user for its
    The information about the frequency factors must be saved (in arrays) for future use.
  3. The code in PlayThatTune, copied with attribution from PlayThatTune, reads in a file and computes a value in a variable called hz that is the fundamental frequency of the tune being played.
    The hz value is computed from concert A (440 Hz), taking the specified number of equally spaced chromatic steps above (or below) concert A.

    The relevant details, explained in the lecture slides for this module, are not necessary to complete this extension, but please ask if you would like clarification.

  4. Your task is to modify the assignment to the sample a[i] in the provided code:
    The sine wave sampled and assigned there is for:

    In place of that value, you must compute the sum of sine wave samples, one for each frequency factor, as follows:

  5. Test your program on the A.txt file first, which is a single note. Then try Ascale.txt and some other songs.
When you done with this extension, you must be cleared by the TA to receive credit.

This demo box is for extension 4.1
Last name WUSTL Key Propagate?
(NOT your numeric ID) Do not propagate
lower case only
e.g. Smith j.smith
1    

Acknowledgements and assertion of integrity

You must select one of the options below
The work submitted here was performed in accordance with this course's policy on collaboration.
On your honor, you have neither given nor received any unauthorized aid on this assignment.

However, the following TAs, students, or professors were supportive in completing this assignment.
Their help was also in accordance with course policies.

Thanks to (leave blank if appropriate):

In spite of seeking help as allowable by this course's policy on collaboration, you were unable to complete this assignment. No credit will be received for this assignment.

You would like to be contacted by an instructor to facilitate staying on track in this course.

Comments about this:

You have NOT abided by this course's policy on collaboration. No credit will be received for this assignment, but by checking this box, no academic integrity violation will be filed for this assignment.

You would like to be contacted by an intructor to faciliate staying on track in this course.

Comments about this:


TA: Password:

End of extension 1


Extension 2: Draw a Sound Wave (10 points):

Authors

Warm Up

To understand this extension, you should first be familiar with the extension in which an instrument's sound is produced as the sum of sine waves.

You will modify your program further in this extension to produce the sine-wave plots that depict how sine-wave addition occurs.

The details of this assignment are not completely specified so that you must think through what is needed to produce meaningful plots. Ask for help as needed!

Procedure

When you done with this extension, you must be cleared by the TA to receive credit.

This demo box is for extension 4.2
Last name WUSTL Key Propagate?
(NOT your numeric ID) Do not propagate
lower case only
e.g. Smith j.smith
1    

Acknowledgements and assertion of integrity

You must select one of the options below
The work submitted here was performed in accordance with this course's policy on collaboration.
On your honor, you have neither given nor received any unauthorized aid on this assignment.

However, the following TAs, students, or professors were supportive in completing this assignment.
Their help was also in accordance with course policies.

Thanks to (leave blank if appropriate):

In spite of seeking help as allowable by this course's policy on collaboration, you were unable to complete this assignment. No credit will be received for this assignment.

You would like to be contacted by an instructor to facilitate staying on track in this course.

Comments about this:

You have NOT abided by this course's policy on collaboration. No credit will be received for this assignment, but by checking this box, no academic integrity violation will be filed for this assignment.

You would like to be contacted by an intructor to faciliate staying on track in this course.

Comments about this:


TA: Password:

End of extension 2


Extension 3: Loud or Graphics-ful Bouncing Balls (2 points):

Authors

Extension points available for Lab 4

Trevor Larsen and Tyler Spinks submitted this video for your amusement, as a demo of this extension. It is based on the John Cena Prank Call video.

If you have added sound or pictures to your solution for Lab 4, demo those to a TA and receive points for this extension.

When you done with this extension, you must be cleared by the TA to receive credit.

This demo box is for extension 4.3
Last name WUSTL Key Propagate?
(NOT your numeric ID) Do not propagate
lower case only
e.g. Smith j.smith
1    

Acknowledgements and assertion of integrity

You must select one of the options below
The work submitted here was performed in accordance with this course's policy on collaboration.
On your honor, you have neither given nor received any unauthorized aid on this assignment.

However, the following TAs, students, or professors were supportive in completing this assignment.
Their help was also in accordance with course policies.

Thanks to (leave blank if appropriate):

In spite of seeking help as allowable by this course's policy on collaboration, you were unable to complete this assignment. No credit will be received for this assignment.

You would like to be contacted by an instructor to facilitate staying on track in this course.

Comments about this:

You have NOT abided by this course's policy on collaboration. No credit will be received for this assignment, but by checking this box, no academic integrity violation will be filed for this assignment.

You would like to be contacted by an intructor to faciliate staying on track in this course.

Comments about this:


TA: Password:

End of extension 3


Extension 4: Magic 8 Ball (7 points):

Authors
A video demonstrating my solution can be found here.

The Magic Eight Ball is an autoresolution device. A question of boolean type is posed, the Magic Eight Ball is turned over, and it then displays its advice in a murky window. It has resurfaced in other guises over the ages, most recently perhaps as The Magic Conch Shell in the Club SpongeBob episode of SpongeBob SquarePants.

To receive credit for this extension, your implementation of the Magic 8 Ball must:

When you done with this extension, you must be cleared by the TA to receive credit.

This demo box is for extension 4.4
Last name WUSTL Key Propagate?
(NOT your numeric ID) Do not propagate
lower case only
e.g. Smith j.smith
1    

Acknowledgements and assertion of integrity

You must select one of the options below
The work submitted here was performed in accordance with this course's policy on collaboration.
On your honor, you have neither given nor received any unauthorized aid on this assignment.

However, the following TAs, students, or professors were supportive in completing this assignment.
Their help was also in accordance with course policies.

Thanks to (leave blank if appropriate):

In spite of seeking help as allowable by this course's policy on collaboration, you were unable to complete this assignment. No credit will be received for this assignment.

You would like to be contacted by an instructor to facilitate staying on track in this course.

Comments about this:

You have NOT abided by this course's policy on collaboration. No credit will be received for this assignment, but by checking this box, no academic integrity violation will be filed for this assignment.

You would like to be contacted by an intructor to faciliate staying on track in this course.

Comments about this:


TA: Password:

End of extension 4


Extension 5: Roving Eyes (10 points):

Authors
A video demonstrating my solution can be found here.
This extension has been brought back from the 131 vaults, having originally been conceived by Ken Goldman, formerly a professor in our department and currently at Google. In its new form, it has been rewritten to comform to Sedgewick's API. Also, it does not make use of objects, so it can be offered as an extension at this point in the course.

Although the solution can be quite short (mine weighed in at approximately 50 lines), there are some tricky aspects to this work, and it may be an extension that you work on over several weeks.

You will have to interact with the mouse, perhaps for the first time, both in terms of its location and determining whether the mouse has been pressed and released. It will take patience to get this to work, but most students like the end result.

The idea

This is the initial image you should draw. The picture can be found as images/ken.jpg in your workspace. Here, I have clicked over the image to deposit my first eyeball. The mouse (not shown) is to the right, so the eyeball is looking that way. Then I clicked a second time to deposit another eyeball, this time over the right eye shown in the image.

Both eyeballs are looking at my mouse, which is at the lower right (not shown).

Each time I click the mouse, another eyeball is deposited, and all eyeballs continue looking at my mouse, wherever it happens to be.

Part 0: Initialize your application

This code is included in your repository. Open the extensions folder in which you will find the eyeballs package. Open and run the Eyeballs class.

Part 1: Detecting mouse clicks

Most programs that interact with the mouse use a listener model that takes action when the mouse is moved, pressed, released, or clicked (a press and release action).

Unfortunately, in Sedgewick's API, we can only determine the current status of a mouse button as up or down. We must then use logic and iteration to discover whether a mouse has been pressed, released, or clicked. This low-level API for the mouse leads to some mixed feelings about how you are learning to interact with the mouse:

Following is a description of mouse actions as they are typically used in most applications:

Mouse press
We think of this as a single push-down action on a mouse or trackpad. This action usually initiates some activity in applications.
From an application's point of view, this event happens just once when the mouse is pushed down. Generation of another mouse press action would require the mouse to be released, and then pressed again.
Mouse release
If a mouse has been pressed, then it can be released. Some applications distinguish between the press and release, so that the mouse can move between those actions. This is sometimes called dragging the mouse.
Mouse click
While this is a compound action, consisting of a mouse press followed by a mouse release, it is usually treated as an atomic action that takes place at exactly one coordinate. The release also happens within some reasonable timeframe of the press, if the press and release are to be construed as a click.
The above mouse actions are the logical ones that we wish to implement. Actually, it suffices for this extension to determine only a mouse release, but you are welcome to think about how to discover the other actions.

The Sedgwick API offers only the following interface, which we must use in our application to simulate the above mouse actions.

double mouseX()
returns the x-coordinate of the mouse, expressed in terms of the coordinates of the StdDraw canvas.
double mouseY()
returns the y-coordinate of the mouse, expressed in terms of the coordinates of the StdDraw canvas.
boolean mousePressed()
A better name for this would be boolean isMouseDown(), because this method does not detect a mouse press in the standard view of mouse actions. Instead it simply reports whether the mouse button is currently pressed or not.

Your task is to simulate a mouse-click action using the above API. This will inevitably involve polling the mouse as to whether the button is down or up. Consider the following code:

while (!StdDraw.mousePressed()) {
    // do nothing, 
    // we are waiting for the mouse button to go down  
    //
    // The line below is important, as described below
    //
    StdDraw.show(50);
}
Make sure your eyeballs are depositing properly as you mouse-click before you move on to implement more features.

Part 2: Following the mouse movement

A pupil within an eyeball tracks objects using the geometry of similar triangles. The following diagram and discussion may be useful.

Putting it all together

Your code is like the bouncing ball code, in that it enacts a sequence of frames. Each frame consists of checking whether and where a new eyeball should be deposited. Moreover, all existing eyeballs must be updated so that they appear to be tracking the mouse as it moves through the window.

Give yourself time for this extension, and develop and test the aspects in the order described above.

When you done with this extension, you must be cleared by the TA to receive credit.

This demo box is for extension 4.5
Last name WUSTL Key Propagate?
(NOT your numeric ID) Do not propagate
lower case only
e.g. Smith j.smith
1    

Acknowledgements and assertion of integrity

You must select one of the options below
The work submitted here was performed in accordance with this course's policy on collaboration.
On your honor, you have neither given nor received any unauthorized aid on this assignment.

However, the following TAs, students, or professors were supportive in completing this assignment.
Their help was also in accordance with course policies.

Thanks to (leave blank if appropriate):

In spite of seeking help as allowable by this course's policy on collaboration, you were unable to complete this assignment. No credit will be received for this assignment.

You would like to be contacted by an instructor to facilitate staying on track in this course.

Comments about this:

You have NOT abided by this course's policy on collaboration. No credit will be received for this assignment, but by checking this box, no academic integrity violation will be filed for this assignment.

You would like to be contacted by an intructor to faciliate staying on track in this course.

Comments about this:


TA: Password:

End of extension 5


Extension 6: Roving Eyes; Slow Motion Edition (5 points):

Authors
To do this extension, you must first complete the one above and successfully demo it. Then you can earn the points for this extension by causing the eyes to move slowly from where they were looking to where they should be looking.
You are not allowed to do this by slowing the simulation down. Instead, you must smoothly vary where the eyes should look in the normal speed of the simulation.
When you done with this extension, you must be cleared by the TA to receive credit.

This demo box is for extension 4.6
Last name WUSTL Key Propagate?
(NOT your numeric ID) Do not propagate
lower case only
e.g. Smith j.smith
1    

Acknowledgements and assertion of integrity

You must select one of the options below
The work submitted here was performed in accordance with this course's policy on collaboration.
On your honor, you have neither given nor received any unauthorized aid on this assignment.

However, the following TAs, students, or professors were supportive in completing this assignment.
Their help was also in accordance with course policies.

Thanks to (leave blank if appropriate):

In spite of seeking help as allowable by this course's policy on collaboration, you were unable to complete this assignment. No credit will be received for this assignment.

You would like to be contacted by an instructor to facilitate staying on track in this course.

Comments about this:

You have NOT abided by this course's policy on collaboration. No credit will be received for this assignment, but by checking this box, no academic integrity violation will be filed for this assignment.

You would like to be contacted by an intructor to faciliate staying on track in this course.

Comments about this:


TA: Password:

End of extension 6


Extension 7: String theory (2 points):

Authors

Overview

The purpose of this assignment is to give you the skills to index and analyze Strings in order to prepare for different web scraping tasks. Once you are able to extract information of interest from a target String, you will be ready to query a webpage, save the raw HTML code, and extract relevant information.

For this assignment, you are working on simple arithmetic expressions as Strings. Your task is to extract the two integer values and the arithmetic operator from the String and save them as variables of their respective type. You will then compute and print the value of the expression.

Example

Given:
String s = "21 + 33";

You must extract 21 and 33 to int variables and + to a char or String variable. Then you will compute and print the expression 21 + 33 = 54

Procedure

As previously mentioned, the purpose of this assignment is to prepare you for dynamic web scraping tasks. As such, it is expected that you implement this assignment dynamically. In other words, the only assumption you should have about the String you are analyzing is that it will be in the format (Positive Integer)(Arithmetic Operator) (Positive Integer). This implies your implementation should be able to run effectively on an expression containing positive integers of any length. It should also be able to effectively extract any arithmetic operator (+, -, *, /) and print the proper answer. Lastly, your code should be able to deal with possible spaces in the String.

It is important to note that there are many acceptable ways to implement this assignment. It is up to your discretion which way you choose to implement the procedure as long as it abides by the requirements described above.

  1. Begin by extracting the first integer value from the String using the methods described above. Keep in mind that the integer can be multiple digits. You might be extracting 2 or 274539.
  2. Implement a similar approach for the operator and second integer.
  3. Now that you have the two integers in int variables and the operator in a char or String variable, perform and print the simple arithmetic operation.

Demo

Be prepared for your TA to review your code and change the digits and operator in the String you are analyzing to ensure your implementation is dynamic.
When you done with this extension, you must be cleared by the TA to receive credit.

This demo box is for extension 4.7
Last name WUSTL Key Propagate?
(NOT your numeric ID) Do not propagate
lower case only
e.g. Smith j.smith
1    

Acknowledgements and assertion of integrity

You must select one of the options below
The work submitted here was performed in accordance with this course's policy on collaboration.
On your honor, you have neither given nor received any unauthorized aid on this assignment.

However, the following TAs, students, or professors were supportive in completing this assignment.
Their help was also in accordance with course policies.

Thanks to (leave blank if appropriate):

In spite of seeking help as allowable by this course's policy on collaboration, you were unable to complete this assignment. No credit will be received for this assignment.

You would like to be contacted by an instructor to facilitate staying on track in this course.

Comments about this:

You have NOT abided by this course's policy on collaboration. No credit will be received for this assignment, but by checking this box, no academic integrity violation will be filed for this assignment.

You would like to be contacted by an intructor to faciliate staying on track in this course.

Comments about this:


TA: Password:

End of extension 7


Extension 8: Web Scraper (3 points):

Authors

Intro

Web scrapers are programs that search websites and scrape off useful data. You will write a web scraper in this assignment that looks for weather information in a zip code of interest. There are two ways to go about this:

URLs and web sites
Simple use of jsoup
In this assignment, you will process the text yourself after getting the document's text using jsoup. You could use methods in jsoup to isolate what you need, but you can explore that on your own.

Procedure

Demo

When you done with this extension, you must be cleared by the TA to receive credit.

This demo box is for extension 4.8
Last name WUSTL Key Propagate?
(NOT your numeric ID) Do not propagate
lower case only
e.g. Smith j.smith
1    

Acknowledgements and assertion of integrity

You must select one of the options below
The work submitted here was performed in accordance with this course's policy on collaboration.
On your honor, you have neither given nor received any unauthorized aid on this assignment.

However, the following TAs, students, or professors were supportive in completing this assignment.
Their help was also in accordance with course policies.

Thanks to (leave blank if appropriate):

In spite of seeking help as allowable by this course's policy on collaboration, you were unable to complete this assignment. No credit will be received for this assignment.

You would like to be contacted by an instructor to facilitate staying on track in this course.

Comments about this:

You have NOT abided by this course's policy on collaboration. No credit will be received for this assignment, but by checking this box, no academic integrity violation will be filed for this assignment.

You would like to be contacted by an intructor to faciliate staying on track in this course.

Comments about this:


TA: Password:

End of extension 8


Extension 9: Stock Scraper (5 points):

Authors
It is highly recommended that you complete the String Theory assignment before attempting this assignment.

Additionally, this assignment builds off of the Web Scraper assignment and it is recommended that you complete that assignment prior to attempting this one. If you decide to work on this assignment without having completed the former, it is, however, necessary that you watch the two videos provided in the Web Scraper assignment in order to fully understand this assignment.

Overview

Stocks represent equity ownership in a company and can either be rapidly traded for the purpose of profiting from price fluctuations or can be held in the long-term for the purpose of developing a substantial stake in a corporation which grants voting rights and a general "say" in the day-to-day operations of the company, among other things. As such, it can be useful to know the current stock price in real-time in order to track changes and monitor an investment.

In this assignment, you will access the Yahoo! Finance website, store the HTML code of the website in a String, and extract the current stock price of a company, along with some other useful information. You will use the API provided through Jsoup to download and store the HTML code of the website, which you learned how to do through the aforementioned Web Scraper assignment videos. Once you've stored the HTML code of the website in a String, you will then analyze the code to find the relevant information and a corresponding unique identifying String which will allow you to locate and extract it.

Procedure

  1. Use ArgsProcessor to prompt the user for the stock symbol to look up.
  2. For the stock symbol given, use Jsoup to retrieve the HTML code of the Yahoo! Finance webpage and store it as a String, as shown in the aforementioned video.
  3. Look at the HTML source code (as described in the previous assignment's videos) and look for unique Strings that will allow you to identify and then extract the relevant stock information.
    Specifically, you are looking for three different pieces of information that you will extract and print.
    • The full name of the company in question.
    • The current price of the stock.
    • The percent daily change in stock price. (This is provided as its own element in the HTML code and therefore does not require any computation on your part)
  4. Use the unique Strings to locate the information, and then extract and store them to variables.
  5. Print out the information in a format similar to the one shown below:

Example

Input: INTC

Stock information for Intel Corporation
The current stock price is $34.94 which is up 1.63% from yesterday.

It will be helpful to use some methods from the String class. The following describes some useful methods, assuming they are called on a target String t:

int indexof(String str)
Returns the location of the specified str in t.
char charAt(int i)
Returns the character at index i in t.

Three particular static methods may also be useful for this assignment. Recall that static methods are not called on a target variable as in the previously described methods, but rather are called on a generic object of that type.

boolean Character.isDigit(char c)
Returns true if c is a digit and false otherwise.
String Character.toString(char c)
Returns the String representation of a character.
int Integer.parseInt(String s)
Returns the int representation of a String.

Demo

show your TA the output and run the program with multiple different stock tickers.
When you done with this extension, you must be cleared by the TA to receive credit.

This demo box is for extension 4.9
Last name WUSTL Key Propagate?
(NOT your numeric ID) Do not propagate
lower case only
e.g. Smith j.smith
1    

Acknowledgements and assertion of integrity

You must select one of the options below
The work submitted here was performed in accordance with this course's policy on collaboration.
On your honor, you have neither given nor received any unauthorized aid on this assignment.

However, the following TAs, students, or professors were supportive in completing this assignment.
Their help was also in accordance with course policies.

Thanks to (leave blank if appropriate):

In spite of seeking help as allowable by this course's policy on collaboration, you were unable to complete this assignment. No credit will be received for this assignment.

You would like to be contacted by an instructor to facilitate staying on track in this course.

Comments about this:

You have NOT abided by this course's policy on collaboration. No credit will be received for this assignment, but by checking this box, no academic integrity violation will be filed for this assignment.

You would like to be contacted by an intructor to faciliate staying on track in this course.

Comments about this:


TA: Password:

End of extension 9


Extension 10: Gambler's Ruin with CSV File (2 points):

Authors
This assignment is a continuation of the Gambler's Ruin assignment from Module 2. You must first complete and demo that assignment before you can demo this assignment.

Background

In this assignment, you will export the data that you received from your Gambler's Ruin simulation to a Comma Separated Values (CSV) file. These types of files can be opened with programs like Microsoft Excel. CSV files store tabular data as regular text, where each entry in the data is separated from another entry by a comma and each line of a CSV file is a data record.

Procedure

  1. Alter your program to take the number of win chances as an input, which specifies how may different winning chances to simulate. Then, accept that many win chances as inputs. Finally, simulate the Gambler's Ruin totalPlays times for each winChance.
    Think of a way to store these values, as you will be using them throughout your program.
  2. Use Java's FileWriter class to create the CSV file and give it a path name. An example path name would be: outputs/Ruin.csv. This will save the file "Ruin" in the outputs folder of your repository.
    You must import java.io.FileWriter, java.io.IOException, and com.csvreader.CsvWriter for this assignment.
  3. Once you have imported the above classes and created the CSV file, eclipse should prompt you to add a throws declaration, which will append "throws IOException" to the end of your main method signature to catch any errors we encounter while trying to output the file.
  4. Use the write method to write the information contained in your variables to the file as Strings. Each time you call write, it will fill the next cell in the row. To finish with a row and move on to the next one, use the endRecord method. Then, once you are finished writing things to the file, use the close method to close and flush the stream.
    An example is shown below:
    FileWriter fw = new FileWriter("outputs/test.csv", true);
    CsvWriter w = new CsvWriter(fw, ',');
    w.write("Heading 1");
    w.write("Heading 2");
    w.endRecord();
    for (int i = 0; i < 10; i++) {
    	w.write("" + i);
    	w.write("" + Math.random());	
    	w.endRecord();	
    }	
    w.close();
    
    which, when opened in Excel, would look something like this:

  5. Your CSV file when opened with Excel should look similar to this (but probably with more simulations):
    simulation startAmount stopAmount winChance rounds results
    1 12 18 0.1 14 LOSE
    2 12 18 0.1 14 LOSE
    3 12 18 0.1 12 LOSE
    1 12 18 0.4 18 LOSE
    2 12 18 0.4 46 LOSE
    3 12 18 0.4 18 LOSE
    1 12 18 0.7 14 WIN
    2 12 18 0.7 44 WIN
    3 12 18 0.7 8 WIN
  6. If you wanted to sum up the number of wins in Excel, you would probably want to add another column with 1s and 0s for the strings "WIN" and "LOSE", respectively. Fortunately, we can write a function in Excel that checks if a cell equals a given string, for example, and evaluates to a number in a corresponding cell. For further reference, you can take a look at this.
When you done with this extension, you must be cleared by the TA to receive credit.

This demo box is for extension 4.10
Last name WUSTL Key Propagate?
(NOT your numeric ID) Do not propagate
lower case only
e.g. Smith j.smith
1    

Acknowledgements and assertion of integrity

You must select one of the options below
The work submitted here was performed in accordance with this course's policy on collaboration.
On your honor, you have neither given nor received any unauthorized aid on this assignment.

However, the following TAs, students, or professors were supportive in completing this assignment.
Their help was also in accordance with course policies.

Thanks to (leave blank if appropriate):

In spite of seeking help as allowable by this course's policy on collaboration, you were unable to complete this assignment. No credit will be received for this assignment.

You would like to be contacted by an instructor to facilitate staying on track in this course.

Comments about this:

You have NOT abided by this course's policy on collaboration. No credit will be received for this assignment, but by checking this box, no academic integrity violation will be filed for this assignment.

You would like to be contacted by an intructor to faciliate staying on track in this course.

Comments about this:


TA: Password:

End of extension 10


Extension 12: Emersyn the Emote (6 points):

Authors

Overview

Computers have feelings too! In this assignment you create Emersyn the Emote -- an animated face that displays emotions that the user selects. It has 3 slider bars: one for temperature, one for happiness/sadness, and one for an emotion pair of your choice.

Below, you should see a video demonstrating a sample solution.

This assignment has been revived and adapted from a version written by Nick Leidenfrost, Jonathan Wetherbee, and Heather Berlin in 2002, back when CSE131 was CS101! The idea has been kept, but it does not make use of objects.

Your Emote must have these basic features:

You may incorporate more features for different emotions, such as eyebrows or eyelids. Personalize Emersyn however you like -- ears, hair, nose, etc.

Procedure

  1. In the extensions folder, find the emote package. You will write your code in the Emersyn class and you can run it with the EmersynController class.
  2. Emersyn is created from the following specifications:
  3. Using Sedgewick's StdDraw, create Emersyn's basic features in their neutral state. All the locations and sizes must be relative to the specifications listed above. For example: the mouth should always be around or below the center of the face; if you just put it at (.5, .3) then it wouldn't stay on the face at different face coordinates.
  4. Hot and cold aren't really emotions, but that doesn't prevent Emersyn from feeling them too. The first slider will make it react to being cold and hot and all the temperatures in between by changing the color of its face. Make yellow the default color and make Emersyn turn progressively more blue for cold and more red for hot as a function of the howHot variable. A value of 1 should correspond to complete red and a value of -1 should correspond to complete blue.
    Emersyn will be executed by the EmersynController class and all the animation will happen as a result of dragging the slider, so do not use the "clear" or "show" functions that you may have used in other drawing assignments.
  5. Once Emersyn can react to hot and cold, do the same for happy (1) and sad (-1). Keep in mind that you should not change the color of the face for this emotion as it would conflict with the display of temperature. In the video, happy and sad was controlled by the smile/frown, but you could implement it a different way if you like, as long as it's clear what the emotion is and it doesn't overlap with the animations of the other emotions.
  6. Choose one more emotional range for the third slider and animate that, such as surprised/bored, tired/alert, disgust/love, etc. This range of emotion should be clearly distinct and independent from the others.
When you done with this extension, you must be cleared by the TA to receive credit.

This demo box is for extension 4.12
Last name WUSTL Key Propagate?
(NOT your numeric ID) Do not propagate
lower case only
e.g. Smith j.smith
1    

Acknowledgements and assertion of integrity

You must select one of the options below
The work submitted here was performed in accordance with this course's policy on collaboration.
On your honor, you have neither given nor received any unauthorized aid on this assignment.

However, the following TAs, students, or professors were supportive in completing this assignment.
Their help was also in accordance with course policies.

Thanks to (leave blank if appropriate):

In spite of seeking help as allowable by this course's policy on collaboration, you were unable to complete this assignment. No credit will be received for this assignment.

You would like to be contacted by an instructor to facilitate staying on track in this course.

Comments about this:

You have NOT abided by this course's policy on collaboration. No credit will be received for this assignment, but by checking this box, no academic integrity violation will be filed for this assignment.

You would like to be contacted by an intructor to faciliate staying on track in this course.

Comments about this:


TA: Password:

End of extension 12