Video Games Writing Games with Pygame Special thanks to Scott Shawcroft, Ryan Tucker, and Paul Beck for their work on these slides. Except where otherwise.

Slides:



Advertisements
Similar presentations
Games in Python – the easy way
Advertisements

Create a Simple Game in Scratch
Summer Computing Workshop. Introduction to Variables Variables are used in every aspect of programming. They are used to store data the programmer needs.
Asteroids Games and Simulations O-O Programming in Java The Walker School The Walker School – Games and Simulations
Week 9 Writing Games with Pygame Special thanks to Scott Shawcroft, Ryan Tucker, and Paul Beck for their work on these slides. Except where otherwise noted,
Week 10 Writing Games with Pygame Special thanks to Scott Shawcroft, Ryan Tucker, and Paul Beck for their work on these slides. Except where otherwise.
Unit 8 Classes and Objects; Inheritance Special thanks to Roy McElmurry, John Kurkowski, Scott Shawcroft, Ryan Tucker, Paul Beck for their work. Except.
2 What is pyGame? A set of Python modules to make it easier to write games. –home page: –documentation:
Pygame Dick Steflik.
Guide to Programming with Python
Unit 9 pyGame Special thanks to Roy McElmurry, John Kurkowski, Scott Shawcroft, Ryan Tucker, Paul Beck for their work. Except where otherwise noted, this.
Week 10 Writing Games with Pygame, continued Special thanks to Scott Shawcroft, Ryan Tucker, and Paul Beck for their work on these slides. Except where.
MICROSOFT WORD GETTING STARTED WITH WORD. CONTENTS 1.STARTING THE PROGRAMSTARTING THE PROGRAM 2.BASIC TEXT EDITINGBASIC TEXT EDITING 3.SAVING A DOCUMENTSAVING.
Locally Edited Animations We will need 3 files to help get us started at
VIDEO GAME PROGRAMMING Video Game Programming Junior – DigiPutt INSTRUCTOR TEACHER’S ASSISTANT.
Lecture 5: Interaction 1  Principles of Interactive Graphics  CMSCD2012  Dr David England, Room 711,  ex 2271 
Meet Pygame Noah Kantrowitz June 8, The Basics Cross-platform Based on SDL (don’t quote me on that) Handle input (keyboard, mouse) and output (graphics,
Addison Wesley is an imprint of © 2010 Pearson Addison-Wesley. All rights reserved. Chapter 7 The Game Loop and Animation Starting Out with Games & Graphics.
Lab 6: event & input intro User Interface Lab: GUI Lab Oct. 2 nd, 2013.
Game Maker Terminology
Game Maker – Getting Started What is Game Maker?.
CIS 3.5 Lecture 2.2 More programming with "Processing"
Class Builder Tutorial Presented By- Amit Singh & Sylendra Prasad.
Advanced Stuff Learning by example: Responding to the mouse.
PyGame - Unit 1 PyGame Unit – – Introduction to PyGame.
1 CSC 221: Computer Programming I Fall 2009 Introduction to programming in Scratch  animation sprites  motion, control & sensing  costume changes 
PyGame - Unit 2 PyGame Unit – – Animation.
PyGame - Unit 4 PyGame Unit – Object Oriented Programming OOP.
Graphics in Python On entry: Run Python 2.78 from N: drive/computing and ICT VLE: Computing home page - check your feedback Success criteria: ●Understands.
Intro to Pygame Lecture 05. What is Pygame? It is a set of Python modules designed for writing games. It makes writing games possible for beginners. import.
12-Jun-16 Event loops. 2 Programming in prehistoric times Earliest programs were all “batch” processing There was no interaction with the user Input Output.
11. Skier Let’s Learn Saengthong School, June – August 2016 Teacher: Aj. Andrew Davison, CoE, PSU Hat Yai Campus
3. Drawing Let’s Learn Saengthong School, June – August 2016 Teacher: Aj. Andrew Davison, CoE, PSU Hat Yai Campus
Introducing Scratch Learning resources for the implementation of the scenario
Game Maker Tutorials Introduction Clickball IntroductionClickball Where is it? Shooting Where is it?Shooting.
Reference: What is it? A multimedia python library – Window Management – Graphics geometric shapes bitmaps (sprites) – Input Mouse Keyboard.
13. Sprites. Outline 1.Game Things in Pygame (again) 2.The Pygame sprite Module 3.The Sprite Class 4.Groups of Sprites 5.Types of Collision Detection.
Sprites (Images) and Sounds
Sound and more Animations
MOM! Phineas and Ferb are … Aims:
Pixels, Colors and Shapes
Scratch for Interactivity
Catapult 2016.
PYGAME.
WITH PYGAME ON THE RASPBERRY PI
Let’s Learn 2. Installing Pygame
8. Installing Pygame
Week 8 Classes and Objects
Keyboard Input.
9. Drawing.
10. User Input.

9. Drawing Let's Learn Python and Pygame
Catapult 2014 Session 10.
Let’s Learn 10. Invaders Saengthong School, June – August 2016
13. Sprites Let's Learn Python and Pygame
8. Starting Pygame Let's Learn Python and Pygame
10. User Input Let's Learn Python and Pygame
14. Pong.
WICS - Flappy Anteater Python Tutorial
16. Invaders.
More programming with "Processing"
Let’s Learn 7. Sprites Saengthong School, June – August 2016
14. Pong Let's Learn Python and Pygame
L L Line CSE 420 Computer Games Lecture #6 Game Foundations.
CoE Software Lab II , Semester 2, Pong.
CoE Software Lab II 1. Pygame Intro , Semester 2,
CoE Software Lab II , Semester 2, Sprites.
Presentation transcript:

Video Games Writing Games with Pygame Special thanks to Scott Shawcroft, Ryan Tucker, and Paul Beck for their work on these slides. Except where otherwise noted, this work is licensed under:

Video Games Writing Games with Pygame

3 Inheritance class name ( superclass ): statements –Example: class Point3D(Point): # Point3D extends Point z = 0 # add a z field... Python also supports multiple inheritance class name ( superclass,..., superclass ): statements

4 Calling Superclass Methods methods:class. method ( parameters ) constructors:class.__init__( parameters ) class Point3D(Point): z = 0 def __init__(self, x, y, z): Point.__init__(self, x, y) self.z = z def translate(self, dx, dy, dz): Point.translate(self, dx, dy) self.z += dz

5 Pygame A set of Python modules to help write games Deals with media (pictures, sound) nicely Interacts with user nicely (keyboard, joystick, mouse input)

6 Installing Pygame Go to the Pygame web site: –click 'Downloads' at left –Windows users: under the 'Windows' section, click the most recent version (as of this quarter, that is pygame win32-py3.1.msi) –Mac users: under the 'Macintosh' section, click the most recent version (as of this quarter, pygame-1.9.1release-py3.1-macosx10.5.zip) –save file to hard disk –run file to install it

7 Other Resources Pygame documentation: –lists every class in Pygame and its useful behavior The Application Programming Interface (API)API –specifies the classes and functions in package Search for tutorialstutorials Experiment! (Not kidding)

8 What is a game? Game State. –In Java, what’s the “state” of an object? What’s the state of chess? What type of ‘objects’ would we want if we were to implement chess?

9 Our Goal: Starcraft II in PyGame

10 Starcraft II Ok… not all of it. But we’ll move a probe around.

11 Initializing a Game Import Pygame's relevant classes: import sys from pygame import * from pygame.locals import * from pygame.sprite import * Initialize Pygame at the start of your code: pygame.init() Note: Because you’ve imported pygame as above, you are not technically required to have pygame.init()

12 Creating a Window name = display.set_mode(( width, height ) [, options] ) Example: screen = display.set_mode((640, 480)) Options: FULLSCREEN - use whole screen instead of a window DOUBLEBUF - display buffering for smoother animation OPENGL - 3D acceleration (don't use unless needed) Example: screen = display.set_mode((1024, 768), FULLSCREEN)

13 Initial Game Program An initial, incomplete game file using Pygame: whack_a_mole.py import pygame from pygame import * from pygame.locals import * from pygame.sprite import * pygame.init() # set window title display.set_caption("Whack-a-Mole") screen = display.set_mode((640, 480))

14 Sprites Next we must define all the sprites found in the game. sprite: A character, enemy, or other object in a game. –Sprites can move, animate, collide, and be acted upon –Sprites usually consist of an image to draw on the screen and a bounding rectangle indicating the sprite's collision area Pygame sprites are objects that extend the Sprite class.

15 Programming a Sprite class name (Sprite): # constructor def __init__(self): Sprite.__init__(self) self.image = image.load(" filename ") self.rect = self.image.get_rect() other methods (if any) –Pre-defined fields in every sprite: self.image - the image or shape to draw for this sprite images are Surface objects, loaded by image.load function self.rect - position and size of where to draw the image

16 Sprite Example # A class for a probe to mine minerals! class Probe(Sprite): def __init__(self): Sprite.__init__(self) self.image = image.load(“probe.png") self.rect = self.image.get_rect() Note: The image and the rect are part of the state. What are some other things that could be part of the state?

17 Sprite Groups name = Group( sprite1, sprite2,... ) –To draw sprites on screen, they must be put into a Group Example: protoss = Probe() # create a Mole object sprites = Group(protoss) Group methods: –draw( surface ) - draws all sprites in group onto a surface –update() - updates every sprite's appearance

18 Surface In Pygame, every 2D object is an object of type Surface –The screen object returned from display.set_mode(), each game character, images, etc. –Useful methods in each Surface object: Method NameDescription fill(( red, green, blue )) paints surface in given color (rgb 0-255) get_width(), get_height() returns the dimensions of the surface get_rect() returns a Rect object representing the x/y/w/h bounding this surface blit( src, dest ) draws this surface onto another surface

19 Drawing and Updating All Surface and Group objects have an update method that redraws that object when it moves or changes. Once sprites are drawn onto the screen, you must call display.update() to see the changes protoss = Probe() # create a Probe object sprites = Group(protoss) sprites.update() # Calls the update method sprites.draw(screen) display.update() # redraw to see the sprites

20 Game Program StarCraft_II.py import sys from pygame import * from pygame.locals import * from pygame.sprite import * class Probe(Sprite): def __init__(self): Sprite.__init__(self) self.image = image.load("probe.png") self.rect = self.image.get_rect() # MAIN init() display.set_caption('Starcraft II') window = display.set_mode((600,600)) protoss = Probe() sprites = Group(protoss) window.fill((255,255,255)) sprites.draw(window) display.update()

21 Event-Driven Programming event: A user interaction with the game, such as a mouse click, key press, clock tick, etc. event-driven programming: Programs with an interface that waits for user events and responds to those events. Pygame programs need to write an event loop that waits for a Pygame event and then processes it.

22 Event Loop Template # after Pygame's screen has been created while True: name = event.wait() # wait for an event if name.type == QUIT: pygame.quit() # exit the game break elif name.type == type : code to handle another type of events... code to update/redraw the game between events (like this) sprites.update() sprites.draw(window) display.update()

23 Event Loop 2 # after Pygame's screen has been created while True: ev = event.poll() # Grabs an event if ev != NOEVENT: # If there is an event do stuff here Check for special events… sprites.update() sprites.draw(window) display.update() Note that the sprites’ update method gets called more than in the previous example even if no events happen

24 Example Let’s look at the code for the difference between the two event loops

25 Mouse Clicks When the user presses a mouse button, you get events with a type of MOUSEBUTTONDOWN and MOUSEBUTTONUP. –mouse movement is a MOUSEMOTION event mouse.get_pos() returns the mouse cursor's current position as an (x, y) tuple Example: ev = event.wait() if ev.type == MOUSEBUTTONDOWN: # user pressed a mouse button x, y = mouse.get_pos()

26 Mouse Clicks You can also do this through events. # after Pygame's screen has been created ev = event.poll() # Grabs an event if ev != NOEVENT: # If there is an event info = ev.dict # Gives a dict of information x, y = info[‘pos’]

27 Key Presses When the user presses a keyboard key, you get events with a type of KEYDOWN and then KEYUP. –event contains.key field representing what key was pressed –Constants for different keys: K_LEFT, K_RIGHT, K_UP, K_DOWN, K_a - K_z, K_0 - K_9, K_F1 - K_F12, K_SPACE, K_ESCAPE, K_LSHIFT, K_RSHIFT, K_LALT, K_RALT, K_LCTRL, K_RCTRL,... Example: ev = event.wait() if ev.type == KEYDOWN: if ev.key == K_ESCAPE: pygame.quit()

28 What we want We have a sprite on our screen and we have a main loop that doesn’t really do anything. We want to make the sprite move to a location that we click on. What do we need to add to the state of our Probe in order to accomplish it?

29 Collision Detection collision detection: Noticing whether one sprite or object has touched another, and responding accordingly. –A major part of game programming In Pygame, collision detection is done by examining sprites, rectangles, and points, and asking whether they intersect.

30 Rect a 2D rectangle associated with each sprite (.rect field) –Fields: top, left, bottom, right, center, centerx, centery, topleft, topright, bottomleft, bottomright, width, height, size,... Method NameDescription collidepoint( p ) returns True if this Rect contains the point colliderect( rect ) returns True if this Rect contains the rect contains( rect ) returns True if this Rect contains the other move( x, y ) moves a Rect to a new position inflate( dx, dy ) grow/shrink a Rect in size union(rect) joins two Rects

31 Collision Example Detecting whether a sprite touches the mouse cursor: ev = event.wait() if ev.type == MOUSEBUTTONDOWN: if sprite.rect.collidepoint(mouse.get_pos()): # then the mouse cursor touches the sprite... Exercise: Detect when the user clicks on the Probe. Make the mole run away by fleeing to a new random location from (0, 0) to (600, 400).

32 Exercise Solution class Probe(Sprite): def __init__(self): Sprite.__init__(self) self.image = image.load(“probe.png") self.rect = self.image.get_rect() def flee(self): self.rect.left = randint(0, 600) # random location self.rect.top = randint(0, 400)... while True: ev = event.wait() # wait for an event if ev.type == QUIT: pygame.quit() break elif ev.type == MOUSEBUTTONDOWN: if probe.rect.collidepoint(mouse.get_pos()): probe.flee()...