How To Make Enemy Follow Player
I found information about pygame, but i cant interpret this in tkinter. icons - https://imgur.com/a/PQx9tpW pastebin - https://pastebin.com/ykUzj9Pc def key_pressed(event): glo
Solution 1:
To follow player you have to calculate vector between enemy and player, and normalize this vector (so its lenght will be 1), and then you can multiplciate it by enemy's speed to get what distance it has to move
player_x, player_y = 0, 0
enemy_x, enemy_y = 100, 100
diff_x = player_x - enemy_x
diff_y = player_y - enemy_y
distance = (diff_x**2 + diff_y**2)**0.5 # Pythagoras: a**2 + b**2 = c**2
normal_x = diff_x/distance
normal_y = diff_y/distance
print(normal_x, normal_y)
enemy_speed = 5
enemy_move_x = enemy_speed * normal_x
enemy_move_y = enemy_speed * normal_y
print(enemy_move_x, enemy_move_y)
You may have to also check if distance is not zero because you may get ZeroDivisionError: division by zero
EDIT: Minimal working example - use keys WASD to move green circle and red circle will follow.
import tkinter as tk
import random
def follow(player_x, player_y, enemy_x, enemy_y, enemy_speed=5):
diff_x = player_x - enemy_x
diff_y = player_y - enemy_y
distance = (diff_x**2 + diff_y**2)**0.5 # Pythagoras: a**2 + b**2 = c**2
if distance <= enemy_speed:
return diff_x, diff_y
normal_x = diff_x/distance
normal_y = diff_y/distance
enemy_move_x = enemy_speed * normal_x
enemy_move_y = enemy_speed * normal_y
return enemy_move_x, enemy_move_y
def on_key_press(event):
global player_move_x
global player_move_y
if event.char == 'w':
player_move_y -= 5
if event.char == 's':
player_move_y += 5
if event.char == 'a':
player_move_x -= 5
if event.char == 'd':
player_move_x += 5
def on_key_release(event):
global player_move_x
global player_move_y
if event.char == 'w':
player_move_y -= -5
if event.char == 's':
player_move_y += -5
if event.char == 'a':
player_move_x -= -5
if event.char == 'd':
player_move_x += -5
def update_game():
global player_x
global player_y
global enemy_x
global enemy_y
player_x += player_move_x
player_y += player_move_y
canvas.move(player_id, player_move_x, player_move_y)
enemy_move_x, enemy_move_y = follow(player_x, player_y, enemy_x, enemy_y, enemy_speed)
enemy_x += enemy_move_x
enemy_y += enemy_move_y
canvas.move(enemy_id, enemy_move_x, enemy_move_y)
root.after(100, update_game)
# --- main ---
player_x = 250
player_y = 250
player_move_x = 0
player_move_y = 0
enemy_x = random.randint(0, 500)
enemy_y = random.randint(0, 500)
enemy_speed = 5
root = tk.Tk()
canvas = tk.Canvas(root, width=500, height=500, bg='gray')
canvas.pack()
root.bind('<KeyPress>', on_key_press)
root.bind('<KeyRelease>', on_key_release)
player_id = canvas.create_oval(player_x-5, player_y-5, player_x+5, player_y+5, fill='green')
enemy_id = canvas.create_oval(enemy_x-5, enemy_y-5, enemy_x+5, enemy_y+5, fill='red')
update_game()
root.mainloop()
Post a Comment for "How To Make Enemy Follow Player"