SANJIVANI RURAL EDUCATION SOCITY,
KOPARGOAN
SANJIVANI K.B.P.POLYTECHNIC.
THIS IS TO CERTIFY THAT PROJECT
ENTITLED:
“STICK BOY RUN GAME ”
Submitted By:
Dhandre Chetan(2100340485)
Under the guidance of: Mr.S.B.Jadhav
DEPARTMENT OF COMPUTERTECHNOLOGY
(2022-2023)
CERTIFICATE
Department Of Diploma in Computer
TechnologySanjivani K.B.P. Polytechnic,
Kopargoan.
This is to certify that project entitled:
“STICK BOY RUN GAME”
Submitted By:
Dhandre Chetan (2100340485)
Mr.S.B.Jadhav Mr.G.N.Jorvekar Mr.A.R.Mirikar
(Guide) (H.O.D) (Principal)
ACKNOWLEDGEMENT
First and the foremost We , express our deep sense of gratitude,
sincere thanks and deep sense of appreciation to Project Guide Prof.
S.B.Jadhav, Department of Computer Technology, Sanjivani K.B.P.
Polytenic, Kopargaon. Your availability at anytime throughout the
year, valuable guidance, opinion, view, comments, critics,
encouragement, and support tremendously boosted this project work.
Lots of thanks to Head of Computer Technology Department,
Prof.G.N.Jorvekar for providing us the best support we ever had.
We like to express our sincere gratitude to Prof.A.R.Mirikar,
Principal, Sanjivani K. B. P. Polytechnic, Kopargaon for providing a
great platform to complete the project within the scheduled time. We
are also Thankful to all the faculty members, Computer Technology
Department, Sanjivani K. B. P. Polytechnic, Kopargaon for giving
comments for improvement of work, encouragement and help during
completion of the Project.
Dhandre Chetan Rajendra(261)
Diploma in Computer Technology
Saniivani K.B.P. Polytechnic, Kopargaon
INRODUCTION
The Simple Stick Boy Run Game was built using Python module where it has a
simple library that can move and modify an object. The game is played in a simple
windowed interface that comes with a sprite of the stickman and background sprites
of a platform. The player can control the stick man via keyboard bindings (Left
Arrow Key to turn left, Right Arrow Key to turn right, Space Bar to jump). The game
is very simple you just need to jump across the platform and enter the door as fast as
you can. The stick man will continue to move when you turn in any side. The Simple
Stick Boy Run Game is simple arcade style platform game where your goal is to
enter the yellow door.
SOURCE CODE:
from tkinter import *
import random
import time
class Game:
def __init__(self):
self.tk = Tk()
self.tk.title("Stick Boy")
self.tk.resizable(0, 0)
self.tk.wm_attributes("-topmost", 1)
self.canvas = Canvas(self.tk, width=500, height=500, highlightthickness=0)
self.canvas.pack()
self.tk.update()
self.canvas_height = 500
self.canvas_width = 500
self.bg = PhotoImage(file="background.gif")
w = self.bg.width()
h = self.bg.height()
for x in range(0, 5):
for y in range(0, 5):
self.canvas.create_image(x * w, y * h, image=self.bg, anchor='nw')
self.sprites = []
self.running = True
self.game_over_text = self.canvas.create_text(250, 250, text='YOU WIN!', font =
('Times', 30), state='hidden', fill = '#ffd561')
self.out = self.canvas.create_text(58, 22, text = 'EXIT', font = ('Times', 7), fill =
'#f56e6e')
def mainloop(self):
while 1:
if self.running:
for sprite in self.sprites:
sprite.move()
else:
time.sleep(1)
self.canvas.itemconfig(self.game_over_text, state='normal')
self.tk.update_idletasks()
self.tk.update()
time.sleep(0.02)
class Coords:
def __init__(self, x1=0, y1=0, x2=0, y2=0):
self.x1 = x1
self.y1 = y1
self.x2 = x2
self.y2 = y2
def within_x(co1, co2):
if (co1.x1 > co2.x1 and co1.x1 < co2.x2) or (co1.x2 > co2.x1 and co1.x2 < co2.x2) or
(co2.x1 > co1.x1 and co2.x1 < co1.x2) or (co2.x2 > co1.x1 and co2.x2 < co1.x1):
return True
else:
return False
def within_y(co1, co2):
if (co1.y1 > co2.y1 and co1.y1 < co2.y2) or (co1.y2 > co2.y1 and co1.y2 < co2.y2) or
(co2.y1 > co1.y1 and co2.y1 < co1.y2) or (co2.y2 > co1.y1 and co2.y2 < co1.y1):
return True
else:
return False
def collided_left(co1, co2):
if within_y(co1, co2):
if co1.x1 <= co2.x2 and co1.x1 >= co2.x1:
return True
return False
def collided_right(co1, co2):
if within_y(co1, co2):
if co1.x2 >= co2.x1 and co1.x2 <= co2.x2:
return True
return False
def collided_top(co1, co2):
if within_x(co1, co2):
if co1.y1 <= co2.y2 and co1.y1 >= co2.y1:
return True
return False
def collided_bottom(y, co1, co2):
if within_x(co1, co2):
y_calc = co1.y2 + y
if y_calc >= co2.y1 and y_calc <= co2.y2:
return True
return False
class Sprite:
def __init__(self, game):
self.game = game
self.endgame = False
self.coordinates = None
def move(self):
pass
def coords(self):
return self.coordinates
class PlatformSprite(Sprite):
def __init__(self, game, photo_image, x, y, width, height):
Sprite.__init__(self, game)
self.photo_image = photo_image
self.image = game.canvas.create_image(x, y, image=self.photo_image,
anchor='nw')
self.coordinates = Coords(x, y, x + width, y + height)
class MovingPlatformSprite(PlatformSprite):
def __init__(self, game, photo_image, x, y, width, height):
PlatformSprite.__init__(self, game, photo_image, x, y, width, height)
self.x = 2
self.counter = 0
self.last_time = time.time()
self.width = width
self.height = height
def coords(self):
xy = self.game.canvas.coords(self.image)
self.coordinates.x1 = xy[0]
self.coordinates.y1 = xy[1]
self.coordinates.x2 = xy[0] + self.width
self.coordinates.y2 = xy[1] + self.height
return self.coordinates
def move(self):
if time.time() - self.last_time > 0.03:
self.last_time = time.time()
self.game.canvas.move(self.image, self.x, 0)
self.counter += 1
if self.counter > 20:
self.x *= -1
self.counter = 0
class DoorSprite(Sprite):
def __init__(self, game, x, y, width, height):#hei1353
Sprite.__init__(self, game)
self.closed_door = PhotoImage(file="door1.gif")
self.open_door = PhotoImage(file="door2.gif")
self.image = game.canvas.create_image(x, y, image=self.closed_door,
anchor='nw')
self.coordinates = Coords(x, y, x + (width / 2), y + height)
self.endgame = True
def opendoor(self):
self.game.canvas.itemconfig(self.image, image=self.open_door)
self.game.tk.update_idletasks()
def closedoor(self):
self.game.canvas.itemconfig(self.image, image=self.closed_door)
self.game.tk.update_idletasks()
class StickFigureSprite(Sprite):
def __init__(self, game):
Sprite.__init__(self, game)
self.images_left = [
PhotoImage(file="figure-L1.gif"),
PhotoImage(file="figure-L2.gif"),
PhotoImage(file="figure-L3.gif")
self.images_right = [
PhotoImage(file="figure-R1.gif"),
PhotoImage(file="figure-R2.gif"),
PhotoImage(file="figure-R3.gif")
self.image = game.canvas.create_image(200, 470, \
image=self.images_left[0], anchor='nw')
self.x = -2
self.y = 0
self.current_image = 0
self.current_image_add = 1
self.jump_count = 0
self.last_time = time.time()
self.coordinates = Coords()
game.canvas.bind_all('<KeyPress-Left>', self.turn_left)
game.canvas.bind_all('<KeyPress-Right>', self.turn_right)
game.canvas.bind_all('<space>', self.jump)
def turn_left(self, evt):
if self.y == 0:
self.x = -2
def turn_right(self, evt):
if self.y == 0:
self.x = 2
#brought to you by code-projects.org
def jump(self, evt):
if self.y == 0:
self.y = -4
self.jump_count = 0
def animate(self):
if self.x != 0 and self.y == 0:
if time.time() - self.last_time > 0.1:
self.last_time = time.time()
self.current_image += self.current_image_add
if self.current_image >= 2:
self.current_image_add = -1
if self.current_image <= 0:
self.current_image_add = 1
if self.x < 0:
if self.y != 0:
self.game.canvas.itemconfig(self.image,
image=self.images_left[2])
else:
self.game.canvas.itemconfig(self.image,
image=self.images_left[self.current_image])
elif self.x > 0:
if self.y != 0:
self.game.canvas.itemconfig(self.image,
image=self.images_right[2])
else:
self.game.canvas.itemconfig(self.image,
image=self.images_right[self.current_image])
def coords(self):
xy = self.game.canvas.coords(self.image)
self.coordinates.x1 = xy[0]
self.coordinates.y1 = xy[1]
self.coordinates.x2 = xy[0] + 27
self.coordinates.y2 = xy[1] + 30
return self.coordinates
def move(self):
self.animate()
if self.y < 0:
self.jump_count += 1
if self.jump_count > 20:
self.y = 4
if self.y > 0:
self.jump_count -= 1
co = self.coords()
left = True
right = True
top = True
bottom = True
falling = True
if self.y > 0 and co.y2 >= self.game.canvas_height:
self.y = 0
bottom = False
elif self.y < 0 and co.y1 <= 0:
self.y = 0
top = False
if self.x > 0 and co.x2 >= self.game.canvas_width:
self.x = 0
right = False
elif self.x < 0 and co.x1 <= 0:
self.x = 0
left = False
for sprite in self.game.sprites:
if sprite == self:
continue
sprite_co = sprite.coords()
if top and self.y < 0 and collided_top(co, sprite_co):
self.y = -self.y
top = False
if bottom and self.y > 0 and collided_bottom(self.y, co, sprite_co):
self.y = sprite_co.y1 - co.y2
if self.y < 0:
self.y = 0
bottom = False
top = False
if bottom and falling and self.y == 0 and co.y2 < self.game.canvas_height
and collided_bottom(1, co, sprite_co):
falling = False
if left and self.x < 0 and collided_left(co, sprite_co):
self.x = 0
left = False
if sprite.endgame:
self.end(sprite)
if right and self.x > 0 and collided_right(co, sprite_co):
self.x = 0
right = False
if sprite.endgame:
self.end(sprite)
if falling and bottom and self.y == 0 and co.y2 < self.game.canvas_height:
self.y = 4
self.game.canvas.move(self.image, self.x, self.y)
def end(self, sprite):
self.game.running = False
sprite.opendoor()
time.sleep(1)
self.game.canvas.itemconfig(self.image, state='hidden')
sprite.closedoor()
g = Game()
platform1 = PlatformSprite(g, PhotoImage(file = "platform1.gif"), 0, 480, 100, 10)
platform2 = PlatformSprite(g, PhotoImage(file = "platform1.gif"), 150, 440, 100, 10)
platform3 = PlatformSprite(g, PhotoImage(file = "platform1.gif"), 300, 400, 100, 10)
platform4 = PlatformSprite(g, PhotoImage(file = "platform1.gif"), 300, 160, 100, 10)
platform5 = PlatformSprite(g, PhotoImage(file = "platform2.gif"), 175, 350, 66, 10)
platform6 = PlatformSprite(g, PhotoImage(file = "platform2.gif"), 50, 300, 66, 10)
platform7 = PlatformSprite(g, PhotoImage(file = "platform2.gif"), 170, 120, 66, 10)
platform8 = PlatformSprite(g, PhotoImage(file = "platform2.gif"), 45, 60, 66, 10)
platform9 = PlatformSprite(g, PhotoImage(file = "platform3.gif"), 170, 250, 32, 10)
platform10 = PlatformSprite(g, PhotoImage(file = "platform3.gif"), 230, 200, 32, 10)
g.sprites.append(platform1)
g.sprites.append(platform2)
g.sprites.append(platform3)
g.sprites.append(platform4)
g.sprites.append(platform5)
g.sprites.append(platform6)
g.sprites.append(platform7)
g.sprites.append(platform8)
g.sprites.append(platform8)
g.sprites.append(platform9)
g.sprites.append(platform10)
door = DoorSprite(g, 45, 30, 40, 35)
g.sprites.append(door)
sf = StickFigureSprite(g)
g.sprites.append(sf)
g.mainloop()
OUTPUT:
CONCLUSION
In this article, we have created a simple Stickman game in python with the help of
the Tkinter library. You can try to make the game more interesting and challenging
by adding obstacles on the way or decreasing the health of the Stickman Game in
Python whenever it falls down on the ground. Hope this article will help you.
REFERENCES
https://www.sourcecodester.com/python
https://github.com/MvE09/Mr_Stickman-game-from-Python-for-Kids-
Jason-R.-Briggs1