Recently, I made a project that is basically a flappy bird (kind of) where you use arrow keys to move up, down, right, and left to dodge the obstacle, The code for moving the spike and checking the collision. But it is not working.
I tried searching the web and everything but I still couldn’t solve it. To see what I was expecting, see this project I made in scratch – https://scratch.mit.edu/projects/1050739365
from itertools import cycle
from random import randrange
from tkinter import Canvas, Tk, messagebox, font
canvas_width = 1400
canvas_height = 700
root = Tk()
root.title("Basic Jumper Game")
c = Canvas(root, width=canvas_width, height=canvas_height, background="sky blue")
c.create_rectangle(-5, canvas_height - 100, canvas_width + 5, canvas_height + 5, fill="forest green", width=0)
c.create_oval(-80, -80, 120, 120, fill='orange', width=0)
c.pack()
color_cycle = cycle(["red2", "yellow", "lime green", "deep sky blue"])
spike_score = 10
spike_speed = 5
spike_interval = 4000
jumper = c.create_rectangle(50, 547, 100, 597, fill='cyan', outline='dark turquoise', width=8)
game_font = font.nametofont("TkFixedFont")
game_font.config(size=30)
score = 0
score_text = c.create_text(575, 10, anchor="nw", font=game_font, fill="black", text="Score: " + str(score))
spikes = []
lives = 1
def create_spike():
y = randrange(0, 100)
new_spike = c.create_rectangle(1300, 600 - y, 1400, 200 - y, fill='red2', outline='red', width=4)
spikes.append(new_spike)
root.after(spike_interval, create_spike)
def move_spikes():
for spike in spikes:
(spikex, spikey, spikex2, spikey2) = c.coords(spike)
c.move(spike, -5, 0)
if spikex2 < 0:
spike_cleared(spike)
root.after(spike_speed, move_spikes)
def spike_cleared(spike):
spikes.remove(spike)
c.delete(spike)
(jumperx, jumpery, jumperx2, jumpery2) = c.coords(jumper)
(spikex, spikey, spikex2, spikey2) = c.coords(spike)
if jumper.colliderect(spike):
lose_a_life()
if lives == 0:
messagebox.showinfo("Game Over!", "Final Score: " + str(score))
root.destroy()
def lose_a_life():
global lives
lives -= 1
def move_up(event):
(x1, y1, x2, y2) = c.coords(jumper)
if y1 > 0:
c.move(jumper, 0, -20)
if y1 < 8:
c.move(jumper, 0, 20)
def move_down(event):
(x1, y1, x2, y2) = c.coords(jumper)
if y1 > 0:
c.move(jumper, 0, 20)
if y2 > 577:
c.move(jumper, 0, -20)
def move_left(event):
(x1, y1, x2, y2) = c.coords(jumper)
if x1 > 0:
c.move(jumper, -20, 0)
def move_right(event):
(x1, y1, x2, y2) = c.coords(jumper)
if x2 < canvas_width:
c.move(jumper, 20, 0)
c.bind("<Up>", move_up)
c.bind("<Down>", move_down)
c.bind("<Left>", move_left)
c.bind("<Right>", move_right)
c.focus_set()
root.after(1000, create_spike)
root.after(1000, move_spikes)
root.mainloop()
New contributor
vasu Reddy is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.