Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter
- import random
- e = []
- def prepare_and_start():
- global player, exit, fires, enemies, e
- canvas.delete("all")
- player_pos = (random.randint(0, N_X) * 30,
- random.randint(0, N_Y) * 30)
- player = canvas.create_image(player_pos, image=player_pic, anchor='nw')
- exit_pos = (random.randint(0, N_X) * 30,
- random.randint(0, N_Y) * 30)
- exit = canvas.create_image(exit_pos, image=exit_pic, anchor='nw')
- N_FIRES = 12 #Число клеток, заполненных огнем
- fires = []
- f = []
- qe = 0
- for i in range(N_FIRES):
- fire_pos = (random.randint(0, N_X) * 30,
- random.randint(0, N_Y) * 30)
- fire = canvas.create_image(fire_pos, image=fire_pic, anchor='nw')
- fires.append(fire)
- f.append(fire_pos)
- N_ENEMIES = 8 #Число врагов
- enemies = []
- qa = 0
- k = 0
- rt = 0
- for i in range(N_ENEMIES):
- enemy_pos = (random.randint(0, N_X) * 30,
- random.randint(0, N_Y) * 30)
- enemy = canvas.create_image(enemy_pos, image=enemy_pic, anchor='nw')
- enemies.append((enemy, random.choice([always_right, random_move])))
- e.append(enemy_pos)
- for i in e:
- if e.count(i) != 1:
- qa += e.count(i) - 1
- while k != qa:
- enemy_pos = (random.randint(0, N_X) * 30,
- random.randint(0, N_Y) * 30)
- k += 1
- if enemy_pos in e:
- k -= 1
- else:
- enemy = canvas.create_image(enemy_pos, image=enemy_pic, anchor='nw')
- enemies.append((enemy, random.choice([always_right, random_move])))
- e.append(enemy_pos)
- for i in f:
- if f.count(i) != 1:
- qe += f.count(i) - 1
- while rt != qe:
- fire_pos = (random.randint(0, N_X) * 30,
- random.randint(0, N_Y) * 30)
- rt += 1
- if fire_pos in f:
- rt -= 1
- else:
- fire = canvas.create_image(enemy_pos, image=enemy_pic, anchor='nw')
- fires.append((enemy, random.choice([always_right, random_move])))
- f.append(fire_pos)
- 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 do_nothing(x):
- pass
- def move_wrap(obj, move):
- canvas.move(obj, move[0], move[1])
- if canvas.coords(obj)[0] < 0:
- canvas.move(obj, 300, 0)
- if canvas.coords(obj)[0] > 300:
- canvas.move(obj, -300, 0)
- if canvas.coords(obj)[1] > 300:
- canvas.move(obj, 0, -300)
- if canvas.coords(obj)[1] < 0:
- canvas.move(obj, 0, 300)
- 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)
- def key_pressed(event):
- global e
- if event.keysym == 'Up':
- move_wrap(player, (0, -step))
- if event.keysym == 'Down':
- move_wrap(player, (0, step))
- if event.keysym == 'Left':
- move_wrap(player, (-step, 0))
- if event.keysym == 'Right':
- move_wrap(player, (step, 0))
- check_move()
- # for enemy in enemies:
- # direction = enemy[1]() # вызвать функцию перемещения у "врага"
- # move_wrap(enemy[0], direction) # произвести перемещение
- # print(e)
- for enemy in enemies:
- direction = enemy[1]()
- move_wrap(enemy[0], direction)
- list_ = [(step, 0), (-step, 0), (0, step), (0, -step)]
- predictions = []
- for i in list_:
- predictions.append([canvas.coords(enemy[0])[0] + i[0], canvas.coords(enemy[0])[1] + i[1]])
- for i in predictions:
- if i[0] - canvas.coords(player)[0] > i[1] - canvas.coords(player)[1]:
- if predictions.index(i) == 1:
- move_wrap(enemy[0], (step, 0))
- elif predictions.index(i) == 2:
- move_wrap(enemy[0], (-step, 0))
- elif predictions.index(i) == 3:
- move_wrap(enemy[0], (0, step))
- elif predictions.index(i) == 4:
- move_wrap(enemy[0], (0, -step))
- predictions.clear()
- master = tkinter.Tk()
- step = 15
- N_X = 10
- N_Y = 10
- canvas = tkinter.Canvas(master, bg='blue',
- width=30 * N_X, height=30 * N_Y)
- player_pos = (random.randint(0, N_X) * 30,
- random.randint(0, N_Y) * 30)
- exit_pos = (random.randint(0, N_X) * 30,
- random.randint(0, N_Y) * 30)
- player = canvas.create_oval((player_pos[0], player_pos[1]),
- (player_pos[0] + 30, player_pos[1] + 30),
- fill='green')
- exit = canvas.create_oval((exit_pos[0], exit_pos[1]),
- (exit_pos[0] + 30, exit_pos[1] + 30),
- fill='yellow')
- label = tkinter.Label(master, text="Найди выход")
- label.pack()
- player_pic = tkinter.PhotoImage(file="player_pic.png")
- exit_pic = tkinter.PhotoImage(file="exit_pic.png")
- fire_pic = tkinter.PhotoImage(file="fire_pic.png")
- enemy_pic = tkinter.PhotoImage(file="enemy_pic.png")
- master.bind("<KeyPress>", key_pressed)
- canvas = tkinter.Canvas(master, bg='blue',
- height=N_X * 30, width=N_Y * 30)
- canvas.pack()
- restart = tkinter.Button(master, text="Начать заново", command=prepare_and_start)
- restart.pack()
- prepare_and_start()
- master.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement