210 likes | 305 Views
CSE 113 Introduction to Computer Programming. Lecture slides for Week 12. Monday, November 14 th , 2011 Instructor: Scott Settembre. Section 1. Course Administration. For Project Assistance. You can find the up-to-date hours and locations in the “Contact” section of UBLearns .
E N D
CSE 113Introduction toComputer Programming Lecture slides for Week 12 Monday, November 14th, 2011 Instructor: Scott Settembre
Section 1 Course Administration University at Buffalo: CSE 113 Instructor: Scott Settembre
For Project Assistance • You can find the up-to-date hours and locations in the “Contact” section of UBLearns. • Here are the names, emails, and office hours as of 11/14/2011: (Also come to additional labs if you need help) University at Buffalo: CSE 113 Instructor: Scott Settembre
You are behind the class if… • If you have not: • completed chapter 1-6, then you are behind the rest of the class. • loaded the project 2 Greenfoot project and experiemented with a new AIMower class. • Please do the following: • Begin working on project 2. • Start on chapter 7 in this week’s lab. University at Buffalo: CSE 113 Instructor: Scott Settembre
Lecture and Lab this Week • Lectures will go over the following: • Project 2 • switch statement • for loop • Lab will have you do the following: • Start chapter 7. • Continue your project 2. • Lab Quiz on chapter 6 and Lecture notes from week 10 with for loops and switch statements. University at Buffalo: CSE 113 Instructor: Scott Settembre
Section 2 Midterm / Final exam / Project University at Buffalo: CSE 113 Instructor: Scott Settembre
Midterm exam (15%) • The midterm exam will be held in lecture on October 21st. • It will cover chapters 1-6.4, including the exercises in the chapter that you do in lab. • It will be a series of true/false, multiple choice, and code examination (running the code in your head), similar to the quizzes that you will have taken. • Grades have been released. University at Buffalo: CSE 113 Instructor: Scott Settembre
Final Exam (25%) • The final exam will be during class during the last week of class. • It will span two days, 45 minutes (or less) each day. • It will consist of questions like the quizzes, as well as some code reading and understanding. • More on this in November. University at Buffalo: CSE 113 Instructor: Scott Settembre
Project 1 • Project 1 grades have been posted. • Good job! University at Buffalo: CSE 113 Instructor: Scott Settembre
Project 2 • Due date: November 22nd, 2011 at or before 11:59:59 PM • We will design the abstract class we will be using in class, together. • The project description will be discussed on Monday and Wednesday. • The abstract class and Greenfoot project you will use will be distributed in lab. University at Buffalo: CSE 113 Instructor: Scott Settembre
Section 3 Chapter 6 University at Buffalo: CSE 113 Instructor: Scott Settembre
The “for” loop • Since counter loops are used so much, there is a quick and easy way to do them, the “for” loop. (sometimes called the “for..next” loop) • Here is an example: for (intcount=1; count <= 3; count++) { displayOutput("count == " + count); } displayOutput("Loop complete.“); • Here is the output: count == 1 count == 2 count == 3 Loop complete. University at Buffalo: CSE 113 Instructor: Scott Settembre
Components of a “for” loop • You have the keyword “for” followed by an “expression” followed by a “statement” (or block). • The expression contains 3 statements • First, a declaration or initialization that is run only once at the beginning of the loop. • Second, a Boolean expression or condition to evaluate to see if the loop should still run. • Lastly, an action to perform, usually an increment or iteration of some sort, performed at the end of the loop. • “for” loops are quite nice to use as they cut down on the code clutter. University at Buffalo: CSE 113 Instructor: Scott Settembre
Compare the “while” to “for” int count=0; while (count++ < 3) { displayOutput("count == " + count); } displayOutput("Loop complete."); for (intcount=1; count < 3; count++) { displayOutput("count == " + count ); } displayOutput("Loop complete." ); University at Buffalo: CSE 113 Instructor: Scott Settembre
Collision Detection (not on test) • Bounding-box • Bounding-circle Check each of the corners to see if it is inside another bounding box Make sure the two centers of each circle are greater than r1 + r2 away from each other University at Buffalo: CSE 113 Instructor: Scott Settembre
Collision Detection (not on test) • Using masks • First, use bounding-boxes and determine all bounding-box collisions. • Second, take the masks from each sprite that had a bounding-box collision and see if they overlap. It is fast to detect if rectangles overlap. It is slow to check before you set every pixel to see if it is part of the mask. University at Buffalo: CSE 113 Instructor: Scott Settembre
Drawing • There are many Greenfoot commands that you can use to draw on the image of an Actor or the World. • (Look at GreenfootImage class) University at Buffalo: CSE 113 Instructor: Scott Settembre
Easy way to draw on the background • Get the World using getWorld() • (or if in the World class, just use “this”) • Get the background image. • If in the World class, you would do use .getBackground() • Draw a line. • If in an actor, you could write: • getWorld().getBackground().drawLine(0,0,100,100); University at Buffalo: CSE 113 Instructor: Scott Settembre
Efficient Code • Calling getWorld() and getBackground() each time you want to do something, can slow down performance. • Try capturing the background in a private instance variable once, then using it later. • For example, in the class, make an instance variable • private GreenfootImagemyBackground; • Then in your constructor method or act method, you can: • if (myBackground == Null) { myBackground = getWorld().getBackground(); } University at Buffalo: CSE 113 Instructor: Scott Settembre
Writing text // Get the background image, so we can write on it GreenfootImagescoreboard = getBackground(); // Clear what was written before scoreboard.setColor(new Color(0,153,0)); scoreboard.fillRect(0,0,120,40); // Change color to black, then write new info scoreboard.setColor(new Color(0,0,0)); scoreboard.drawString("Time: " + iterations++, 10, 10); University at Buffalo: CSE 113 Instructor: Scott Settembre
Objects and casting(more on this later) • Objects may have more than one type! • For example, a “Dog” object is both of the “Dog” class and the “Animal” class and the “Actor” class. • If we want to make a list of Actors who are dogs and cats, we may say: • List<Dog> myPets; • But then if one of the pets is of class “Cat”, then we will have a run-time error. • Instead, we may the list like so: “List <Animal> myPets;” University at Buffalo: CSE 113 Instructor: Scott Settembre