7-Dec-15 Animation. HW 10 Last HW (I messed up some of the scheduling) Extension until Monday night 11:30 pm Late penalty will be strictly enforced for.

Slides:



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

Multithreading : animation. slide 5.2 Animation Animation shows different objects moving or changing as time progresses. Thread programming is useful.
Java Applets- Using SwingWorker Dave Price and Chris Loftus Computer Science Department University of Wales, Aberystwyth.
Multi-threaded applications SE SE-2811 Dr. Mark L. Hornick 2 What SE1011 students are told… When the main() method is called, the instructions.
Multithreading Why multi-threads Defining and creating threads An example with two threads Life cycle of a thread An example with user interface Problem.
13-Jun-15 Animation. 2 Moving pictures Animation—making objects that appear to move on the screen—is done by displaying a series of still pictures, one.
13-Jun-15 Model-View-Controller. 2 Design Patterns The hard problem in O-O programming is deciding what objects to have, and what their responsibilities.
Event Handling Events and Listeners Timers and Animation.
Slides prepared by Rose Williams, Binghamton University Chapter 20 Java Never Ends.
22-Jun-15 Threads and Multithreading. 2 Multiprocessing Modern operating systems are multiprocessing Appear to do more than one thing at a time Three.
24-Jun-15 Simple Animation. 2 The bouncing ball The “bouncing ball” is to animation what “Hello world” is to programming With a single Thread, we can.
Model-View-Controller. Design Patterns The hard problem in O-O programming is deciding what objects to have, and what their responsibilities are Design.
Object Oriented Programming Java 1 GUI example taken from “Computing Concepts with Java 2” by Cay Horstmann GUI Programming.
29-Jun-15 Model-View-Controller. 2 Design Patterns The hard problem in O-O programming is deciding what objects to have, and what their responsibilities.
14-Jul-15 Model-View-Controller. 2 Design Patterns The hard problem in O-O programming is deciding what objects to have, and what their responsibilities.
Threads II. Review A thread is a single flow of control through a program Java is multithreaded—several threads may be executing “simultaneously” If you.
CS12420 – Swing and threads Lynda Thomas
Week 3, Day 1: Processes & Threads Return Quiz Processes Threads Lab: Quiz Lab 3: Strategy & Factory Patterns! SE-2811 Slide design: Dr. Mark L. Hornick.
F27SB2 Software Development 2 Lecture 4: Java GUIs 3.
HFOOAD Chapter 2 Requirements. We create software for a reason. We create software fro people. We need to know what the people want in the software we.
MIT AITI 2003 Lecture 17. Swing - Part II. The Java Event Model Up until now, we have focused on GUI's to present information (with one exception) Up.
Chapter 19 Designing the GUI front-end: the Model-View-Controller pattern.
The Model-View Approach in Teaching Java Maria Litvin Phillips Academy, Andover, MA
Week 3, Day 1: Processes & Threads Processes Threads SE-2811 Slide design: Dr. Mark L. Hornick Content: Dr. Hornick Errors: Dr. Yoder 1.
Java Event Handling CSIS 3701: Advanced Object Oriented Programming.
Graphic User Interface. Graphic User Interface (GUI) Most of us interact with computers using GUIs. GUIs are visual representations of the actions you.
GUIs for Video Games. The Plan ● Layout suggestions ● Observer/Observable ● Steps to writing Observer/Observables ● Sample Code ● Practice.
Swing GUI Components You can create graphics components to place on your applet using classes available in the Swing package ( javax.swing ) Class names.
CompSci 100E 35.1 Graphical User Interfaces: GUIs  Components  Flat Layouts  Hierarchical Layouts  Designing a GUI  Coding a GUI.
COMP 321 Week 2. Outline Event-Driven Programming Events, Event Sources, Event Listeners Button and Timer Events Mouse Events, Adapters.
An Introduction to Programming and Object Oriented Design using Java 3 rd Edition. Dec 2007 Jaime Niño Frederick Hosch Chapter 18 Integrating user interface.
Concurrent Programming and Threads Threads Blocking a User Interface.
1 Java Model-View-Controller - see programming.html#concepts.
Introduction to Threads Session 01 Java Simplified / Session 14 / 2 of 28 Objectives Define a thread Define multithreading List benefits of multithreading.
1 G53SRP: Clocks and Time in Java Chris Greenhalgh School of Computer Science.
Threads. Story so far  Our programs have consisted of single flows of control Flow of control started in the first statement of method main() and worked.
Threads II IS Outline  Quiz  Thread review  Stopping a thread  java.util.Timer  Swing threads javax.swing.Timer  ProgressMonitor.
Model-View-Controller design pattern. Design Patterns “Making abstractions which are powerful and deep is an art. It requires tremendous ability to go.
Java Model-View-Controller. Design Patterns The hard problem in O-O programming is deciding what objects to have, and what their responsibilities are.
CreatingClasses-SlideShow-part31 Creating Classes part 3 Barb Ericson Georgia Institute of Technology Dec 2009.
(1) Introduction to Java GUIs Philip Johnson Collaborative Software Development Laboratory Information and Computer Sciences University of Hawaii Honolulu.
Practical Session 10: Animation. Animation kinds There are three basic kinds of animation: 1. Moving object 2. Changing pictures 3. Combination of 1 and.
6-Jan-16 Model-View-Controller. 2 Design Patterns The hard problem in O-O programming is deciding what objects to have, and what their responsibilities.
Computer Science 209 GUIs Model/View/Controller Layouts.
1 CSE 331 Model/View Separation and Observer Pattern slides created by Marty Stepp based on materials by M. Ernst, S. Reges, D. Notkin, R. Mercer, Wikipedia.
Swing GUI Components So far, we have written GUI applications which can ‘ draw ’. These applications are simple, yet typical of all Java GUI applications.
Lesson 28: More on the GUI button, frame and actions.
Threads b A thread is a flow of control in a program. b The Java Virtual Machine allows an application to have multiple threads of execution running concurrently.
Programming and Problem Solving With Java Copyright 1999, James M. Slack Threads and Animation Threads Animation.
Chapter 11: Threaded Programs Situations where the program is following multiple execution paths (how to stop one?) Thread: a line of execution Thread.
5-1 GUIs and Events Rick Mercer. 5-2 Event-Driven Programming with Graphical user Interfaces  Most applications have graphical user interfaces to respond.
21-Jun-16 Swing Basics and Model-View- Controller.
Java Visual Applications CSIS 3701: Advanced Object Oriented Programming.
GUI.1 Graphical User Interfaces GUIs. GUI.2 The Plan Components Flat Layouts Hierarchical Layouts Designing a GUI Coding a GUI.
Threads.
Observer Pattern Context:
Architectural Patterns for Interactive Software
Animation 12-Sep-18.
MVC Paradigm The MVC paradigm breaks applications or interfaces into three parts: the model, the view, and the controller. A --> 25 % B --> 60 % C -->
Animation 6-Nov-18.
Threads II IS
Model-View-Controller
Animation 15-Nov-18.
Animation 18-Nov-18.
Threads and Multithreading
Threads and Multithreading
Animation 25-Feb-19.
Threads.
Animation 17-Sep-19.
9. Threads SE2811 Software Component Design
Presentation transcript:

