Graded Homework 6

Functionality | Documentation | Design | Total
--- | --- | --- | ---
5 | 3.5 | 4.5 | 4.6

Hey @jabb1123, @ksuzy31, & @maorbernstein,

Great work on the game. It works superbly and is (relatively) clean and well-written. First comment: as a color blind person, it's impossible to play SnakeEatSnake.py #fixit

Other than that, I have some comments regarding your code structure and some things that were overlooked in your code:
- One of the deliverable for the assignment was a README in your repo for instructions on running the game. This includes any packages that needed to be installed and terminal commands to run the game. In your case, I would have liked to see some documentation on the difference between snake.py and SnakeEatSnake.py.
- Great job implementing the MVC model. It follows exactly what Paul was showing in class. However, you have way too much going on in the Model aspect of the app. To break it down:
    - You have a lot of repetitive code that (IMO) should have been written as a separate method / function. 
    - Most of the repetitive code that you have written isn't a part of the model, but rather the view. It doesn't make sense to me that a message you're showing the user is a part of the Model of the app. I would have implemented it by catching the `quit` event (when someone wins/loses) in the view and displaying the messages accordingly.
- You currently keep track of all the parts of a snake, but I think you could have made it more computationally & spacially efficient by only keeping track of the `Head` and the `Tail`. Each time, based on the `Head`'s velocity, you should remove the tail, assign a new `Tail`, and append a new `Head` to the front as a new `Head`. Think about the idea of not having to keep track of all parts of the snake and shoot me any questions you want clarified :smile: 
- Lack of documentation: PyGame often makes it really hard to write clean (read: readable) code, hence there's more emphasis on documentation and code structure. Yours is structured enough for me to point out what each component is and what sets it up, but there are parts (especially inter-component) that aren't well-explained (ie. `model.flag`, `xcoor` & `ycoor`). It might just be that you should have divided your app into appropriate modules (not just one ~500 line code)
- Some classes that I think should have been implemented:
    - Snake: instead of keeping track of a list of `Tail` objects, you should implement a `Snake` class. This should also have a `score` attribute, 
    - Message: the only real justification for this class is that you're already calling it an "object" (`msgObject`).

Overall, I think you guys did an excellent job, and SnakeEatSnake.py seems to be an awesome extension to the existing snake.py (which ran a bit slowly for my taste). Great work, team!