给RawTurtle类新增矩形碰撞方法

如本文章标有价格,需议价或其它事情商议请加微信scratch8

李兴球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源代码文件,如果需要请扫码下载:

VIP免费查看

已有0人支付

本站所有作品,教程等皆为原创,版权所有。只供个人及单位内部研究使用,对外展示或传播必需经本站同意,且注明来自本站。培训机构等用本站资源培训学生,需经本站授权。一旦付款,表示同意本站知识付费原则:数字商品,不支持退款。亦可直接向微信号scratch8付款购买。入住QQ群:225792826 和爱好者共同交流,并且能下载免费提供的Python资源(需提供真实姓名才可入群)
李兴球的博客_Python创意编程技术前沿_pygame » 给RawTurtle类新增矩形碰撞方法
scratch

学本领,探索更大的世界!

李兴球博客 风火轮编程主页