Помощь с Tkinter

Рейтинг: 0Ответов: 1Опубликовано: 09.02.2023

Надо сделать, передвижение и сделать так чтоб персонаж сталкивался с кругом и на окне выводилось "Ты выйграл!". Картинки можно ставить любые.

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()

введите сюда описание изображения

Ответы

▲ 0

Как вариант:

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()