How do I perform a collision check?
Question: I have no clue what to do here, I want to make it so that a turtle in Python
will shoot a bullet and if it collides with the other turtle, the score goes
up. Except if I run this code, the game will crash when I shoot the bullet. So
far, I only tried it for one of the eight move commands.

    
    
    #imports turtles 
    import turtle
    import random
    #Sets screen, turtle program, and colour group
    turtle.setup(1000, 800)
    screen = turtle.Screen()
    wn = turtle.Screen()
    wn.bgcolor("springgreen")
    
    amir = turtle.Turtle() 
    amir.shape("arrow")
    amir.shapesize(1)
    amir.speed(10)
    amir.pensize (2)
    amir.color("blue")
    amir.setheading(90)
    amir.penup()
    #bullet 1
    jonafat = turtle.Turtle()
    jonafat.shape("circle")
    jonafat.shapesize(0.5)
    jonafat.speed(2)
    jonafat.pensize (1)
    jonafat.color("black")
    jonafat.penup()
    jonafat.ht()
    
    hossein = turtle.Turtle()
    hossein.shape("arrow")
    hossein.shapesize(1)
    hossein.speed(10)
    hossein.pensize (2)
    hossein.color("gold")
    hossein.setheading(90)
    hossein.penup()
    #bullet 
    jonafat2 = turtle.Turtle()
    jonafat2.shape("circle")
    jonafat2.shapesize(0.5)
    jonafat2.speed(2)
    jonafat2.pensize (1)
    jonafat2.color("black")
    jonafat2.penup()
    jonafat2.ht()
    #scoreboard
    TT = turtle.Turtle() 
    TT.ht()
    TT.penup()
    TT.goto(-500,200)
    TT.color("black")
    TT.write("0", move = False, align = "center", font = ("Arial", 20, "normal"))
    #second scoreboard
    TT = turtle.Turtle() 
    TT.ht()
    TT.penup()
    TT.goto(-500,200)
    TT.color("black")
    TT.write("0", move = False, align = "center", font = ("Arial", 20, "normal"))
    
    x = 0
    y = 0
    amirs = 2
    hosseins = 2
    auto = 15 
    vanguard = 15
    trump = 0
    time = 1
    score = 0
    panda = 295
    
    def up():
        global amir
        global x
        global amirs
        global hosseins
        amir.seth(90)
        n = 1
        for i in range(0, n):
            amir.sety(amir.ycor()+10)
            n + 1
    
    def down():
        global amir
        global x
        global amirs
        global hosseins
        amir.seth(270)
        n = 1
        for i in range(0, n):
            amir.sety(amir.ycor()-10)
            n + 1
    
    def left():
        global amir
        global x
        global amirs
        global hosseins
        amir.seth(180)
        n = 1
        for i in range(0, n):
            amir.setx(amir.xcor()-10)
            n + 1
    
    def right():
        global amir
        global x
        global amirs
        global hosseins
        amir.seth(0)
        n = 1
        for i in range(0, n):
            amir.setx(amir.xcor()+10)
            n + 1
    
    def up2():
        global hossein
        global y
        global hosseins
        hossein.seth(90)
        n = 1
        for i in range(0, n):
            hossein.sety(hossein.ycor()+10)
            n + 1
    
    def down2():
        global hossein
        global y
        global hosseins
        hossein.seth(270)
        n = 1
        for i in range(0, n):
            hossein.sety(hossein.ycor()-10)
            n + 1
    
    def left2():
        global hossein
        global y
        global hosseins
        hossein.seth(180)
        n = 1
        for i in range(0, n):
            hossein.setx(hossein.xcor()-10)
            n + 1
    
    def right2():
        global hossein
        global y
        global hosseins
        hossein.seth(0)
        n = 1
        for i in range(0, n):
            hossein.setx(hossein.xcor()+10)
            n + 1
    
    def collisionCheck(jonafat, hossein):
        crash = True
        jonafat1X = jonafat.xcor()
        jonafat1Y = jonafat.ycor()
        hossein2X = hossein.xcor()
        hossein2Y = hossein.ycor()
        jonafatPos = (int(jonafat1X), int(jonafat1Y))
        hosseinPos = (int(hossein2X), int(hossein2Y))
        if jonafatPos != hosseinPos:
            crash = False
        if jonafatPos == hosseinPos:
            crash = True
        return crash
    
    def clock():
        global time
        time = time-1
    
    def move():
        global auto
        global vanguard
        global score
        global time
        wn.ontimer(clock,1000)
        angle = amir.heading()
        jonafat.ht()
        jonafat.speed(10)
        jonafat.setpos(amir.xcor(), amir.ycor())
        if angle == 0:
            trump = 1. 
            time = time-1
            jonafat.showturtle()
            jonafat.speed(2)
            n = 1
            for i in range(0, n):
                jonafat.goto(amir.xcor()+300, amir.ycor())
                n + 1
            infLoop = 1
            while infLoop == 1:
                    if collisionCheck(jonafat, hossein) == True:
                        infLoop = 0
                        break
                        score = score + 1
                        TT.clear()
                        TT.write(score, move = False, align = "center", font = ("Arial", 20, "normal"))
    
                    if time == 0:
                        break
                        infLoop = 0
    
    
        if angle == 90:
            jonafat.showturtle()
            jonafat.speed(2)
            n = 1
            for i in range(0, n):
                jonafat.goto(amir.xcor(),amir.ycor()+300)
                n + 1
        if angle == 180:
            jonafat.showturtle()
            jonafat.speed(2)
            n = 1
            for i in range(0, n):
                jonafat.goto(amir.xcor()-300, amir.ycor())
                n + 1
        if angle == 270:
            jonafat.showturtle()
            jonafat.speed(2)
            n = 1
            for i in range(0, n):
                jonafat.goto(amir.xcor(), amir.ycor()-300)
                n + 1
    
    
    def move2():
        angle2 = hossein.heading()
        jonafat2.ht()
        jonafat2.speed(10)
        jonafat2.setpos(hossein.xcor(), hossein.ycor())
        if angle2 == 0:
            jonafat2.showturtle()
            jonafat2.speed(2)
            n = 1
            for i in range(0, n):
                jonafat2.goto(hossein.xcor()+300, hossein.ycor())
                n + 1
        if angle2 == 90:
            jonafat2.showturtle()
            jonafat2.speed(2)
            n = 1
            for i in range(0, n):
                jonafat2.goto(hossein.xcor(), hossein.ycor()+300)
                n + 1
        if angle2 == 180:
            jonafat2.showturtle()
            jonafat2.speed(2)
            n = 1
            for i in range(0, n):
                jonafat2.goto(hossein.xcor()-300, hossein.ycor())
                n + 1
        if angle2 == 270:
            jonafat2.showturtle()
            jonafat2.speed(2)
            n = 1
            for i in range(0, n):
                jonafat2.goto(hossein.xcor(), hossein.ycor()-300)
                n + 1
    
    
    
    
    
    
    
    
    wn.onkeypress(up, "w")
    wn.onkeypress(down, "s")
    wn.onkeypress(left, "a")
    wn.onkeypress(right, "d")
    wn.onkeypress(up2, "Up")
    wn.onkeypress(down2, "Down")
    wn.onkeypress(left2, "Left")
    wn.onkeypress(right2, "Right")
    wn.onkeypress(move2, "Shift_R")
    
    wn.onkeypress(move, "space")
    
    wn.listen() 
    

