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