Get Started with Pygame

Let us Pygame

Gaming has become a major field in the computing world. It is the favourite entertainment for many users, but a challenging job for developers, because of the complexity involved. Pygame is a great set of Python modules that helps in building games with much less work. Since I’m learning about this module, I wanted to share my knowledge with you.

Earlier, developing a game was hard, because we needed to configure hardware according to the needs of the game. With the development of SDL (Simple DirectMedia Layer), developers don’t need to mess with low-level programming any more. Pygame is the Python extension of SDL, with some additional benefits.

Like SDL, it automatically covers the hardware interface, so you just need to code at a high level. It has replaced the older pySDL module. Pygame was released by Pete Shinners, under the LGPL. One of its greatest strengths is the online community. This link is worth a visit, as this community motivates programmers to build small games using this great API, through competitions and help.

Pygame should come pre-installed with Python. I am using the Ubuntu 10.04 32-bit desktop edition with Python 2.6.5. My Pygame version is 1.9.1. To check whether it is installed on your system, run the following in the interactive mode of your Python interpreter:

import pygame
pygame.ver

If installed, it will return the version of the Pygame module. If it shows an error, it has not installed. Download it and run the following steps as the root user to install it:

tar zxf pygame-1.9.1release.tar.gz
cd pygame-1.9.1release
python setup.py install

Hello World

Beginning with a “Hello World” program is a tradition in the programming world. Let’s follow the tradition, but with some extended/advanced code. Given below is a short script, hello.py, which will display ‘Hello World’ along with a background image.

import pygame 	#1
from pygame.locals import * 
from sys import exit 

pygame.init()             	#2
screen=pygame.display.set_mode((640, 480),0, 24) 	#3
pygame.display.set_caption("Hello World") 	#4
create=pygame.font.SysFont("comicsansms",30) 	#5
f=create.render("Hello World",True,(0, 0, 0),(255, 255, 255)) #6
img=pygame.image.load("simple.jpg").convert() 	#7
while True: 

 for i in pygame.event.get(): 	#8
  if i.type==QUIT: 
   exit() 

screen.blit(img,(0, 0)) 	#9
screen.blit(f,(200, 200)) 
pygame.display.update() 	#10

The output of this program can be seen in Figure 1.

‘Hello World’

Figure 1: ‘Hello World’

Let’s try to understand the output by following the code, step by step.

  1. We import pygame so that we can use the module’s functionality.
  2. Pygame is initialised. Manual initialisation of resources leads to faster processing.
  3. Everything in Pygame runs on surfaces; so we create a display surface and set its properties using the set_mode function, where the first argument is a tuple consisting of height and width as elements, the second a flag which is by default zero, and the third the colour information (8, 16, 24, 32-bit).
  4. We set the caption of the created display to “Hello World”.
  5. We create an object that stores information about the font type and size we want to use.
  6. We use this object to render text on the surface, using the render method, whose signature is render(text, anti-aliasing, text color, background color).
  7. We create another object — an image we loaded.
  8. The pygame.event.get() call is used to get all the events that are occurring. When it encounters QUIT (when the user closes the window), it will exit the loop, and close the display.
  9. Blitting is like copying one surface to another surface. We copy the image surface object to the display surface object at the (x, y) co-ordinates. In the same way, we blit the font object to the display surface.
  10. Blitting always takes place in a buffer; we will not be able to see its results. To display the result, we use this line of code, which updates the display from the buffer.

Events

Knowledge of event handling is very important if you are creating a game. Developers must know how their games ought to respond when a user clicks the mouse button, for instance. The number of events that can occur within the game are infinite. We will cover the major events, such as MouseButtonDown, MouseButtonUp, etc., with another sample script, event.py:

import pygame 
from pygame.locals import * 
from sys import exit 
pygame.init() 
a=pygame.display.set_mode((650, 400),RESIZABLE, 32) 
pygame.display.set_caption("Event list ") 
font=pygame.font.SysFont("arial",16)  back=pygame.Surface(a.get_size())                                                                     
back=back.convert() 
back.fill((255, 255, 255))
while True: 
 for i in pygame.event.get(): 
  if i.type==QUIT: 
   exit() 
  else: 
   text=font.render("%s"%i, 1,(10, 10, 10),(255, 255, 255))                                                                                                                                  
  a.blit(back,(0, 0))
  a.blit(text,(0, 0)) 
  pygame.display.update()

The output is as shown in Figure 2.

Event information

Figure 2: Event information

Events are stored in the form of a queue. pygame.event.get() gives us the list of occurring events within the queue. Running the above script will display all the events that occurred within the display, with all the information about the event.

Let’s go into the details for some of the important events:

  • MouseMotion: It is a dictionary with the key elements buttons, pos, and rel. The key element button corresponds to a value like (0, 0, 0), in which the 0th element represents the mouse button on the left extreme, the 1st element the middle button, and the 3rd the right button. If clicked, the button value is 1; if not clicked, 0. The pos element represents the current coordinate of the mouse, and rel shows the difference in mouse position, with respect to the last event co-ordinates. You can move the mouse in the space with the mouse button held down, too.
  • MouseButtonDown: The key elements are button and pos, with the same explanations as above.
  • MouseButtonUp: This is similar to MouseButtonDown; the only difference is that button value is 0 instead of 1.
  • KeyDown: The key elements of the dictionary are scancode, key, unicode and mod. When a key is pressed, this event is emitted. The scancode value is the platform-specific value of the key (key is the value of the key) and you can find out the values of all the keys in pygame.locals. mod indicates the combination mode (something like Ctrl+X will give a different mod value). unicode represents the Unicode value of the key that was pressed.
  • KeyUp: Similar to KeyDown, but it doesn’t contain the unicode element.

These events are used in almost every game. There are other events too, such as videoresize, etc. You can learn more about them on the Web. Pygame is of great use if you start your work from scratch — it’s worth trying out this API. I am still reading about the module in depth, so I will try to provide readers with more knowledge about it in the future. Suggestions and queries are always welcome.

Don’t forget to read the next part for more

All published articles are released under Creative Commons Attribution-NonCommercial 3.0 Unported License, unless otherwise noted.
Open Source For You is powered by WordPress, which gladly sits on top of a CentOS-based LEMP stack.

Creative Commons License.