Загрузка данных


import tkinter as tk

class MarioGame:
    def __init__(self, root):
        self.root = root
        self.root.title("Tkinter Mario")
        
        # Настройки экрана
        self.canvas = tk.Canvas(root, width=800, height=400, bg="skyblue")
        self.canvas.pack()

        # Параметры игрока
        self.mario = self.canvas.create_rectangle(50, 300, 90, 340, fill="red")
        self.vx = 0  # Скорость по X
        self.vy = 0  # Скорость по Y
        self.gravity = 0.8
        self.on_ground = False

        # Платформа (для примера)
        self.platform = self.canvas.create_rectangle(300, 250, 500, 280, fill="gray")

        # Управление
        self.root.bind("<KeyPress>", self.start_move)
        self.root.bind("<KeyRelease>", self.stop_move)

        self.update()

    def start_move(self, event):
        if event.keysym == "Left": self.vx = -5
        if event.keysym == "Right": self.vx = 5
        if event.keysym == "space" and self.on_ground:
            self.vy = -15
            self.on_ground = False

    def stop_move(self, event):
        if event.keysym in ["Left", "Right"]:
            self.vx = 0

    def update(self):
        # Применяем гравитацию
        self.vy += self.gravity
        self.canvas.move(self.mario, self.vx, self.vy)
        
        # Координаты Марио
        x1, y1, x2, y2 = self.canvas.coords(self.mario)

        # Проверка пола
        if y2 >= 380:
            self.canvas.move(self.mario, 0, 380 - y2)
            self.vy = 0
            self.on_ground = True
            
        # Проверка платформы (упрощенная)
        overlap = self.canvas.find_overlapping(x1, y1, x2, y2)
        if self.platform in overlap and self.vy > 0:
            self.canvas.move(self.mario, 0, 250 - y2)
            self.vy = 0
            self.on_ground = True

        # Отрисовка земли
        self.canvas.create_rectangle(0, 380, 800, 400, fill="brown", tags="floor")
        
        self.root.after(20, self.update)

root = tk.Tk()
game = MarioGame(root)
root.mainloop()