Make Pacman Game In Python With Code
Last updated June 8, 2023 by Jarvis Silva
Today in this tutorial we will make pacman game in python, pacman is one of the most popular games, I used to play this game when I was a kid, It is very simple game you can still play this game if you have Google play games it comes preinstalled on it.
If you don’t have much knowledge on python game development then it is going to be difficult for you but don’t worry I will provide you with the python code and explain you how the code works.
Making Pacman Game Using Python
To create this pacman game in python, I will use the freegames python library. It has a collection of free python games, you can use this module to create games in python.
Now let’s see step by step how to make pacman game in python. I will provide you with the python code for pacman game, so read till the end.
1. Install and setup python
If you have python installed, skip this. The first step is to install python, so go to the official python website and download the latest python version.
After download start the python installer and complete the setup it will install python on your computer.
2. Install freegames python library
Now you need to install freegames python library first create a new folder for this project and open a command prompt in the project location and paste the below command
pip install freegames
It will install the freegames python module in your project, so now create a python file and go to the next step
3. Python code for pacman game
from random import choice
from turtle import *
from freegames import floor, vector
state = {'score': 0}
path = Turtle(visible=False)
writer = Turtle(visible=False)
aim = vector(5, 0)
pacman = vector(-40, -80)
ghosts = [
[vector(-180, 160), vector(5, 0)],
[vector(-180, -160), vector(0, 5)],
[vector(100, 160), vector(0, -5)],
[vector(100, -160), vector(-5, 0)],
]
# fmt: off
tiles = [
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0,
0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0,
0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
]
# fmt: on
def square(x, y):
"""Draw square using path at (x, y)."""
path.up()
path.goto(x, y)
path.down()
path.begin_fill()
for count in range(4):
path.forward(20)
path.left(90)
path.end_fill()
def offset(point):
"""Return offset of point in tiles."""
x = (floor(point.x, 20) + 200) / 20
y = (180 - floor(point.y, 20)) / 20
index = int(x + y * 20)
return index
def valid(point):
"""Return True if point is valid in tiles."""
index = offset(point)
if tiles[index] == 0:
return False
index = offset(point + 19)
if tiles[index] == 0:
return False
return point.x % 20 == 0 or point.y % 20 == 0
def world():
"""Draw world using path."""
bgcolor('black')
path.color('blue')
for index in range(len(tiles)):
tile = tiles[index]
if tile > 0:
x = (index % 20) * 20 - 200
y = 180 - (index // 20) * 20
square(x, y)
if tile == 1:
path.up()
path.goto(x + 10, y + 10)
path.dot(2, 'white')
def move():
"""Move pacman and all ghosts."""
writer.undo()
writer.write(state['score'])
clear()
if valid(pacman + aim):
pacman.move(aim)
index = offset(pacman)
if tiles[index] == 1:
tiles[index] = 2
state['score'] += 1
x = (index % 20) * 20 - 200
y = 180 - (index // 20) * 20
square(x, y)
up()
goto(pacman.x + 10, pacman.y + 10)
dot(20, 'yellow')
for point, course in ghosts:
if valid(point + course):
point.move(course)
else:
options = [
vector(5, 0),
vector(-5, 0),
vector(0, 5),
vector(0, -5),
]
plan = choice(options)
course.x = plan.x
course.y = plan.y
up()
goto(point.x + 10, point.y + 10)
dot(20, 'red')
update()
for point, course in ghosts:
if abs(pacman - point) < 20:
return
ontimer(move, 100)
def change(x, y):
"""Change pacman aim if valid."""
if valid(pacman + vector(x, y)):
aim.x = x
aim.y = y
setup(420, 420, 370, 0)
hideturtle()
tracer(False)
writer.goto(160, 160)
writer.color('white')
writer.write(state['score'])
listen()
onkey(lambda: change(5, 0), 'Right')
onkey(lambda: change(-5, 0), 'Left')
onkey(lambda: change(0, 5), 'Up')
onkey(lambda: change(0, -5), 'Down')
world()
move()
done()
Above is the python pacman code, if you see in the code it uses many functions you may not know so let's see simple explaination of how this code works:
- The code starts by importing necessary modules, including the
choice
function from therandom
module and theTurtle
class from theturtle
module. - It defines a dictionary named
state
to keep track of the game score and initializes it with a score of 0. - The game area is represented by a grid of tiles. The
tiles
list stores the configuration of the grid, where 0 represents walls, 1 represents pellets, and 2 represents eaten pellets. - Several helper functions are defined:
square(x, y)
: Draws a square at the given coordinates (x, y) using the Turtle graphics.offset(point)
: Converts a point in the game world to an index in thetiles
list.valid(point)
: Checks if a given point is a valid position in the game world, considering walls and boundaries.world()
: Draws the game world by iterating through thetiles
list and callingsquare()
to draw each tile.
- The main game loop is defined in the
move()
function. It updates the game state, moves the pacman and ghosts, checks for collisions, and updates the display. The loop is implemented using recursive calls tomove()
function with a delay of 100 milliseconds. - The
change(x, y)
function is used as event handlers for the arrow keys. It updates the aim of the pacman based on the arrow key pressed, if the new position is valid. - The code sets up the game window and graphics, sets up event listeners for key presses, and then initializes the game by calling
world()
andmove()
. Thedone()
function from theturtle
module is used to start the game loop and keep the window open.
To run this game you can use an online python compiler or run it on your machine, when you run this program below is the image output you will get.
Use the arrow keys to move the player, if you touch the enemies the game will be over. The game has some bugs.
This was the tutorial on how to make pacman game, I hope you found this tutorial helpful and useful, do share it with your friends who are intrested in creating games in python
Here are more python games tutorial you may find interesting:
- Making a battleship game in python.
- Making a fruit ninja game in python.
- Making minecraft game in python clone.
I hope you found what you were looking for from this tutorial and if you want more python tutorials like this, do join our Telegram channel for future updates.
Thanks for reading, have a nice day 🙂