Помощь с Tkinter
Надо сделать, передвижение и сделать так чтоб персонаж сталкивался с кругом и на окне выводилось "Ты выйграл!". Картинки можно ставить любые.
import tkinter
import random
from tkinter import PhotoImage
import random as rd
def prepare_and_start():
global player
global circle
canvas.delete("all")
player_p = (random.randint(1, N_X - 1) * step,
random.randint(1, N_Y - 1) * step)
c_p = (random.randint(0, N_X - 1) * step,
random.randint(0, N_Y - 1) * step)
player = canvas.create_image(
(player_p[0], player_p[1]),
image=player_pic, anchor='nw')
label.config(text="Найди выход!")
master.bind("<KeyPress>", key_pressed)
circle = canvas.create_image(
(c_p[0], c_p[1]),
image=circle_pic, anchor='nw')
def move_warp(obj, move_x, move_y):
xy = canvas.coords(obj)
canvas.move(obj, move_x, move_y)
print(xy)
if xy[0] <= 0:
canvas.move(obj, WIDTH, 0)
if xy[0] >= 0:
canvas.move(obj, -WIDTH, 0)
if xy[1] <= 0:
canvas.move(obj, 0, HEIGHT)
if xy[1] >= 0:
canvas.move(obj, 0, -HEIGHT)
def key_pressed(event):
if event.keysym == 'Up':
move_warp(player, 0, -step)
if event.keysym == 'Down':
move_warp(player, 0, step)
if event.keysym == 'Right':
move_warp(player, step, 0)
if event.keysym == 'Left':
move_warp(player, -step, 0)
def quit_1():
quit()
exit()
def win():
if c_p[0] == player_p[0] or c_p[1] == player_p[1]:
quit_1()
master = tkinter.Tk()
master.title("Побег из игры")
step = 10
N_X = 50
N_Y = 50
N_X_C = 500
N_Y_C = 500
WIDTH = step * N_X
HEIGHT = step * N_Y
a = False
c_p = (rd.randint(1, N_X_C - 1),
rd.randint(1, N_Y_C - 1))
player_p = (rd.randint(1, N_X - 1),
rd.randint(1, N_Y - 1))
circle_pic = tkinter.PhotoImage(file='white circle.png')
player_pic = tkinter.PhotoImage(file='player.png')
canvas = tkinter.Canvas(master, bg='gray',
width=600, height=600)
label = tkinter.Label(master, text="Не попадись!")
restart = tkinter.Button(master, text="Начать заново", command=prepare_and_start)
restart.pack()
label.pack()
canvas.pack()
prepare_and_start()
win()
master.bind("<KeyPress>", key_pressed)
master.mainloop()
root = tkinter.Tk()
root.title('Побег из игры')
root.geometry('500x500+225+100')
txt = tkinter.Label(root, text='Ты победил')
txt.place(x=215, y=220)
root.mainloop()
Ответы (1 шт):
Автор решения: arnold
→ Ссылка
Как вариант:
import tkinter as tk
def victory():
global check
if not check:
victory_label = tk.Label(root, text="Победа!", font=("TkDefaultFont", 24))
victory_label.pack()
check = True
else:
root.after(5000, root.quit)
root = tk.Tk()
root.title("Игра в круг")
check = False
canvas = tk.Canvas(root, width=400, height=400, bg="white")
canvas.pack()
circle = canvas.create_oval(150, 150, 250, 250, fill="red")
hero = canvas.create_rectangle(0, 0, 20, 20, fill="blue")
def move_hero(event):
x1, y1, x2, y2 = canvas.coords(hero)
x, y = (x1 + x2) / 2, (y1 + y2) / 2
if event.keysym == "Up":
canvas.move(hero, 0, -5)
elif event.keysym == "Down":
canvas.move(hero, 0, 5)
elif event.keysym == "Left":
canvas.move(hero, -5, 0)
elif event.keysym == "Right":
canvas.move(hero, 5, 0)
if (x - 200) ** 2 + (y - 200) ** 2 <= 50 ** 2:
canvas.unbind("<KeyPress>")
victory()
canvas.bind_all("<KeyPress>", move_hero)
root.mainloop()
