Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter
- import random
- health = 0
- N_ENEMIES = 4 # Число врагов
- N_FIRES = 6 # Число клеток, заполненных огнем
- def prepare_and_start():
- global player, exit, fires, enemies, gun, GUN_SIZE, PLAYER_HEALTH, GUN_DIRECTION, SPAWN_SIZE
- canvas.delete("all")
- player_pos = (random.randint(1, N_X - 1) * step,
- random.randint(1, N_Y - 1) * step)
- exit_pos = (random.randint(1, N_X - 1) * step,
- random.randint(1, N_Y - 1) * step)
- player = canvas.create_oval(
- (player_pos[0], player_pos[1]),
- (player_pos[0] + step, player_pos[1] + step),
- fill='green')
- exit = canvas.create_oval(
- (exit_pos[0], exit_pos[1]),
- (exit_pos[0] + step, exit_pos[1] + step),
- fill='yellow')
- fires = []
- for i in range(N_FIRES):
- fire_pos = (random.randint(1, N_X - 1) * step,
- random.randint(1, N_Y - 1) * step)
- fire = canvas.create_oval(
- (fire_pos[0], fire_pos[1]),
- (fire_pos[0] + step, fire_pos[1] + step),
- fill='red')
- fires.append(fire)
- enemies = []
- for i in range(N_ENEMIES):
- enemy_pos = (random.randint(0, N_X - 1) * step,
- random.randint(0, N_Y - 1) * step)
- enemy = canvas.create_oval(
- (enemy_pos[0], enemy_pos[1]),
- (enemy_pos[0] + step, enemy_pos[1] + step),
- fill='white')
- enemies.append((enemy, random.choice([always_right, random_move])))
- label.config(text="Найди выход!")
- master.bind("<KeyPress>", key_pressed)
- def always_right():
- return step, 0
- def random_move():
- return random.choice([(step, 0), (-step, 0), (0, step), (0, -step)])
- def move_wrap(obj, move):
- canvas.move(obj, move[0], move[1])
- x = canvas.coords(obj)[0]
- y = canvas.coords(obj)[1]
- if x < 0:
- canvas.move(obj, N_X * step, 0)
- if x >= N_X * step:
- canvas.move(obj, -N_X * step, 0)
- if y < 0:
- canvas.move(obj, 0, N_Y * step)
- if y >= N_Y * step:
- canvas.move(obj, 0, -N_Y * step)
- def do_nothing(x):
- pass
- def always_right():
- return (step, 0)
- def random_move():
- return random.choice([(step, 0), (-step, 0), (0, step), (0, -step)])
- def check_move():
- if canvas.coords(player) == canvas.coords(exit):
- label.config(text="Победа!")
- master.bind("<KeyPress>", do_nothing)
- for f in fires:
- if canvas.coords(player) == canvas.coords(f):
- label.config(text="Ты проиграл!")
- master.bind("<KeyPress>", do_nothing)
- for e in enemies:
- if canvas.coords(player) == canvas.coords(e[0]):
- label.config(text="Ты проиграл!")
- master.bind("<KeyPress>", do_nothing)
- # if canvas.coords(player) == canvas.coords(exit):
- # label.config(text="Победа!")
- # master.bind("<KeyPress>", do_nothing)
- # for f in fires:
- # if canvas.coords(player) == canvas.coords(f):
- # player_health -= 10
- # label.config(text=f"Ты проиграл! Здоровье: {player_health}")
- # if player_health <= 0:
- # label.config(text="Ты проиграл! Игра окончена.")
- # master.bind("<KeyPress>", do_nothing)
- def key_pressed(event):
- if event.keysym == 'W':
- move_wrap(player, (0, -step))
- if event.keysym == 'S':
- move_wrap(player, (0, step))
- if event.keysym == 'A':
- move_wrap(player, (-step, 0))
- if event.keysym == 'D':
- move_wrap(player, (step, 0))
- for enemy in enemies:
- direction = enemy[1]() # вызвать функцию перемещения у "врага"
- move_wrap(enemy[0], direction) # произвести перемещение
- step = 60 # Размер клетки
- N_X = 20
- N_Y = 15 # Размер сетки
- master = tkinter.Tk()
- label = tkinter.Label(master, text="Найди выход")
- label.pack()
- canvas = tkinter.Canvas(master, bg='blue',
- height=N_Y * step, width=10)
- player_pos = (random.randint(0, N_X - 1) * step,
- random.randint(0, N_Y - 1) * step)
- exit_pos = (random.randint(0, N_X - 1) * step,
- random.randint(0, N_Y - 1) * step)
- player = canvas.create_oval((player_pos[0], player_pos[1]),
- (player_pos[0] + step, player_pos[1] + step),
- fill='green')
- exit = canvas.create_oval((exit_pos[0], exit_pos[1]),
- (exit_pos[0] + step, exit_pos[1] + step),
- fill='yellow')
- label = tkinter.Label(master, text="Найди выход")
- label.pack()
- health -= 10 # decrease player health by 10 if hit by fire
- if health <= 0:
- label.config(text="Ты проиграл!")
- master.unbind("<KeyPress>")
- else:
- label.config(text=f"Твое здоровье: {health}") # update health label
- step = 60
- N_X = 10
- N_Y = 10
- canvas = tkinter.Canvas(master, bg='blue',
- width=step * N_X, height=step * N_Y)
- canvas.pack()
- restart = tkinter.Button(master, text="Начать заново",
- command=prepare_and_start)
- restart.pack()
- health = 100 # set initial player health
- player = None
- exit = None
- fires = []
- prepare_and_start()
- check_move()
- master.bind("<KeyPress>", key_pressed)
- master.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement