Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列表中的冲突检测_Python_List_Tkinter_Collision Detection - Fatal编程技术网

Python 列表中的冲突检测

Python 列表中的冲突检测,python,list,tkinter,collision-detection,Python,List,Tkinter,Collision Detection,我是碰撞检测新手,一直在和Tkinter一起开发一款砖块破坏游戏。我的每一块砖块都是单独创建的,因此我没有为30多块砖块中的每一块创建if语句,而是将它们放在一个列表中,但是当我运行程序时,碰撞检测功能不起作用。有人能帮我一下吗?我不明白代码里出了什么问题 from Tkinter import * root = Tk() drawpad = Canvas(root, width=600,height=600, background='white') player = drawpad.creat

我是碰撞检测新手,一直在和Tkinter一起开发一款砖块破坏游戏。我的每一块砖块都是单独创建的,因此我没有为30多块砖块中的每一块创建if语句,而是将它们放在一个列表中,但是当我运行程序时,碰撞检测功能不起作用。有人能帮我一下吗?我不明白代码里出了什么问题

from Tkinter import *
root = Tk()
drawpad = Canvas(root, width=600,height=600, background='white')
player = drawpad.create_rectangle(260,590,340,595, fill = "blue")
ball = drawpad.create_oval(293,576,307,590, fill = "white")
brick1 = drawpad.create_rectangle(30,20,80,50, fill='green')
brick2 = drawpad.create_rectangle(30,100,80,130, fill='green')
brick3 = drawpad.create_rectangle(30,180,80,210, fill='green')
brick4 = drawpad.create_rectangle(100,20,150,50, fill='green')
brick5 = drawpad.create_rectangle(100,100,150,130, fill='green')
brick6 = drawpad.create_rectangle(100,180,150,210, fill='green')
brick7 = drawpad.create_rectangle(170,20,220,50, fill='green')
brick8 = drawpad.create_rectangle(170,100,220,130, fill='green')
brick9 = drawpad.create_rectangle(170,180,220,210, fill='green')
brick10= drawpad.create_rectangle(240,20,290,50, fill='green')
brick11= drawpad.create_rectangle(240,100,290,130, fill='green')
brick12= drawpad.create_rectangle(240,180,290,210, fill='green')
brick13= drawpad.create_rectangle(310,20,360,50, fill='green')
brick14= drawpad.create_rectangle(310,100,360,130, fill='green')
brick15= drawpad.create_rectangle(310,180,360,210, fill='green')
brick16= drawpad.create_rectangle(380,20,430,50, fill='green')
brick17= drawpad.create_rectangle(380,100,430,130, fill='green')
brick18= drawpad.create_rectangle(380,180,430,210, fill='green')
brick19= drawpad.create_rectangle(450,20,500,50, fill='green')
brick20= drawpad.create_rectangle(450,100,500,130, fill='green')
brick21= drawpad.create_rectangle(450,180,500,210, fill='green')
brick22= drawpad.create_rectangle(520,20,570,50, fill='green')
brick23= drawpad.create_rectangle(520,100,570,130, fill='green')
brick24= drawpad.create_rectangle(520,180,570,210, fill='green')
brickA1 = drawpad.create_rectangle(60,60,110,90, fill='cyan')
brickA2 = drawpad.create_rectangle(60,140,110,170, fill='cyan')
brickA3 = drawpad.create_rectangle(130,60,180,90, fill='cyan')
brickA4 = drawpad.create_rectangle(130,140,180,170, fill='cyan')
brickA5 = drawpad.create_rectangle(200,60,250,90, fill='cyan')
brickA6 = drawpad.create_rectangle(200,140,250,170, fill='cyan')
brickA7 = drawpad.create_rectangle(270,60,320,90, fill='cyan')
brickA8 = drawpad.create_rectangle(270,140,320,170, fill='cyan')
brickA9 = drawpad.create_rectangle(340,60,390,90, fill='cyan')
brickA10= drawpad.create_rectangle(340,140,390,170, fill='cyan')
brickA11= drawpad.create_rectangle(410,60,460,90, fill='cyan')
brickA12= drawpad.create_rectangle(410,140,460,170, fill='cyan')
brickA13= drawpad.create_rectangle(480,60,530,90, fill='cyan')
brickA14= drawpad.create_rectangle(480,140,530,170, fill='cyan')
bricklist =[brick1,brick2,brick3,brick4,brick5,brick6,brick7,brick8,brick9,brick10,brick11,brick12,brick13,brick14,brick15,brick16,brick17,brick18,brick19,brick20,brick21,brick22,brick23,brick24,brickA1,brickA2,brickA3,brickA4,brickA5,brickA6,brickA7,brickA8,brickA9,brickA10,brickA11,brickA12,brickA13,brickA14]
direction = 0
import random
randAngle = 0
angle = 0

