# **Indy Mini-Assignment** :::danger <b>1-Page PDF Proposals Due:</b> Saturday, November 16th, 11:59pm EDT <b>PDF of Mini-Assignment Due:</b> Monday, November 18th - Wednesday, November 20th </b> ::: For Indy, you will meet one-on-one with a TA for ~30 minutes to discuss your thought process and implementation plan. **Do not come to the design check without thoroughly thinking through your answers to the mini-assignment.** If you have questions, reach out to Indy TAs or post on Ed prior to your check in. # Instructions * **In order to sign up for a design check, you must submit a proposal to the Indy TAs by Saturday, 11/16 at 11:59 EDT.** DOUBLE CHECK THESE DATES * **Read the **[assignment handout](https://hackmd.io/@Fall2024-CS15/H145LrAiR)** carefully** and watch some of the Indy demos before you delve into this mini-assignment. We recommend completing these design questions before you begin coding. * Please share a link to a Google Doc for this mini-assignment, with your diagrams and answers to the written questions, before the design check with your mentor TA. A reminder that the diagrams can be drawn in the digital program of your choice. If you choose to hand draw them, make sure that it is clear! ## Important Notes * If you fail to respond to the TA and sign up for a design check or you do not show up for your design check, you will most likely not be accepted to Indy. If you still are, then you will get a 0% on your design check, which is worth 5% of your final project grade. If you cannot make any of the available times you must let us know ahead of time. Exceptions will be made only for illness or extenuating circumstances. “I forgot” is not an excuse. ## Written Questions 1. What data structure(s) will you use in this assignment? What will these data structures hold? How will you use them (be specific)? 2. You should provide pseudocode for the major algorithm in your project. If you are still developing the specifics, it is allowed to be at a higher level than typical for CS15 pseudocode. You can use this pseudocode to feel out how difficult implementing your final project will be. Check out the [algorithm ideas](#Algorithm-Ideas) section if you are having trouble thinking of ideas! Putting a bit more effort in at the beginning will save you a ton of time later! 3. Why is polymorphism integral to your design? What design benefit(s) do you get? 4. Create a complete inheritance diagram. 5. Create a complete class diagram. 6. It is important that you code incrementally in a project of this scale. How do you plan on tackling this project? What are the classes/methods that you will focus on first? Make a list of steps that you will do to finish Indy. 7. Around halfway through the final projects, we will hold one on one meetings to see how much progress you have done. What parts of your project do you want to have done at the halfway point? Your grade for the midway check-in will depend on meeting the specifications you set for yourself in the design check. ## Questions to Think About You do not need to type up your answers to these questions, but be sure to give them some thought and be prepared to discuss them in your one-on-one meeting. However, we highly recommend actually writing down answers to these at some point to help you flesh out your idea. But to reiterate--written answers are by no means required to get credit for this part of the assignment. 1. What does a sample run of your program look like? Is it completely user-driven, completely automated, or a mix of the two? How will the flow of control be managed (be specific)? 3. Testing is an important part of programming and coding incrementally. What are some scenarios that you might want to test as you program your project? Think of different edge cases and how they should be handled. * Ex. “A Tetris edge case is clearing multiple lines at once. My algorithm should still result in all rows clearing because of lines x-y in my pseudocode. I will test this by only generating the square piece and seeing if two lines will clear at once.” * Note that this testing is not referring to JUnit testing, although you are welcome to test using JUnit if you want to! 4. Indy, while rewarding, is considerably more work than the other final projects. What makes you think that Indy is the right fit for you? How will you handle the responsibility of tackling a project with minimal structure? <u><i>Make sure you have a good understanding of the major components of your project!</i></u> # Algorithm Ideas These are a few popular algorithm ideas that others have implemented in past Indy projects: #### BFS/DFS/Djikstra - Randomly generating a maze and computing a way out of it - Randomly generating a maze and having an enemy tracking you down using a search algorithm (think Minotaur) #### Random generation - Randomly generating an open world with many many components - Semi-randomly generate art based of some user input - Randomly generate an ecosystem, and create behavior patterns for animals and the environment in it that depend on what else is present (predator/prey, eating, shelter, etc) #### Sorting algorithms - Sort items into different buckets through one of the many different sorting algorithms - a wardrobe game or automatic scheduler with user input on what should be sorted out or organized - Simulate a store and use an algorithm to optimize sales recommendations to certain users based off “previous” purchases #### Decision tree - Use a decision tree to manage a text-based game’s progression (not fun in java but fun to make) - must add other levels of complexity - Have a quiz/trivia game that automatically adjusts difficulty based off of player performance - Sort through user inputted data and let it affect the game #### Minimax but more complicated - Build chess Minimax (insanely hard, do not recommend) - Build a Tic-Tac-Toe Minimax, with different levels of difficulty - Build a Hangman “AI” that tracks words, letters, and changes difficulty depending on the wins/losses of the player - Build racing “AI” enemies that simulate driving behavior (with their own “personalities”) and/or adapt to player’s wins or losses --- # Handin Information This assignment must be submitted via email to the TA holding your design check in no later than your checkin on Monday, November 18th - Wednesday, November 20th.