这个程序给Python海龟模块新增了一个叫collide的方法,这样海龟就有了碰撞检测方法了,名字叫collide。
如果要检测两个海龟有没有发生碰撞那么只要用下面的代码即可(t1,t2是海龟)
t1.collide(t2),这句代码会返回两个海龟的重叠区域,是一个矩形对象。
"""
给RawTurtle类新增矩形碰撞方法.py
"""
import turtle # 导入海龟模块
from rectangle import * # 从矩形模块导入所有命令
def mouse_position(screen):
"""获取鼠标指针的坐标"""
pass
return x,y
def _collide(self,other):
"""以矩形碰撞的方式检测和另一个海龟对象有没有发生“碰撞”"""
a,b,c,d = self.screen.cv.bbox(self.turtle._item)
w = c - a # 算出宽度
h = d - b # 算出高度
rect1 = Rectangle(a,-b,w,h) # 矩形对象
a,b,c,d = self.screen.cv.bbox(other.turtle._item)
w = c - a # 算出宽度
h = d - b # 算出高度
rect2 = Rectangle(a,-b,w,h) # 矩形对象
return rect1.overlap(rect2)
turtle.RawTurtle.collide = _collide # 新增collide方法
screen = turtle.Screen() # 新建屏幕对象
blue = turtle.Turtle('square') # 新建海龟对象
blue.shapesize(4) # 把海龟变大些
blue.color('blue') # 设为蓝色的
blue.goto(-40,-40)
red = turtle.Turtle('square') # 新建红色方块
red.speed(0) # 移动速度为最快
red.penup() # 抬笔
red.shapesize(4) # 放大
red.color('red') # 红色
while True:
x,y = mouse_position(screen)
red.goto(x,y) # 红色方块跟着鼠标指针移动
r = red.collide(blue)
if r: # 如果发生了碰撞那么r不是空值,是一个矩形对象!
screen.title('重叠!' + str(r))
else:
screen.title('不重叠')
screen.update() # 刷新屏幕显示
本程序包括本人编写的rectangle类等三个py源代码文件,如果需要
需要浏览更多吗?
成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

