My python platformer

This is my platforming game which I built in 2017. It is quite simple, and uses the following method to replicate gravity.

Fall by drop speed
If I am touching platforms:
    Work out which way I am travelling and go in the opposite direction until I am not touching it.
Else:
    Increase drop speed.

Repl.it cannot simulate Tkinter, so just copy this into python and it should run. Try adding levels in create_platforms. The x is the level number, coords1 and 2 act as x1 and y1 for the rectangle, and 3 and 4 x2 and y2.

from tkinter import *
yfrom tkinter.font import Font
from time import *
window = Tk()
c = Canvas(window, width=800, height=500, bg='yellow')
c.pack()
player = c.create_polygon(90, 0, 90, 20, 110, 20, 110, 0, fill='purple')
yv = 0
coords1 = list()
coords2 = list()
coords3 = list()
coords4 = list()
recs=[]
end=False
lv=0
arrows=[False,False,False]
def kill():
    global end
    end=True
def create_platforms(x):
    global coords1,coords2,coords3,coords4,recs
    coords1 = []
    coords2 = []
    coords3 = []
    coords4 = []
    for i in recs:
        c.delete(i)
    if x == 0:
        coords1.append(90)
        coords2.append(300)
        coords3.append(300)
        coords4.append(500)
        
        coords1.append(300)
        coords2.append(270)
        coords3.append(500)
        coords4.append(500)

        coords1.append(550)
        coords2.append(270)
        coords3.append(750)
        coords4.append(500)
    if x == 1:
        coords1.append(0)
        coords2.append(0)
        coords3.append(90)
        coords4.append(500)
        
        coords1.append(90)
        coords2.append(400)
        coords3.append(120)
        coords4.append(500)

        coords1.append(200)
        coords2.append(400)
        coords3.append(300)
        coords4.append(500)

        coords1.append(400)
        coords2.append(350)
        coords3.append(500)
        coords4.append(500)

        coords1.append(600)
        coords2.append(300)
        coords3.append(700)
        coords4.append(350)

        coords1.append(600)
        coords2.append(450)
        coords3.append(800)
        coords4.append(500)
    if x == 2:
        coords1.append(90)
        coords2.append(300)
        coords3.append(110)
        coords4.append(500)
        
        coords1.append(200)
        coords2.append(270)
        coords3.append(210)
        coords4.append(500)

        coords1.append(300)
        coords2.append(400)
        coords3.append(310)
        coords4.append(500)

        coords1.append(400)
        coords2.append(350)
        coords3.append(410)
        coords4.append(500)
        
        coords1.append(500)
        coords2.append(300)
        coords3.append(510)
        coords4.append(500)

        coords1.append(600)
        coords2.append(250)
        coords3.append(800)
        coords4.append(800)
    if x == 3:
        c.create_text(400,250,text="You win!",fill="darkblue",font=Font(size=50))
        window.after(5000,kill)
        coords1.append(0)
        coords2.append(450)
        coords3.append(800)
        coords4.append(500)

        coords1.append(0)
        coords2.append(0)
        coords3.append(50)
        coords4.append(500)

        coords1.append(750)
        coords2.append(0)
        coords3.append(800)
        coords4.append(500)
    for i in range(len(coords1)):
        recs.append(c.create_rectangle(coords1[i], coords2[i], coords3[i], coords4[i], fill='darkblue', outline="darkblue"))
def gravity():
    global yv,c,player
    c.move(player, 0, yv)
    if touching_platforms():
        if yv < 0:
            rev = 0.1
        else:
            rev = -0.1
        while touching_platforms():
            c.move(player, 0, rev)
        yv = 0
    else:
        yv += 0.2
def touching_platforms():
    crds = c.coords(player)
    y = (crds[1] + crds[3])/2
    x = (crds[0] + crds[2])/2
    for i in range(len(coords1)):
        if touching_block(coords1[i], coords2[i], coords3[i], coords4[i], x, y):
            return True
    return False
def move_player():
    global yv
    if arrows[0]:
        c.move(player, -4, 0)
        while touching_platforms():
            c.move(player, 1, 0)
    if arrows[1]:
        c.move(player, 4, 0)
        while touching_platforms():
            c.move(player, -1, 0)
    if arrows[2]:
        c.move(player, 0, 1)
        if touching_platforms():
            yv=-5
        c.move(player, 0, -1)
def handleon(event):
    if event.keysym == 'Left':
        arrows[0]=True
    if event.keysym == 'Right':
        arrows[1]=True
    if event.keysym == 'Up':
        arrows[2]=True
def handleoff(event):
    if event.keysym == 'Left':
        arrows[0]=False
    if event.keysym == 'Right':
        arrows[1]=False
    if event.keysym == 'Up':
        arrows[2]=False
def dead():
    global yv,c
    if c.coords(player)[1]>500:
        x=c.create_rectangle(0,0,1000,500,fill="red")
        c.pack()
        window.update()
        sleep(0.1)
        c.delete(x)
        yv=0
        c.move(player,100-c.coords(player)[0],-c.coords(player)[1])

def won():
    global yv,c,lv
    if c.coords(player)[0]>800:
        x=c.create_rectangle(0,0,1000,500,fill="green")
        c.pack()
        window.update()
        sleep(0.1)
        c.delete(x)
        yv=0
        lv+=1
        create_platforms(lv)
        c.move(player,100-c.coords(player)[0],-c.coords(player)[1])
c.bind_all('<KeyPress>', handleon)
c.bind_all('<KeyRelease>', handleoff)
def touching_block(x1, y1, x2, y2, px, py):
    return (x1<px+20 and x2>px) and (y1<py+10 and y>py-10)
create_platforms(0)
while True:
    gravity()
    c.pack()
    move_player()
    dead()
    won()
    window.update()
    sleep(0.01)
    if end:
        break

Leave a Reply

Your email address will not be published. Required fields are marked *