Session 16 Pinball Game Construction Kit:. Pinball Version 1 Replaced the fire button with a mouse event. Multiple balls can be in the air at once. –Uses.

Slides:



Advertisements
Similar presentations
Made with love, by Zachary Langley Applets The Graphics Presentation.
Advertisements

Written by: Dr. JJ Shepherd
George Blank University Lecturer. CS 602 Java and the Web Object Oriented Software Development Using Java Chapter 4.
1 Frameworks. 2 Framework Set of cooperating classes/interfaces –Structure essential mechanisms of a problem domain –Programmer can extend framework classes,
Java Programming, 3e Concepts and Techniques Chapter 5 Arrays, Loops, and Layout Managers Using External Classes.
© 2006 Pearson Addison-Wesley. All rights reserved4-1 Chapter 4 Data Abstraction: The Walls.
ObjectDraw and Objects Early Chris Nevison Barbara Wells.
Stacks. 2 What is a stack? A stack is a Last In, First Out (LIFO) data structure Anything added to the stack goes on the “top” of the stack Anything removed.
Cosc 4755 Phone programming: GUI Concepts & Threads.
Stacks. 2 What is a stack? A stack is a Last In, First Out (LIFO) data structure Anything added to the stack goes on the “top” of the stack Anything removed.
Lecture 3 IAT 800. Sept 15, Fall 2006IAT 8002 Suggestions on learning to program  Spend a lot of time fiddling around with code –Programming is something.
OOP Week 3 1 Object Oriented Programming in Java Monday, Week 3 Interface PinBallTarget OOP Concepts Last Week’s Assignment Arrays Collection Class --
Applying OO Concepts Using Java. In this class, we will cover: Overriding a method Overloading a method Constructors Mutator and accessor methods The.
Games and Simulations O-O Programming in Java The Walker School
Chapter 6: Graphical User Interface (GUI) and Object-Oriented Design (OOD) J ava P rogramming: Program Design Including Data Structures Program Design.
PROG Mobile Java Application Development PROG Mobile Java Application Development Event Handling Creating Menus.
Week 4-5 Java Programming. Loops What is a loop? Loop is code that repeats itself a certain number of times There are two types of loops: For loop Used.
M1G Introduction to Programming 2 4. Enhancing a class:Room.
Computer Science II 810:062 Section 01 Session 2 - Objects and Responsibilities.
Session 12 Introduction to PinBallGame (Chaper 7).
BIM211 – Visual Programming Objects, Collections, and Events 1.
Polymorphism, Inheritance Pt. 1 COMP 401, Fall 2014 Lecture 7 9/9/2014.
REVIEW On Friday we explored Client-Server Applications with Sockets. Servers must create a ServerSocket object on a specific Port #. They then can wait.
Method Overriding Remember inheritance: when a child class inherits methods, variables, etc from a parent class. Example: public class Dictionary extends.
Practical OOP using Java Basis Faqueer Tanvir Ahmed, 08 Jan 2012.
Session 11 Border Layout, using Panels, Introduction to PinBallGame.
Session 15 Chapter 8: Understanding Inheritance. Lab Exercise Solution Recall that we needed to know if a mousePress occurred on a target. We tried to.
1 Web Based Programming Section 8 James King 12 August 2003.
More on Hierarchies 1. When an object of a subclass is instantiated, is memory allocated for only the data members of the subclass or also for the members.
11 Adding Tomato Targets Session Session Overview  We now have a game which lets a player bounce a piece of cheese on a bread bat  Now we have.
Chapter 7: Pinball Game Construction Kit. Vectors Example of a “collection class” Must “import java.util.Vector” More flexible than arrays: will grow.
Concurrent Programming and Threads Threads Blocking a User Interface.
Session 19 Chapter 10 – Mechanisms for Software Reuse.
Chapter 6 Introduction to Defining Classes. Objectives: Design and implement a simple class from user requirements. Organize a program in terms of a view.
BallWorld.java A structured walkthrough. Key Features: 2 classes are created Execution is done through the procedure called “main” which are decleared.
Session 18 Chapter 8: Understanding Inheritance. Recall Exercise 2 From Tuesday It’s very annoying to move a target from the pallet and drop it in the.
Introduction to Threads Session 01 Java Simplified / Session 14 / 2 of 28 Objectives Define a thread Define multithreading List benefits of multithreading.
Peter Andreae Computer Science Victoria University of Wellington Copyright: Peter Andreae, Victoria University of Wellington Types and Interfaces COMP.
Session 13 Pinball Game Construction Kit (Version 3):
Programming with Java © 2002 The McGraw-Hill Companies, Inc. All rights reserved. 1 McGraw-Hill/Irwin Chapter 5 Creating Classes.
CS324e - Elements of Graphics and Visualization Timing Framework.
Session 22 Chapter 11: Implications of Inheritance.
COP3502 Programming Fundamentals for CIS Majors 1 Instructor: Parisa Rashidi.
Visual Basic for Application - Microsoft Access 2003 Programming applications using Objects.
Session 25 Test 2 Review. Test 2 Details Tuesday, November 22 in class –(Anybody planning on taking it on Friday?) Closed book Closed notes, except for.
M1G Introduction to Programming 2 5. Completing the program.
Java Programming: From Problem Analysis to Program Design, Second Edition1 Lecture 5 Objectives  Learn about basic GUI components.  Explore how the GUI.
Computer Science I Classes and objects Classwork/Homework: Examine and modify my examples. Make your own.
COMP 121 Week 8: Generic Collections. Objectives To understand type variables and how they are used in generic programming To be able to implement and.
M1G Introduction to Programming 2 3. Creating Classes: Room and Item.
CHAPTER 14 Classes, Objects, and Games XNA Game Studio 4.0.
Objects and Classes Engineering 1D04, Teaching Session 9.
Lecture 8: Advanced OOP Part 2. Overview Review of Subtypes Interfaces Packages Sorting.
Written by: Dr. JJ Shepherd
1 Event Driven Programs Rick Mercer. 2 So what happens next?  You can layout a real pretty GUI  You can click on buttons, enter text into a text field,
Session 7 Introduction to Inheritance. Accumulator Example a simple calculator app classes needed: –AdderApp - contains main –AddingFrame - GUI –CloseableFrame.
Computer Science II 810:062 Section 01 Session 2 - Objects and Responsibilities.
SourceAnatomy1 Java Source Anatomy Barb Ericson Georgia Institute of Technology July 2008.
OOP Basics Classes & Methods (c) IDMS/SQL News
Object Oriented Programming Lecture 3: Things OO.
CSC CSC 143 Threads. CSC Introducing Threads  A thread is a flow of control within a program  A piece of code that runs on its own. The.
Chapter 6 Graphical User Interface (GUI) and Object-Oriented Design (OOD)
 Description of Inheritance  Base Class Object  Subclass, Subtype, and Substitutability  Forms of Inheritance  Modifiers and Inheritance  The Benefits.
