lecture 22 gui applications
play

Lecture 22: GUI Applications CS 1110 Introduction to Computing - PowerPoint PPT Presentation

http://www.cs.cornell.edu/courses/cs1110/2019sp Lecture 22: GUI Applications CS 1110 Introduction to Computing Using Python [E. Andersen, A. Bracy, D. Gries, L. Lee, S. Marschner, C. Van Loan, W. White] Relevant modules (see schedule page)


  1. http://www.cs.cornell.edu/courses/cs1110/2019sp Lecture 22: GUI Applications CS 1110 Introduction to Computing Using Python [E. Andersen, A. Bracy, D. Gries, L. Lee, S. Marschner, C. Van Loan, W. White]

  2. Relevant modules (see schedule page) • animation.py • arrows.py • pyro.py • state.py • subcontroller.py • game2d.zip (unzip) Try them out! >>> python arrows.py

  3. A Standard GUI Application Check for user input Process user input Update the objects Animates the application, like a movie Update display/view No change to objects

  4. while program_is_running: # Get keyboard info ß Handled by OS/GUI libraries # Your code goes here application.update() ß Custom application class # Draw stuff to screen ß Handled by OS/GUI libraries

  5. See animation.py Example: Animation Parent class that class Animation(game2d.GameApp): """App to animate an ellipse in a circle.""" does hard stuff def start(self): """Initializes the game loop.""" Loop initialization … Do NOT use __init__ def update(self,dt): """Changes the ellipse position.""" … Loop body def draw(self): """Draws the ellipse""" Use method draw() … defined in GObject

  6. Does update() respond to See animation.py the user? def update(self,dt): """ Animates the ellipse. Parameter dt: The time since the last animation frame. Precondition: dt is a float. """ # Change the angle self.angle = self.angle+ANIMATION_STEP % (2*math.pi) pos=self._polar_to_coord(ANIMATION_RADIUS,self.angle) self.ellipse.x = pos[0] self.ellipse.y = pos[1] A) Yes, any key changes the animation B) Yes, certain keys select certain animations C) No D) I don't know

  7. Does update() respond to See state.py the user? A) Yes, any key changes the animation B) Yes, certain keys select certain animations C) No D) I don't know

  8. Changing the Loop Activity See state.py State STATE_CIRCLE • State : Current loop activity § Playing game vs. pausing § Ball countdown vs. serve • Add an attribute state § Method update() checks state § Executes correct helper State STATE_HORIZONTAL • How do we store state? § State is an enumeration ; one of several fixed values § Implemented as an int State STATE_VERTICAL § Global constants are values

  9. Need rules for when we switch states • Attribute key_count in GInput See § How many keys are pressed? _determineState(self): § 0, 1, 2, … in state.py § curr_keys = self.input.key_count • Is this a new key press? § Need current curr_keys , and key count from last time: lastkeys change = curr_keys > 0 and self.lastkeys == 0 • When we're done, curr_keys becomes the new lastkeys self.lastkeys = curr_keys

  10. Designing Complex Applications • Applications can become § Processes input extremely complex MainApp § Determines state § Large classes doing a lot § Many states & invariants Calls the methods of § Specification unreadable • Idea : Break application § Animates (only) Animation up into several classes § Start with a “main” class § Other classes have roles See subcontroller.py § Main class delegates work

  11. How to Break Up: Software Patterns • Pattern : reusable solution to a common problem § Template, not a single program § Tells you how to design your code § Made by someone who ran into problem first • In many cases, a pattern gives you the interface § List of headers for non-hidden methods Just like § Specification for non-hidden methods this course! § Only thing missing is the implementation

  12. Model-View-Controller Pattern Calls the Division Controller methods or can apply • functions of Updates model in to classes response to events or modules • Updates view with model changes Model View Wave & Invaders • • Defines and Displays the model Classes manages the data to the app user • • Responds to the Provides user input controller requests to the controller Ship, Alien & Bolt draw() methods Classes

  13. Model-View-Controller in CS 1110 Controller Attribute view Other attributes Subclass of (defined by you) (inherited) GameApp Model View Method draw Subclasses of GObject Class GView, GInput in GObject • GEllipse , GImage , … • Do not subclass! • Often more than one • Part of GameApp Classes in Neglected for most game2d of this lecture

  14. Models in Assignment 7 • Often subclass of GObject sparks § Has built-in draw method § See documentation in A7 • Includes groups of models § Example : rockets in pyro.py § Each rocket is a model § But so is the entire list! rocket § update() will change both • A7 : Several model classes § Ship to animate the player See pyro.py § Alien to represent an alien

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend