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 as a function we will use the
isCollisionto return a True or False return, to do that type the following at the end of the#Define functionssection:
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 FalseSo your function uses t1 and t2 as generic terms instead of turtle and food and uses the same collision formula as before with 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