class myApp(object):
    def __init__(self, parent):
        global drawpad
        self.myParent = parent  
        self.myContainer1 = Frame(parent)
        self.myContainer1.pack()
        # Score
        self.prompt = "Score:"

        self.label1 = Label(root, text=self.prompt, width=len(self.prompt), bg='green')
        self.label1.pack()

        self.score = 0

        self.scoreTxt = Label(root, text=str(self.score), width=len(str(self.score)), bg='green')
        self.scoreTxt.pack()

        drawpad.pack()
        root.bind_all('<Key>', self.key)
        self.animate()

    def animate(self):
        global drawpad
        global ball
        global direction
        global angle
        global randAngle
        x1,y1,x2,y2 = drawpad.coords(ball)
        px1,py1,px2,py2 = drawpad.coords(player)
        if y1 <= 0:
            direction = 5
        elif x1 >= px1 and x2 <= px2 and y2 >= py1:
            direction = -5
            randAngle = random.randint(0,12)
            angle = randAngle - 6
        elif x1 <= 0 and y2 <= 600 or x2 >= 600 and y2 <= 600:
            angle = -angle

        didWeHit = self.collisionDetect()
        if didWeHit == True:
            if (x1 >= bx1 and x2 <=bx2 and y1 >= by2) or (x1 >= bx1 and x2 <=bx2 and y2 <= by1):
                direction = -direction
            if (x1 >= bx1 and y2 <= by1 and y1 >= by2) or (x2 <=bx2 and y1 >= by2 and y2 <= by1):
                angle = -angle
            didWeHit = False

        drawpad.move(ball, angle, direction)
        drawpad.after(5,self.animate)


    def key(self,event):
        global drawpad
        global player
        global ball
        global direction
        x1,y1,x2,y2 = drawpad.coords(ball)
        px1,py1,px2,py2 = drawpad.coords(player)
        if event.char == " ":
            direction = -5
        if event.char == "a":
            if x1 != 293 and y1 != 576 and x2 != 307 and y2 != 590 and px1 > 0:
                    drawpad.move(player,-8,0)
        if event.char == "d":
            if x1 != 293 and y1 != 576 and x2 != 307 and y2 != 590 and px2 < 600:
                    drawpad.move(player,8,0)

    def collisionDetect(self):
        global drawpad
        global bricklist
        global direction
        global angle
        x1,y1,x2,y2 = drawpad.coords(ball)
        for brick in bricklist:
            bx1,by1,bx2,by2 = drawpad.coords(brick)
            if x1 >= bx1 and x2 <= bx2 and y1 >= by2 and y2 <= by1:
                return True
                drawpad.delete(brick)
                self.score = self.score + 5
                self.scoreTxt.config(text=str(self.score))