7-Dec-15 Animation

HW 10 Last HW (I messed up some of the scheduling) Extension until Monday night 11:30 pm Late penalty will be strictly enforced for this one The main goal of this assignment is to get the game to work with your own design. We will not be strict about design. It is too subjective to judge anyway. We recognize this is a tough assignment. Grading will be fairly lenient Please show up on Friday. We will do some combination of review + office hours 2

HW 10 Unit tests are definitely needed. Especially for complicated things like checking for a win. Javadoc This includes javadoc for Dr Dave’s code. By editing the javadoc of his code you demonstrate you understand it at least at a high level. Javadoc has to be placed above the method name. Please fill out all the information. Please put your partner’s information Canvas comment In the author section of any class you make Not putting your partner’s info will result in both of you losing 0.5 pts Even if your partner has done 0 work, not putting their name down is not the way to go about ‘complaining’ (talking to me is what you need to do) 3

A bit more on object oriented design What to put where in HW 10? Do not force everything into MVC Rather think of this as different classes interacting with each other LinesOfAction (main class) A board 2 players RoundPieces An array/arraylist/vector of pieces 4

Example of design in HW 10 Who should check for a win? What information do we need to determine a victory? What decision is a player supposed to make? Can we make more classes? Can we make changes in the provided classes? 5

6 Moving pictures Animation—making objects that appear to move on the screen—is done by displaying a series of still pictures, one after the other, in rapid succession Generally you should try for at least 20 pictures/second 20 pictures/second is repainting every 50 milliseconds

7 The bouncing ball “Bouncing ball” is the “Hello World” of animation We will develop this program using: Model-View-Controller Observer-Observable Threads Timers

8 Review of MVC MVC stands for Model-View-Controller The Model is the actual internal representation It should be independent of the other classes It’s handy if this class can extend Observable The View (or a View) is a way of looking at or displaying the model It’s handy if this class implements Observer The Controller provides for user input and modification These three components are usually implemented as separate classes (or sets of classes)

