Hi Sharon and Frank,
I agree with Frank on (1) and (2), and I'd also add that "drawSprites()" needs to be in the draw loop, too. The sprites need to be redrawn each time the draw loop runs, or else you will not be able to see the changes. In this student's program, there is no draw loop at all, so the program will never change.
Any variable that is used throughout a program should be declared at the beginning of the program. If a variable is declared inside a function (as StartGame is declared inside the drawStart() function), it can only be used inside the function. It was a good idea to use abstraction for the set up of the sprite, but the student will need to move the variable declaration of StartGame to the beginning of the program.
In general, students may want to follow these guidelines:
1. Declare all the variables and create all the sprites that you will use at the beginning of the program. (You can make the ones you don't need yet invisible in the next step.)
2. Do all the general "set up" of placing things where you want them in the beginning, initial velocities, etc.
3. Inside the draw loop...
a. Make any changes that will be happen as the program is running. In general, all of your conditionals/user input should be here, because you are checking the conditions and checking for user input as the program runs.
b. Draw your background, any text/images that should appear, and draw the sprites again.
4. Define the functions that you will use. It's okay to define a function after you use it in your program.
Even though programmers may sometimes choose to create sprites in the middle of a program or declare variables inside a function, it might be better for students to avoid these things for now, because they rely on an understanding of variables that's outside the scope of the course.
We'll keep this student's experience in mind as feedback on how we can better reinforce proper structuring of programs in future revisions of the course.