import tkinter as tk
from random import randint
from tkinter import messagebox
import sys
W=800
H=700
win=tk.Tk()
win.title("下一百层")
win.geometry(f'{W}x{H}')
cvs=tk.Canvas(win,width=W,height=H,background='#000000')
cvs.place(x=0,y=0)
bw=70
bh=10
x0=200
y0=100
mr=20
ks={}
bs=[None]*32
def move_me():
global x0,y0
if ks.get('a') and x0>0:
x0-=10
elif ks.get('d') and x0<W:
x0+=10
win.after(20,move_me)
def keyPress(e):
c=e.char
ks[c]=True
print(ks)
def keyUp(e):
c=e.char
ks[c]=False
print(ks)
def pt_ban(x,y):
cvs.create_rectangle(x-bw,y-bh,x+bw,y+bh,fill='#00ffff')
def pt_bs():
for i in bs:
if i:
x,y=i
pt_ban(x,y)
def patin_cri():
cvs.create_oval(x0-mr,y0-mr,x0+mr,y0+mr,fill='#ff0000')
def patin():
cvs.delete('all')
pt_bs()
patin_cri()
win.after(100,patin)
def create_ban():
x=randint(bw,W-bw)
y=H
for i in range(len(bs)):
if not bs[i]:
bs[i]=[x,y]
break
win.after(2000,create_ban)
def move_ban():
global x0,y0
for i in range(len(bs)):
e=bs[i]
if e:
x,y=e
y-=5
if y<0:
bs[i]=None
else:
bs[i]=[x,y]
t=False
for e in bs:
if e:
x,y=e
if x-bw<x0<x+bw and y-bh-1.5*mr<y0<y+bh+1.5*mr:
y0=y-bh-mr
t=True
break
if not t:
y0+=10
if y0<0 or y0>H:
messagebox.showinfo('Game Over','游戏结束')
x0=200
y0=100
for i in range(len(bs)):
bs[i]=None
win.after(50,move_ban)
win.bind('<KeyPress>',keyPress)
win.bind('<KeyRelease>',keyUp)
patin()
create_ban()
move_ban()
move_me()
win.mainloop()