This is the part I have trouble with

    
    
    def collisionCheck(jonafat, hossein):
        crash = True
        jonafat1X = jonafat.xcor()
        jonafat1Y = jonafat.ycor()
        hossein2X = hossein.xcor()
        hossein2Y = hossein.ycor()
        jonafatPos = (int(jonafat1X), int(jonafat1Y))
        hosseinPos = (int(hossein2X), int(hossein2Y))
        if jonafatPos != hosseinPos:
            crash = False
        if jonafatPos == hosseinPos:
            crash = True
        return crash
    
    def clock():
        global time
        time = time-1
    
    def move():
        global auto
        global vanguard
        global score
        global time
        wn.ontimer(clock,1000)
        angle = amir.heading()
        jonafat.ht()
        jonafat.speed(10)
        jonafat.setpos(amir.xcor(), amir.ycor())
        if angle == 0:
            trump = 1. 
            time = time-1
            jonafat.showturtle()
            jonafat.speed(2)
            n = 1
            for i in range(0, n):
                jonafat.goto(amir.xcor()+300, amir.ycor())
                n + 1
            infLoop = 1
            while infLoop == 1:
                    if collisionCheck(jonafat, hossein) == True:
                        infLoop = 0
                        break
                        score = score + 1
                        TT.clear()
                        TT.write(score, move = False, align = "center", font = ("Arial", 20, "normal"))
    
                    if time == 0:
                        break
                        infLoop = 0
    


Answer: It appears your only checking if their position is the same, although two
objects can pass close to each other so that they visually collide, but aren't
on the exact same position as each other.

You'll want to take their dimensions into account to properly check for
collisions. The easiest way to check if they collide is to take the distance
between their positions and check if it's smaller than a certain value.
Although better options exist.

