给RawTurtle类新增矩形碰撞方法

李兴球Python给RawTurtle类新增矩形碰撞方法

李兴球Python给RawTurtle类新增矩形碰撞方法


这个程序给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资源。)

关于李兴球

李兴球的博客是Python创意编程原创博客
此条目发表在python, tkinter, turtle分类目录,贴了, , 标签。将固定链接加入收藏夹。

发表回复