Collisions become a function
You have collision checking working, but as we add more cabbages, it makes the code easier if you convert your existing collision code to a function.
Step 1.
To create this function, we will use the isCollision to return a True or False value. To do that, type the following at the end of the #Define functions section:
def isCollision(t1, t2):
d = math.sqrt(math.pow(t1.xcor()-t2.xcor(),2) + math.pow(t1.ycor()-t2.ycor(),2))
if d < 20:
return True
else:
return FalseYour function uses t1 and t2 as generic terms instead of turtle and food. It uses the same collision formula as before, featuring an if statement that returns a True value if they are in the same location (collide) and a False value when they don’t.
Step 2.
Now you need to update the code within the while True loop # Collision checking section to look like:
# Collision checking
if isCollision(player, food):
food.setposition(random.randint(-290, 290), random.randint(-290, 290))Step 3.
Save your game as kbgame5 and run your module.
Your code should now look like this:
#Turtle Graphics Game
import turtle
import math
import random
#Set up screen
turtle.setup(650,650)
wn = turtle.Screen()
wn.bgcolor("Navy")
#Draw border
mypen = turtle.Turtle()
mypen.color("white")
mypen.penup()
mypen.setposition(-300,-300)
mypen.pendown()
mypen.pensize(3)
for side in range(4):
mypen.forward(600)
mypen.left(90)
mypen.hideturtle()
#Create player turtle
player = turtle.Turtle()
player.color("darkorange")
player.shape("turtle")
player.penup()
player.speed(0)
#Create food
food = turtle.Turtle()
food.color("lightgreen")
food.shape("circle")
food.penup()
food.speed(0)
food.setposition(random.randint(-290, 290), random.randint(-290, 290))
#Set speed variable
speed = 1
#Define functions
def turn_left():
player.left(30)
def turn_right():
player.right(30)
def increase_speed():
global speed
speed += 1
def isCollision(t1, t2):
d = math.sqrt(math.pow(t1.xcor()-t2.xcor(),2) + math.pow(t1.ycor()-t2.ycor(),2))
if d < 20:
return True
else:
return False
#Set keyboard bindings
turtle.listen()
turtle.onkey(turn_left, "Left")
turtle.onkey(turn_right, "Right")
turtle.onkey(increase_speed, "Up")
while True:
player.forward(speed)
#Boundary Checking x coordinate
if player.xcor() > 290 or player.xcor() < -290:
player.right(180)
#Boundary Checking y coordinate
if player.ycor() > 290 or player.ycor() < -290:
player.right(180)
#Collision checking
if isCollision(player, food):
food.setposition(random.randint(-290, 290), random.randint(-290, 290))Time to celebrate
Congratulations Module 5 Completed