app = myApp(root)
root.mainloop()
从Tkinter导入*
root=Tk()
绘图板=画布(根,宽=600,高=600,背景为白色)
player=drawpad.创建矩形(260590340595,fill=“蓝色”)
ball=绘图板。创建椭圆(293576307590,fill=“白色”)
brick1=drawpad。创建_矩形(30,20,80,50,fill='green')
brick2=绘图板。创建_矩形(30100,80130,填充为绿色)
brick3=绘图板。创建一个矩形(30180,80210,填充为绿色)
砖块4=绘图板。创建矩形(100,20150,50,填充为绿色)
brick5=绘图板。创建矩形(100100150130,填充为绿色)
brick6=绘图板。创建_矩形(100180150210,填充为绿色)
brick7=绘图板。创建_矩形(170,20220,50,填充为绿色)
brick8=绘图板。创建_矩形(17010020130,填充为绿色)
brick9=绘图板。创建_矩形(170180220210,fill='green')
brick10=绘图板。创建_矩形(240,20290,50,填充为绿色)
brick11=绘图板。创建_矩形(240100290130,填充为绿色)
brick12=绘图板。创建_矩形(240180290210,填充为绿色)
brick13=绘图板。创建_矩形(310,20360,50,填充为绿色)
brick14=绘图板。创建_矩形(310100360130,填充为绿色)
brick15=绘图板。创建_矩形(310180360210,fill='green')
brick16=绘图板。创建_矩形(380,20430,50,填充为绿色)
brick17=绘图板。创建_矩形(380100430130,填充为绿色)
brick18=绘图板。创建_矩形(380180430210,fill='green')
brick19=绘图板。创建_矩形(450,20500,50,填充为绿色)
brick20=绘图板。创建_矩形(450100500130,填充为绿色)
brick21=绘图板。创建_矩形(450180500210,填充为绿色)
brick22=绘图板。创建_矩形(520,20570,50,填充为绿色)
brick23=绘图板。创建_矩形(52010057130,填充为绿色)
brick24=绘图板。创建_矩形(520180570210,填充为绿色)
brickA1=drawpad。创建_矩形(60,60110,90,fill='cyan')
brickA2=drawpad.创建_矩形(60140110170,fill='cyan')
brickA3=drawpad。创建_矩形(130,60180,90,fill='cyan')
brickA4=drawpad.创建_矩形(130140180170,fill='cyan')
brickA5=绘图板。创建一个矩形(200,60250,90,fill='cyan')
brickA6=drawpad。创建_矩形(200140250170,fill='cyan')
brickA7=绘图板。创建一个矩形(270,60320,90,fill='cyan')
brickA8=drawpad.创建一个矩形(270140320170,fill='cyan')
brickA9=drawpad.创建一个矩形(340,60390,90,fill='cyan')
brickA10=drawpad.创建矩形(340140390170,fill='cyan')
brickA11=drawpad。创建_矩形(410,60460,90,fill='cyan')
brickA12=绘图板。创建_矩形(410140460170,fill='cyan')
brickA13=drawpad。创建_矩形(480,60530,90,fill='cyan')
brickA14=drawpad.create_矩形(480140530170,fill='cyan')
砌砖工=[砖1,砖2,砖3,砖4,砖5,砖6,砖7,砖8,砖9,砖10,砖11,砖12,砖13,砖14,砖15,砖16,砖17,砖18,砖19,砖20,砖21,砖22,砖23,砖24,砖1,砖2,砖3,砖4,砖5,砖6,砖7,砖8,砖9,砖10,砖11,砖12,砖13]
方向=0
随机输入
randAngle=0
角度=0
类myApp(对象):
定义初始化(自身,父级):
全球绘图板
self.myParent=parent
self.myContainer1=帧(父级)
self.myContainer1.pack()
#得分
self.prompt=“分数:”
self.label1=Label(根,text=self.prompt,width=len(self.prompt),bg='green')
self.label1.pack()
self.score=0
self.scoreTxt=Label(root,text=str(self.score),width=len(str(self.score)),bg='green')
self.scoreTxt.pack()
drawpad.pack()
root.bind_all(“”,self.key)
self.animate()
def动画(自):
全球绘图板
全球球
全球方向
全局角
全局随机角
x1,y1,x2,y2=牵引板坐标(球)
px1,py1,px2,py2=drawpad.coords(播放器)
如果y1=px1且x2=py1:
方向=-5
randAngle=random.randint(0,12)
角度=角度-6

collisionDetect(self)
if语句中,如果x1=bx1和x2=bx1和x2=by2和y2,则返回true,而不运行返回下面的其他3行。可能是这样吗?您是否知道画布具有确定哪些对象与另一个对象重叠的功能?您可能会发现,您可以通过调用画布的
find\u overlapping
功能来替换大量碰撞检测。