12
Session 13 Pinball Game Construction Kit (Version 3):

Session 13 Pinball Game Construction Kit (Version 3):

Embed Size (px)

Citation preview

Page 1: Session 13 Pinball Game Construction Kit (Version 3):

Session 13

Pinball Game Construction Kit (Version 3):

Page 2: Session 13 Pinball Game Construction Kit (Version 3):

Pinball Version 1

• Replaced the fire button with a mouse event.

• Multiple balls can be in the air at once.– Uses a Vector to contain many balls

• Control is no longer in the paint method.

Page 3: Session 13 Pinball Game Construction Kit (Version 3):

PinBall Version 2

• Adds targets for the PinBalls to bounce off of and score on

• Types of targets:– Spring– Wall– Hole– ScorePad

• What do all targets have in common?

Page 4: Session 13 Pinball Game Construction Kit (Version 3):

PinBallTarget Interface

interface PinBallTarget {

public boolean intersects (Ball aBall);

public void moveTo (int x, int y);

public void paint (Graphics g);

public void hitBy (Ball aBall);

}

Why use an interface?– we want to process targets uniformly, e.g., check if a ball hit it– the interface makes them the same “type” for storage in a Vector

Page 5: Session 13 Pinball Game Construction Kit (Version 3):

Hole target

• structurally similar to a ball – round like a ball– has a location on the frame like a ball

• behavioral– it must adhere to the interface

class Hole extends Ball implements PinBallTarget

Inherits moveTo and paint, but supplies intersects and hitBy

Page 6: Session 13 Pinball Game Construction Kit (Version 3):

More on Threads

• We can think of separate threads as separate programs running concurrently.

• They don’t literally run at the same time (unless you have a machine with more than one CPU). Instead, one thread gets the CPU for a while, then it gets put on hold while another thread gets the CPU, and so on.

• When separate threads are running, sometimes we need to worry about two threads taking actions that conflict with one another. We can use the keyword synchronized to have the JVM help maintain order.

Page 7: Session 13 Pinball Game Construction Kit (Version 3):

A Problem Caused bySeparate Threads of Control

Page 8: Session 13 Pinball Game Construction Kit (Version 3):

More on Threads

• Example: The second version of the pin ball game keeps track of the score the user earns for hitting targets in the field of play. It keeps track of the score in an instance variable named score:

private int score = 0;• When a pin ball strikes a target, the target tells the pin

ball game to add its point total to the instance variable by sending an addScore message:

public void addScore( int value ) {score = score + value;scoreLabel.setText( "score = " + score );

}

Page 9: Session 13 Pinball Game Construction Kit (Version 3):

A Problem Caused bySeparate Threads of Control

Page 10: Session 13 Pinball Game Construction Kit (Version 3):

The solution

synchronized public void addScore( int value ) {score = score + value;scoreLabel.setText( "score = "

+ score );}The keyword synchronized is used to ask

Java to guarantee that only one thread at a time can be executing the addScore() method.

Page 11: Session 13 Pinball Game Construction Kit (Version 3):

PinBall Contruction Kit Version 3

Page 12: Session 13 Pinball Game Construction Kit (Version 3):

Understanding the PinBallGame Kit• How is the “black box” in the PinBallGame drawn?• What is the difference between the items outside the box

of the game window and the items inside the box?• What messages can we send to a Peg, and where is

each behavior defined?• What method is used to determine the number of

elements held in a Vector? What method is used to access the values? What method is used to insert a new value into the collection?

• What is the purpose of the PinBallTarget interface?• Why can’t we do without it?• Why is the PinBallGame instance stored in a class

variable instead of an instance variable? (See class PinBallGame for the declaration, but study the code in class ScorePad to find the reason.)