Python - simulation
CS 177 – Project #2 Summer 2015
Due Date: ========== This project is due Thursday July 23rd before 11:59pm.
This assignment is an individual project and should be completed on your own using only your own personally written code. You will submit one (1) copy of the completed Python program to the Project 2 assignment on Blackboard. The completed file will include your name, the name of the project and a description of its functionality and purpose of in the comments header. The file should be named ”Project-2.py”. This project will continue to be the foundation of future assignments this semester, so it is important that you maximize your program’s functionality. Problem Description: Expanding the Cell Movement Simulation ===================================================== Your first program simulating Betzig’s microscopic technology was a huge hit and you’ve landed a contract to expand its capabilities. Specifically, you are to modify the behavior of both cell types, increase their numbers and add a graphical control panel.
Crete Cells should be represented in this expanded simulation by a random number (between 5 – 12) of small green circles with a radius of 8 pixels. These cells will move nonlinearly in steps of up to 6 pixels at a time, (specifically, each movement should be between -6 and 6 pixels). This will increase the speed of their movements, however they will still appear jerky and random. Crete cells cannot move outside the microscope slide, (the ‘field’), so they may bump along the borders or even wander out into the middle of the field at times. They must bounce off each other and the Laelaps cells instead of appearing to pass through them.
Laelaps cells should be represented by a random number (between 3 - 6) of larger red circles with a radius of 16 in this expansion. Laelaps cells move across the field straight lines, appearing to ‘bounce’ off the field boundaries, and all the other cells in the field of view. The dx and dy values for each Laelaps cell will be randomly chosen from: [-12, -10, -8, 8, 10, or 12] and will change in direction but not size when animated, only in direction. The Control Panel should be a separate 300 x 200 graphic window, (see example next page). Users can view and change the simulation settings by clicking in the labeled areas to:
• Increase / decrease the speed of the simulation • Pause the simulation • Increase / decrease the temperature of the microscopic field • Drop a piece of ‘food’ into a random location on the field
Project Specifications: ==================== The Field Graphics Window #1 (from Project 1)
• 500 x 500 pixel window • White background • 0,0 (x,y) coordinate should be set to the lower left-hand corner
The ‘Control Panel’ Graphics Window #2 (new) • 300 x 200 pixel window • Gray background organized as follows:
• Actual colors of buttons and text are flexible, but must be easy to see • The speed and pause buttons must actually modify the simulation in real time • Food button should drop a 5 x 5 black square of ‘food’ in a random Field location • The Warmer and Cooler buttons only need to change the Temp value displayed.
Crete Cells (updated from Project 1) • Random number (between 5-12) of green filled circles with radius of 8 pixels • Move in random increments between -6 and 6 pixels per step
o Hint: use random.randint(-6, 6)
• Movements are not in straight lines, but appear wander aimlessly • Bounces off Laelaps cells and other Crete cells -- will not pass ‘through’ or over • Crete cells ignore any ‘food’ in the field
Laelaps Cells (updated from Project 1)
• Random number (between 3-6) of red filled circles with a radius of 16 pixels • The Laelaps cell should advance in either -12, -10, -8, 8, 10 or 12 pixels per step
o Hint: use random.choice([-12, -10, -8, 8, 10, 12]) • Move more quickly than Crete cells and in straight lines • Bounces off Crete cells and other Laelaps cells – will not pass ‘through’ or over • Laelaps cells ignore any ‘food’ in the field
Faster
Slower
Pause Food Warmer
Cooler Temp
42 Speed
2
TODO #1: Start with your own completed Project 1 Python file ====================================================
• Refer to the Project 1 specifications for details • You must complete Project 1 before continuing with this assignment • Your TAs and/or Instructors can help you finish your Project 1 if necessary
TODO #2: Modify the makeCrete() and makeLaelaps() functions ==========================================================
• Change the makeCrete() and makeLaelaps() functions to meet Project 2 specifications • The makeCrete() and makeLaelaps() functions should accept an integer parameter that
specifies the number of cells to create. They should return the lists of cells. • The makeLaelaps() function might create a list of lists. This might take the format:
[[laelaps, dx, dy], [laelaps, dx, dy], [laelaps, dx, dy]]
TODO #3: Create the Control Panel ===========================================
• Create a new 300 x 200 graphics window named “Control Panel” • This should have the appearance shown in the Project 2 specifications above • The buttons and functionality of the Control Panel should be as specified above
TODO #4: Modify the main() function ==================================
• Using the makeCrete() function, create a list of Crete cells and draw in the Field window • Using the makeLaelaps() function, create the Laelaps cells and draw in the Field window • Using a while loop, animate the Crete and Laelaps cells in the Field window
o Animate each Crete cells making sure they bounce off the boundaries of the Field window and the other Crete cells
o Animate the Laelaps cells making sure they bounce off the Field boundaries, the other Laelaps cells and Crete cells
o Check for and respond to mouse clicks in the Control Panel graphics window o End the while loop if a mouse click is detected in the Field graphics window
• Close the Field and Control Panel graphics windows • Print a message that the simulation has terminated
Extra Credit Challenges: 10 points each only if TODO #1 - 5 are complete ===============================================================
• DINNER TIME: Cells contacting food will increase their radius by 2 pixels, (food disappears) • HOT IN HERE: Higher temperatures cause Laelaps to move faster, Crete to move slower.
Lower temps would have the opposite effect.
Project 2 Grading Rubric: Points TODO #1: Simulation meets all Project 1 Specifications 5 TODO #2: Crete cell creation and returned list updated as specified 10 TODO #2: Laelaps cell creation and returned list updated as specified 10
TODO #3: Control Panel: Graphics window created, appears as specified 10
TODO #3: Control Panel: Speed and Pause buttons function as specified 15 TODO #3: Control Panel: Food button functions as specified 10 TODO #3: Control Panel: Warmer and Cooler buttons function as specified 10 TODO #4: main() function uses makeCrete() and makeLaelaps() to create cell lists 5 TODO #5: Cells move as specified within the Field window 15 TODO #5: Animation terminates, windows close when mouse clicked in the Field window 5 TODO #5: Message is displayed indicating the simulation has terminated 5 Total Points 100
You will submit one (1) copy of the completed Python program to the Project 2 assignment on Blackboard. The completed file will include your name, the name of the project and a description of its functionality and purpose of in the comments header. The file should be named ”Project-2.py”.
Coding Standards and Guidelines: ============================= In this project, you are required to follow modular coding standards, particularly with respect to modular design, indentation and comments. Your score will be affected if your code does not conform to these standards. Modular Design Divide your program into functions to improve readability and to reduce redundanct code. Your Python code should not have repetitve copies of the same block of statements. Instead, functions to simplify and reduce the size of your code.
For example, if you had to find the distance between two x,y coordinate points in several different parts of your code, instead of creating the formula to calculate this distance over and over again, create a function “def distance(x1, y1, x2, y2):” and code it to calculate and return the distance between the point using the Pythagorean Theorum. Indentation Following are a few rules on how to use indentation in your program,
• Use tabs for indentations • Pay attention to indentation in nested for loops and if-else blocks
Comments Your code for this project must also include appropriate comments about how functions are implemented. Comments make your code more readable and easier to understand.
• Add a comment before a function describing what it does. • Before a nested for loop, describe what happens in the loop and what controls the
iterations. • Before an if-else block, explain what should happen for both the true and false cases. • Always make a priority of keeping the comments up-to-date when the code changes.
For all variables that you use in your program, use meaningful variable and function names to help make your program more readable. Names do not have to be long, but should give a clear indication of the intended purpose of the variable.