Python Free Game by Curious Programmer
Python Free Game by Curious Programmer
Python
Hello Camps!
Here is a 15 Python Games Source Code pdf for you
By
Curious Programmer
Index
2. Games
1) Snake
2) Paint
3) Pacman
4) Cannon
5) Connect
6) Flappy
7) Memory
8) Pong
9) Simon Says
10) Tic Tac Toe
11) Tiles
12) Tron
13) Life
14) Maze
15) Fidget
1. Free Python Games
Python is one of the top-five most popular programming languages in the world and
available for free from Python.org. Python includes an extensive Standard Library
distributed with your installation. The Standard Library has a module called Turtle
which is a popular way to introduce programming to kids. All of the games in Free
Python
Games are implemented using Python and its Turtle module.
The games run anywhere Python can be installed which includes desktop
computers running Windows, Mac OS, or Linux and older or low-power
hardware such as the Raspberry Pi.
Each game is entirely independent from the others and includes comments.
1) Features
• Fun to play!
• Simple Python code
• Easy to install
• Designed for education
• Depends only on the Python Standard Library
• Developed on Python 3.7
• Tested on CPython 2.7, 3.4, 3.5, 3.6, and 3.7
Free Python Games supports a command-line interface (CLI). Help for the CLI is available
using:
The CLI supports three commands: list, copy, and show. For a list of all games run:
Any of the listed games may be played by executing the Python module from the command-
line. To reference the Python module, combine “freegames” with the name of the game. For
example, to play the “snake” game run:
$ python3 -m freegames.snake
Games can be modified by copying their source code. The copy command will create a Python
file in your local directory which you can edit. For example, to copy and play the “snake” game
run:
Python includes a built-in text editor named IDLE which can also execute Python code. To
launch the editor and make changes to the “snake” game run:
You can also access documentation in the interpreter with Python’s built-in help function:
1) Snake
classic arcade game. Use the arrow keys to navigate and eat the green food. Each time the
food is consumed, the snake grows one segment longer. Avoid eating yourself or going out of
bounds!
Code
food = vector(0, 0)
snake = [vector(10, 0)]
aim = vector(0, -10)
def inside(head):
"Return True if head inside boundaries."
return -200 < head.x < 190 and -200 < head.y < 190
def move():
"Move snake forward one segment."
head = snake[-1].copy()
head.move(aim)
snake.append(head)
if head == food:
print('Snake:', len(snake))
food.x = randrange(-15, 15) * 10
food.y = randrange(-15, 15) * 10
else:
snake.pop(0)
clear()
2) Paint:
draw lines and shapes on the screen. Click to mark the start of a shape and click again
to mark its end. Different shapes and colors can be selected using the keyboard.
Source Code :
end_fill()
if start is None:
state['start'] = vector(x, y)
else:
shape = state['shape']
end = vector(x, y)
shape(start, end)
state['start'] = None
Output
3) Packman
classic arcade game. Use the arrow keys to navigate and eat all the white food. Watch out for
red ghosts that roam the maze.
Source code
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
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
if tiles[index] == 0:
return False
def world():
"Draw world using path."
bgcolor('black')
path.color('blue')
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')
up()
goto(point.x + 10, point.y + 10)
dot(20, 'red')
update()
ontimer(move, 100)
4) Connect
Connect 4 game. Click a row to drop a disc. The first player to connect four discs vertically,
horizontally, or diagonally wins!
Source code:
def grid():
"Draw Connect Four grid."
bgcolor('light blue')
update()
up()
goto(x, y)
dot(40, player)
update()
rows[row] = count + 1
state['player'] = turns[player]
Output :
5) Cannon
projectile motion. Click the screen to fire your cannnonball. The cannonball pops blue
balloons in its path. Pop all the balloons before they can cross the screen
Source Code:
def inside(xy):
"Return True if xy within screen."
return -200 < xy.x < 200 and -200 < xy.y < 200
def draw():
"Draw ball and targets."
clear()
if inside(ball):
goto(ball.x, ball.y)
dot(6, 'red')
update()
def move():
"Move ball and targets."
if randrange(40) == 0:
y = randrange(-150, 150)
target = vector(200, y)
targets.append(target)
if inside(ball):
speed.y -= 0.35
ball.move(speed)
dupe = targets.copy()
targets.clear()
ontimer(move, 50)
Output:
6) Flappy
Flappy-bird inspired game. Click the screen to flap your wings. Watch out for black
ravens as you fly across the screen.
Source Code :
from random import *
from turtle import *
bird = vector(0, 0)
balls = []
def inside(point):
"Return True if point on screen."
return -200 < point.x < 200 and -200 < point.y < 200
def draw(alive):
"Draw screen objects."
clear()
goto(bird.x, bird.y)
if alive:
dot(10, 'green')
else:
dot(10, 'red')
update()
def move():
"Update object positions."
bird.y -= 5
if randrange(10) == 0:
y = randrange(-199, 199)
ball = vector(199, y)
balls.append(ball)
if not inside(bird):
draw(False)
return
draw(True)
ontimer(move, 50)
7) Memory
puzzle game of number pairs. Click a tile to reveal a number. Match two numbers and
the tiles will disappear to reveal an image.
Source code :
def xy(count):
"Convert tiles count to (x, y) coordinates."
return (count % 8) * 50 - 200, (count // 8) * 50 - 200
def draw():
"Draw image and tiles."
clear()
goto(0, 0)
shape(car)
stamp()
mark = state['mark']
update()
ontimer(draw, 100)
shuffle(tiles)
setup(420, 420, 370, 0)
addshape(car)
hideturtle()
tracer(False)
onscreenclick(tap)
draw()
done()
Output :
8) Pong
classic arcade game. Use the keyboard to move your paddle up and down. The first
player to miss the ball loses.
Source Code:
from random import choice, random
from turtle import *
ball = vector(0, 0)
aim = vector(value(), value())
state = {1: 0, 2: 0}
def draw():
"Draw game and move pong ball."
clear()
rectangle(-200, state[1], 10, 50)
rectangle(190, state[2], 10, 50)
ball.move(aim)
x = ball.x
y = ball.y
up()
goto(x, y)
dot(10)
update()
if x < -185:
low = state[1]
high = state[1] + 50
if x > 185:
low = state[2]
high = state[2] + 50
ontimer(draw, 50)
9) Simon Says
classic memory puzzle game. Click the screen to start. Watch the pattern and then click
the tiles in the same order. Each time you get the sequence right the pattern gets one
step longer.
Source Code
pattern = []
guesses = []
tiles = {
vector(0, 0): ('red', 'dark red'),
vector(0, -200): ('blue', 'dark blue'),
vector(-200, 0): ('green', 'dark green'),
vector(-200, -200): ('yellow', 'khaki'),
}
def grid():
"Draw grid of tiles."
square(0, 0, 200, 'dark red')
square(0, -200, 200, 'dark blue')
square(-200, 0, 200, 'dark green')
square(-200, -200, 200, 'khaki')
update()
def flash(tile):
"Flash tile in grid."
glow, dark = tiles[tile]
square(tile.x, tile.y, 200, glow)
update()
sleep(0.5)
square(tile.x, tile.y, 200, dark)
update()
sleep(0.5)
def grow():
"Grow pattern and flash tiles."
tile = choice(list(tiles))
pattern.append(tile)
if tile != pattern[index]:
exit()
guesses.append(tile)
flash(tile)
if len(guesses) == len(pattern):
grow()
onscreenclick(tap)
Source Code
def grid():
"Draw tic-tac-toe grid."
line(-67, 200, -67, -200)
line(67, 200, 67, -200)
line(-200, -67, 200, -67)
line(-200, 67, 200, 67)
def floor(value):
"Round value down to grid with square size 133."
return ((value + 200) // 133) * 133 - 200
state = {'player': 0}
players = [drawx, drawo]
Output :
11) Tiles
puzzle game of sliding numbers into place. Click a tile adjacent to the empty square to
swap positions. Can you make the tiles count one to fifteen from left to right and
bottom to top?
Source Code:
tiles = {}
neighbors = [
vector(100, 0),
vector(-100, 0),
vector(0, 100),
vector(0, -100),
]
def load():
"Load tiles and scramble."
count = 1
tiles[mark] = None
if spot in tiles:
number = tiles[spot]
tiles[spot] = None
tiles[mark] = number
mark = spot
color('black', 'white')
begin_fill()
for count in range(4):
forward(99)
left(90)
end_fill()
if number is None:
return
elif number < 10:
forward(20)
def draw():
"Draw all tiles."
for mark in tiles:
square(mark, tiles[mark])
update()
Output:
12) Tron
classic arcade game. Use the keyboard to change the direction of your Tron player.
Avoid touching the line drawn by your opponent.
Source Code:
from turtle import *
p1xy = vector(-100, 0)
p1aim = vector(4, 0)
p1body = set()
p2xy = vector(100, 0)
p2aim = vector(-4, 0)
p2body = set()
def inside(head):
"Return True if head inside screen."
return -200 < head.x < 200 and -200 < head.y < 200
def draw():
"Advance players and draw game."
p1xy.move(p1aim)
p1head = p1xy.copy()
p2xy.move(p2aim)
p2head = p2xy.copy()
p1body.add(p1head)
p2body.add(p2head)
Output:
13) Life
Conway’s Game of Life. The classic, zero-player, cellular automation created in 1970 by
John Conway
Source code :
from random import choice
from turtle import *
from freegames import square
cells = {}
def initialize():
"Randomly initialize the cells."
for x in range(-200, 200, 10):
for y in range(-200, 200, 10):
cells[x, y] = False
def step():
"Compute one step in the Game of Life."
neighbors = {}
def draw():
"Draw all the squares."
step()
clear()
for (x, y), alive in cells.items():
color = 'green' if alive else 'black'
square(x, y, 10, color)
update()
ontimer(draw, 100)
setup(420, 420, 370, 0)
hideturtle()
tracer(False)
initialize()
draw()
done()
Output:
14) Maze
move from one side to another. Inspired by A Universe in One Line of Code with 10
PRINT. Tap the screen to trace a path from one side to another.
Source code :
def draw():
"Draw maze."
color('black')
width(5)
update()
width(2)
color('red')
goto(x, y)
dot(4)
15) Fidget
fidget spinner inspired animation. Click the screen to accelerate the fidget spinner.
Source Code
state = {'turn': 0}
def spinner():
"Draw fidget spinner."
clear()
angle = state['turn'] / 10
right(angle)
forward(100)
dot(120, 'red')
back(100)
right(120)
forward(100)
dot(120, 'green')
back(100)
right(120)
forward(100)
dot(120, 'blue')
back(100)
right(120)
update()
def animate():
"Animate fidget spinner."
if state['turn'] > 0:
state['turn'] -= 1
spinner()
ontimer(animate, 20)
def flick():
"Flick fidget spinner."
state['turn'] += 10
Output :
THANK YOU