9 Review of Observer and Observable java.util.Observable is a class When it does something that should be observed, it says: setChanged(); notifyObservers(); /* or */ notifyObservers( arg ); java.util.Observer is an interface It has to register itself with (subscribe to) an Observable: myObservable.addObserver( myObserver ); It has to implement: public void update(Observable obs, Object arg ) This method is automatically called when observers are notified obs is the object being observed If the Observable did notifyObservers(), arg is null

10 Using the Runnable interface Implementing the Runnable interface: class Animation implements Runnable {…} You must implement public void run( ) To make it “go”: Animation anim = new Animation( ); Thread myThread = new Thread(anim); myThread.start( ); A Thread is one method of implementing concurrency in your programs (imprecise very high level view) It is a program's path of execution

11 Timers A java.util.Timer is used to schedule code for future execution A Timer may: Schedule a one-time execution, or Schedule repeated executions at regular intervals Timer constructors: Timer() Timer(boolean isDaemon ) Timer(String name ) Timer(String name, boolean isDaemon ) A Timer can keep an application from terminating, unless it is specified as a daemon thread A daemon thread dies if there are no no-daemon threads running Create daemon Timer threads with new Timer(true) or new Timer( name, true)

12 Using a Timer for animation public void schedule(TimerTask task, long delay, long period ) Schedules the specified task for repeated fixed-delay execution, beginning after the specified delay (which may be zero) Subsequent executions take place at approximately regular intervals separated by the specified period Times are specified in milliseconds (1/1000s of a second) Notice that schedule requires a TimerTask as an argument TimerTask is an abstract class you must extend and provide a public void run() method TimerTask provides an (implemented) public boolean cancel() method Returns false if there were no scheduled executions to cancel

13 The Model class, I import java.util.Observable; class Model extends Observable { public final int BALL_SIZE = 20; private int xPosition = 0; private int yPosition = 0; private int xLimit, yLimit; private int xDelta = 6; private int yDelta = 4; // methods (on next slide) }

14 The Model class, II public void setLimits(int xLimit, int yLimit) { this.xLimit = xLimit - BALL_SIZE; this.yLimit = yLimit - BALL_SIZE; } public int getX() { return xPosition; } public int getY() { return yPosition; } public void makeOneStep() { // code for making one step (on next slide) }

15 The Model class, III public void makeOneStep() { // Do the work xPosition += xDelta; if (xPosition = xLimit) { xDelta = -xDelta; xPosition += xDelta; } yPosition += yDelta; if (yPosition = yLimit) { yDelta = -yDelta; yPosition += yDelta; } // Notify observers setChanged(); notifyObservers(); }

16 The View class import java.awt.*; import java.util.*; import javax.swing.JPanel; class View extends JPanel implements Observer { Model model; View(Model model) { this.model = model; public void paint(Graphics g) { g.setColor(Color.WHITE); g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(Color.RED); g.fillOval(model.getX(), model.getY(), model.BALL_SIZE, model.BALL_SIZE); } public void update(Observable obs, Object arg) { repaint(); } }

17 The Controller class, I import java.awt.*; import java.awt.event.*; import java.util.Timer; import java.util.TimerTask; import javax.swing.*; public class Controller extends JFrame { JPanel buttonPanel = new JPanel(); JButton runButton = new JButton("Run"); JButton stopButton = new JButton("Stop"); Timer timer; Model model = new Model(); View view = new View(model); // View must know about Model

18 The Controller class, II public void init() { layOutComponents(); attachListenersToComponents(); // Connect model and view model.addObserver(view); } private void layOutComponents() { setLayout(new BorderLayout()); this.add(BorderLayout.SOUTH, buttonPanel); buttonPanel.add(runButton); buttonPanel.add(stopButton); stopButton.setEnabled(false); this.add(BorderLayout.CENTER, view); }

19 The Controller class, III private void attachListenersToComponents() { runButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { runButton.setEnabled(false); stopButton.setEnabled(true); timer = new Timer(true); timer.schedule(new Strobe(), 0, 40); // 25 times a second } }); stopButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { runButton.setEnabled(true); stopButton.setEnabled(false); timer.cancel(); } }); }

20 The Controller class, private class Strobe extends TimerTask { public void run() { model.setLimits(view.getWidth(), view.getHeight()); model.makeOneStep(); } } public static void main(String[] args) { ControllerApp controllerApp = new ControllerApp(); controllerApp.init(); controllerApp.setSize(300, 300); controllerApp.setVisible(true); controllerApp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }

Doing something else while the ball is bouncing Just making the ball change colour when the up/down arrow key is pressed Also drawing a horizontal line. Shows you how to do some usage of key listener 21