Анимация в tkinter (Рамки). необходимо сделать рамки в игре, чтобы рыцарь не улетал за наше окно
from tkinter import *
import random
window = Tk()
w=600
h=600
window.geometry(str(w)+"x"+str(h))
canvas = Canvas(window, width=w, height=h)
canvas.place(in_=window, x=0, y=0)
bg_image = PhotoImage(file="bg_2.png")
class Knight:
def __init__(self):
self.x=70
self.y=h/2
self.v=0
self.photo=PhotoImage(file="knight.png")
def up (self ,event):
self.v=-3
def down(self, event):
self.v=3
def stop(self, event):
self.v=0
class Dragon:
def __init__(self):
self.x=750
self.y=random.randint(100,500)
self.v=random.randint(1,4)
self.photo=PhotoImage(file="dragon.png")
knight = Knight()
dragons=[]
for i in range(3):
dragons.append(Dragon())
def game():
canvas.delete("all")
canvas.create_image(300,300, image=bg_image)
canvas.create_image(knight.x, knight.y, image=knight.photo)
knight.y += knight.v
current_dragon=0
dragon_to_kill=-1
for dragon in dragons:
dragon.x-=dragon.v
canvas.create_image(dragon.x, dragon.y, image=dragon.photo)
if((dragon.x-knight.x)**2) + ((dragon.y-knight.y)**2)<=(96)**2:
dragon_to_kill=current_dragon
current_dragon+=1
if dragon.x <=0:
canvas.delete("all")
canvas.create_text(w // 2, h // 2, text="You Lose...", font="Verdana 42", fill="black")
break
if dragon_to_kill != -1:
del dragons [dragon_to_kill]
if len(dragons)==0:
canvas.delete("all")
canvas.create_text(w//2, h//2, text ="You Win!!!", font="Verdana 42", fill="black")
else:
window.after(5, game)
game()
window.bind("<Key-Up>", knight.up)
window.bind("<Key-Down>", knight.down)
window.bind("<KeyRelease>", knight.stop)
window.mainloop()
Ответы (1 шт):
Автор решения: udjox
→ Ссылка
from tkinter import *
import random
window = Tk()
w = 600
h = 600
window.geometry(f'{w}x{h}')
canvas = Canvas(window, width=w, height=h)
canvas.place(in_=window, x=0, y=0)
bg_photo = PhotoImage(file='bg_2.png')
class Knight:
def __init__(self):
self.x = 70
self.y = h // 2
self.v = 0
self.v_x = 0
self.photo = PhotoImage(file='cat.png')
def up(self, event):
self.v = -3
def down(self, event):
self.v = +3
def right(self, event):
self.v_x = +3
def left(self, event):
self.v_x = -3
def stop_all(self, event):
self.v = 0
self.v_x = 0
class Dragon:
def __init__(self):
self.x = random.randint(700, 1500)
self.y = random.randint(100, 500)
self.v = random.randint(1, 3)
self.photo = PhotoImage(file='dragon.png')
knight = Knight()
dragons = []
for i in range(10):
dragons.append(Dragon())
def game():
canvas.delete('all')
canvas.create_image(h // 2, w // 2, image=bg_photo)
canvas.create_image(knight.x, knight.y, image=knight.photo)
knight.y += knight.v
knight.x += knight.v_x
canvas.create_image(knight.x, knight.y, image=knight.photo)
kill_dragon = -1
for i, dragon in enumerate(dragons):
dragon.x -= dragon.v
canvas.create_image(dragon.x, dragon.y, image=dragon.photo)
if ((dragon.x - knight.x) ** 2 + (dragon.y - knight.y) ** 2) <= 95 ** 2:
kill_dragon = i
if dragon.x <= 0:
canvas.delete('all')
canvas.create_text(w // 2.3, h // 2.3, text='you lose ', font='System 42', fill='red')
break
if kill_dragon > -1:
del dragons[kill_dragon]
if len(dragons) == 0:
canvas.delete('all')
canvas.create_text(w // 2, h // 2, text='gg you win', font='System 42', fill='red')
if knight.y <= 52:
knight.y = 53
if knight.y >= 544:
knight.y = 543
if knight.x <= 50:
knight.x = 51
if knight.x >= 550:
knight.x = 551
window.after(5, game)
window.bind('<Key-Up>', knight.up)
window.bind('<Key-Down>', knight.down)
window.bind('<Key-Right>', knight.right)
window.bind('<Key-Left>', knight.left)
window.bind('<KeyRelease>', knight.stop_all)
window.resizable(height=False, width=False)
window.mainloop()