Game Maker Tutorials Introduction Clickball IntroductionClickball Where is it? Shooting Where is it?Shooting.
Prepared by: Dr. Abdallah Mohamed, AOU-KW Unit7: Event-driven programming 1.
Stacks.
Applying OO Concepts Using Java
Stacks.
Border Layout, using Panels, Introduction to PinBallGame
Expanding the PinBallGame
Presentation transcript:

Session 16 Pinball Game Construction Kit:

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.

Keeping track of multiple objects. In the past we have kept track of multiple items through an array. What is the limitation of that?

Keeping track of multiple objects. In the past we have kept track of multiple items through an array. What is the limitation of that? –You have to state the number of elements at construction time.

Keeping track of multiple objects. In the past we have kept track of multiple items through an array. What is the limitation of that? –You have to state the number of elements at construction time. If we don’t know the number in advance we can use the concept of a Vector. (Let’s go back to the code (also pp ))

Using Vector import java.util.Vector; private Vector balls;// holds only objects balls = new Vector( ); // create a Vector Using the Vector: balls.addElement(newBall); // add element balls.size( ); // return # elements // Retrieving an element requires a cast PinBall aBall = (PinBall) balls.elementAt (i);

Exercise Modify version 1 of the PinBallGame to allow users only six shots. Add a Label at the top of the Frame that displays the number of shots that have been fired so far. If the user tries to fire again after six shots, the label should display a “Sorry...” message.

From javadoc for the Label class: Constructor Summary Label() Constructs an empty label. Label(String text) Constructs a new label with the specified string of text, left justified. Method Summary String getText() Gets the text of this label. void setText(String text) Sets the text for this label to the specified text.

A Possible Solution public class PinBallGame extends Frame {... private int numberOfShotsTaken; private Label numberOfShotsLabel; public PinBallGame () {... // all the original code plus: numberOfShotsTaken = 0; numberOfShotsLabel = new Label( "Number Of Shots Taken: 0" ); add( "North", numberOfShotsLabel ); }... private class MouseKeeper extends MouseAdapter { public void mousePressed (MouseEvent e) {... if ( (x > FrameWidth-40)... { if ( numberOfShotsTaken < 6 ) { // make ball and thread, then: numberOfShotsTaken++; numberOfShotsLabel.setText("Number Of Shots Taken: " + numberOfShotsTaken ); } else numberOfShotsLabel.setText( "Sorry, but you have already [...]!" ); } public void paint (Graphics g) {... } }

Threads of Execution What? How? Why? The Thread class provides methods to start, run, sleep, and stop an independent path of computation, among other things. The start() method manages the overhead of threads for us; we can simply watch them go! (This is similar to the benefits we get from using Frames...) The pinball game separates these responsibilities into different objects: painting the frame controlling the movement/location of balls

Threads of Execution This separation simplifies all of the methods involved, for writing, reading, and modifying. The cost is an increase in the number of methods needed. You may also suffer some separation anxiety. To programmers used to writing the omniscient, omnipotent main(), decentralizing control can cause a sense of fragmentation. This will largely go away as you gain OO and Java experience.

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?

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

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

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.

A Problem Caused by Separate Threads of Control

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 ); }

A Problem Caused by Separate Threads of Control

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.

PinBall Contruction 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.)