乌龟图形应用程序中的线程非常缓慢

发布于 2025-01-31 17:36:32 字数 21460 浏览 3 评论 0原文

我真的不确定我是否正确使用线程,因为我只是开始使用它们,但是使用线程库,我已经设置了一个线程并将其链接到函数,但是由于某种原因,函数在线程内部运行速度非常慢。与主要代码相比。我正在使用线程来使用time.sleep()函数,同时可以输入和处理其他内容(因为time.sleep停止整个程序在等待的持续时间)。对不起,对于长代码,但这是:

import time
import threading
import turtle
import random

wn = turtle.Screen()
tetris = turtle.Turtle()
tetris.speed(0)
wn.tracer(0)
grid = []
tetriminos = ['t','l','j','i','s','z','o']

def time_count():
    while True:
        down()
        time.sleep(1)

t1 = threading.Thread(target=time_count)
t1.start()

#current tetrimino
class currenttetrimino():
    def __init__(self,tet,rot,centre,centreb):
        self.tet = tet
        self.rot = rot
        self.centre = centre
        self.centreb = centreb
curtet = currenttetrimino('t','1',0,0)

class square():
    def __init__(self, falling, block, color):
        self.falling = falling
        self.block = block
        self.color = color
for i in range(12):
    grid.append([])
for i in range(12):
    for j in range(25):
        grid[i].append(square(False, False, 'gray'))

def gridsquare(color):
    tetris.setheading(0)
    tetris.color(color)
    tetris.begin_fill()
    for i in range(4):
        tetris.forward(20)
        tetris.right(90)
    tetris.end_fill()
    tetris.color('black')

def refreshGrid():
    tetris.clear()
    for i in range(12):
        for j in range(25):
            tetris.pu()
            tetris.goto(i * 20 - 120, j * 20 - 250)
            tetris.pd()
            if grid[i][j].block == True:
                gridsquare(grid[i][j].color)
            elif grid[i][j].falling == True:
                gridsquare(grid[i][j].color)
            else:
                gridsquare('gray')

def left():
    ok = True
    for i in range(12):
        for j in range(25):
            if grid[i][j].falling == True:
                if grid[i - 1][j].block == True:
                    ok = False
    if ok == True:
        for i in range(12):
            for j in range(25):
                if grid[i][j].falling == True:
                    grid[i][j].falling = False
                    grid[i - 1][j].falling = True
                    grid[i - 1][j].color = grid[i][j].color
        curtet.centre -= 1
        refreshGrid()

def right():
    ok = True
    for i in range(12):
        for j in range(25):
            if grid[i][j].falling == True:
                if grid[i + 1][j].block == True:
                    ok = False
    if ok == True:
        for i in range(12):
            for j in range(25):
                if grid[11 - i][j].falling == True:
                    grid[11 - i][j].falling = False
                    grid[11 - i + 1][j].falling = True
                    grid[11 - i + 1][j].color = grid[11 - i][j].color
        curtet.centre += 1
        refreshGrid()

def down():
    ok = True
    for i in range(12):
        for j in range(25):
            if grid[i][j].falling == True:
                if grid[i][j - 1].block == True:
                    ok = False
    if ok == True:
        for i in range(12):
            for j in range(25):
                if grid[i][j].falling == True:
                    grid[i][j].falling = False
                    grid[i][j - 1].falling = True
                    grid[i][j - 1].color = grid[i][j].color
        curtet.centreb -= 1
        refreshGrid()
    else:
        for i in range(12):
            for j in range(25):
                if grid[i][j].falling == True:
                    grid[i][j].falling = False
                    grid[i][j].block = True
        lineClearCheck()
        refreshGrid()
        newTetrimino()

def instantDrop():
    ok = True
    for i in range(12):
        for j in range(25):
            if grid[i][j].falling == True:
                if grid[i][j - 1].block == True:
                    ok = False
    if ok == True:
        for i in range(12):
            for j in range(25):
                if grid[i][j].falling == True:
                    grid[i][j].falling = False
                    grid[i][j - 1].falling = True
                    grid[i][j - 1].color = grid[i][j].color
        curtet.centreb -= 1
        instantDrop()
    else:
        for i in range(12):
            for j in range(25):
                if grid[i][j].falling == True:
                    grid[i][j].falling = False
                    grid[i][j].block = True
        lineClearCheck()
        refreshGrid()
        newTetrimino()

def lineClearCheck():
    for i in range(24):
        ok = True
        for j in range(10):
            if grid[j][i + 1].block == False:
                ok = False
        if ok == True:
            lineClear(i)


def lineClear(y):
    y += 1
    for i in range(10):
        grid[i + 1][y].block = False
    for i in range(10):
        for j in range(24):
            if j > y and grid[i + 1][j].block == True:
                grid[i + 1][j].block = False
                grid[i + 1][j - 1].block = True
                grid[i + 1][j - 1].color = grid[i + 1][j].color
    refreshGrid()
    lineClearCheck()

def rotate():
    if curtet.tet == 't':
        if curtet.rot == 1:
            if grid[curtet.centre][curtet.centreb - 1].block != True:
                curtet.rot += 1
                grid[curtet.centre - 1][curtet.centreb].falling = False
                grid[curtet.centre][curtet.centreb - 1].falling = True
                grid[curtet.centre][curtet.centreb - 1].color = grid[curtet.centre - 1][curtet.centreb].color
        elif curtet.rot == 2:
            if grid[curtet.centre - 1][curtet.centreb].block != True:
                curtet.rot += 1
                grid[curtet.centre][curtet.centreb + 1].falling = False
                grid[curtet.centre - 1][curtet.centreb].falling = True
                grid[curtet.centre - 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb + 1].color
        elif curtet.rot == 3:
            if grid[curtet.centre][curtet.centreb + 1].block != True:
                curtet.rot += 1
                grid[curtet.centre + 1][curtet.centreb].falling = False
                grid[curtet.centre][curtet.centreb + 1].falling = True
                grid[curtet.centre][curtet.centreb + 1].color = grid[curtet.centre + 1][curtet.centreb].color
        elif curtet.rot == 4:
            if grid[curtet.centre + 1][curtet.centreb].block != True:
                curtet.rot = 1
                grid[curtet.centre][curtet.centreb - 1].falling = False
                grid[curtet.centre + 1][curtet.centreb].falling = True
                grid[curtet.centre + 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb - 1].color
    elif curtet.tet == 'i':
        if curtet.rot == 1:
            if grid[curtet.centre][curtet.centreb + 1].block != True and grid[curtet.centre][curtet.centreb - 1].block != True and grid[curtet.centre][curtet.centreb - 2].block != True:
                curtet.rot += 1
                grid[curtet.centre - 1][curtet.centreb].falling = False
                grid[curtet.centre - 2][curtet.centreb].falling = False
                grid[curtet.centre + 1][curtet.centreb].falling = False
                grid[curtet.centre][curtet.centreb + 1].falling = True
                grid[curtet.centre][curtet.centreb - 1].falling = True
                grid[curtet.centre][curtet.centreb - 2].falling = True
                grid[curtet.centre][curtet.centreb + 1].color = grid[curtet.centre - 1][curtet.centreb].color
                grid[curtet.centre][curtet.centreb - 1].color = grid[curtet.centre - 2][curtet.centreb].color
                grid[curtet.centre][curtet.centreb - 2].color = grid[curtet.centre + 1][curtet.centreb].color
        elif curtet.rot == 2:
            if grid[curtet.centre - 1][curtet.centreb].block != True and grid[curtet.centre - 2][curtet.centreb].block != True and grid[curtet.centre + 1][curtet.centreb].block != True:
                curtet.rot = 1
                grid[curtet.centre][curtet.centreb + 1].falling = False
                grid[curtet.centre][curtet.centreb - 2].falling = False
                grid[curtet.centre][curtet.centreb - 1].falling = False
                grid[curtet.centre - 1][curtet.centreb].falling = True
                grid[curtet.centre - 2][curtet.centreb].falling = True
                grid[curtet.centre + 1][curtet.centreb].falling = True
                grid[curtet.centre - 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb + 1].color
                grid[curtet.centre - 2][curtet.centreb].color = grid[curtet.centre][curtet.centreb - 2].color
                grid[curtet.centre + 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb - 1].color
    elif curtet.tet == 'l':
        if curtet.rot == 1:
            if grid[curtet.centre][curtet.centreb + 1].block != True and grid[curtet.centre][curtet.centreb - 1].block != True and grid[curtet.centre + 1][curtet.centreb - 1].block != True:
                curtet.rot += 1
                grid[curtet.centre - 1][curtet.centreb].falling = False
                grid[curtet.centre + 1][curtet.centreb].falling = False
                grid[curtet.centre + 1][curtet.centreb + 1].falling = False
                grid[curtet.centre][curtet.centreb + 1].falling = True
                grid[curtet.centre][curtet.centreb - 1].falling = True
                grid[curtet.centre + 1][curtet.centreb - 1].falling = True
                grid[curtet.centre][curtet.centreb + 1].color = grid[curtet.centre - 1][curtet.centreb].color
                grid[curtet.centre][curtet.centreb - 1].color = grid[curtet.centre + 1][curtet.centreb].color
                grid[curtet.centre + 1][curtet.centreb - 1].color = grid[curtet.centre + 1][curtet.centreb + 1].color
        elif curtet.rot == 2:
            if grid[curtet.centre + 1][curtet.centreb].block != True and grid[curtet.centre - 1][curtet.centreb].block != True and grid[curtet.centre - 1][curtet.centreb - 1].block != True:
                curtet.rot += 1
                grid[curtet.centre][curtet.centreb + 1].falling = False
                grid[curtet.centre][curtet.centreb - 1].falling = False
                grid[curtet.centre + 1][curtet.centreb - 1].falling = False
                grid[curtet.centre + 1][curtet.centreb].falling = True
                grid[curtet.centre - 1][curtet.centreb].falling = True
                grid[curtet.centre - 1][curtet.centreb - 1].falling = True
                grid[curtet.centre + 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb + 1].color
                grid[curtet.centre - 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb - 1].color
                grid[curtet.centre - 1][curtet.centreb - 1].color = grid[curtet.centre + 1][curtet.centreb - 1].color
        elif curtet.rot == 3:
            if grid[curtet.centre][curtet.centreb + 1].block != True and grid[curtet.centre][curtet.centreb - 1].block != True and grid[curtet.centre - 1][curtet.centreb + 1].block != True:
                curtet.rot += 1
                grid[curtet.centre + 1][curtet.centreb].falling = False
                grid[curtet.centre - 1][curtet.centreb].falling = False
                grid[curtet.centre - 1][curtet.centreb - 1].falling = False
                grid[curtet.centre][curtet.centreb + 1].falling = True
                grid[curtet.centre][curtet.centreb - 1].falling = True
                grid[curtet.centre - 1][curtet.centreb + 1].falling = True
                grid[curtet.centre][curtet.centreb + 1].color = grid[curtet.centre + 1][curtet.centreb].color
                grid[curtet.centre][curtet.centreb - 1].color = grid[curtet.centre - 1][curtet.centreb].color
                grid[curtet.centre - 1][curtet.centreb + 1].color = grid[curtet.centre - 1][curtet.centreb - 1].color
        elif curtet.rot == 4:
            if grid[curtet.centre + 1][curtet.centreb].block != True and grid[curtet.centre - 1][curtet.centreb].block != True and grid[curtet.centre + 1][curtet.centreb + 1].block != True:
                curtet.rot = 1
                grid[curtet.centre][curtet.centreb + 1].falling = False
                grid[curtet.centre][curtet.centreb - 1].falling = False
                grid[curtet.centre - 1][curtet.centreb + 1].falling = False
                grid[curtet.centre + 1][curtet.centreb].falling = True
                grid[curtet.centre - 1][curtet.centreb].falling = True
                grid[curtet.centre + 1][curtet.centreb + 1].falling = True
                grid[curtet.centre + 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb + 1].color
                grid[curtet.centre - 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb - 1].color
                grid[curtet.centre + 1][curtet.centreb + 1].color = grid[curtet.centre - 1][curtet.centreb + 1].color
    elif curtet.tet == 'j':
        if curtet.rot == 1:
            if grid[curtet.centre][curtet.centreb + 1].block != True and grid[curtet.centre][curtet.centreb - 1].block != True and grid[curtet.centre + 1][curtet.centreb + 1].block != True:
                curtet.rot += 1
                grid[curtet.centre - 1][curtet.centreb].falling = False
                grid[curtet.centre + 1][curtet.centreb].falling = False
                grid[curtet.centre - 1][curtet.centreb + 1].falling = False
                grid[curtet.centre][curtet.centreb + 1].falling = True
                grid[curtet.centre][curtet.centreb - 1].falling = True
                grid[curtet.centre + 1][curtet.centreb + 1].falling = True
                grid[curtet.centre][curtet.centreb + 1].color = grid[curtet.centre - 1][curtet.centreb].color
                grid[curtet.centre][curtet.centreb - 1].color = grid[curtet.centre + 1][curtet.centreb].color
                grid[curtet.centre + 1][curtet.centreb + 1].color = grid[curtet.centre - 1][curtet.centreb + 1].color
        elif curtet.rot == 2:
            if grid[curtet.centre + 1][curtet.centreb].block != True and grid[curtet.centre - 1][curtet.centreb].block != True and grid[curtet.centre + 1][curtet.centreb - 1].block != True:
                curtet.rot += 1
                grid[curtet.centre][curtet.centreb + 1].falling = False
                grid[curtet.centre][curtet.centreb - 1].falling = False
                grid[curtet.centre + 1][curtet.centreb + 1].falling = False
                grid[curtet.centre + 1][curtet.centreb].falling = True
                grid[curtet.centre - 1][curtet.centreb].falling = True
                grid[curtet.centre + 1][curtet.centreb - 1].falling = True
                grid[curtet.centre + 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb + 1].color
                grid[curtet.centre - 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb - 1].color
                grid[curtet.centre + 1][curtet.centreb - 1].color = grid[curtet.centre + 1][curtet.centreb + 1].color
        elif curtet.rot == 3:
            if grid[curtet.centre][curtet.centreb + 1].block != True and grid[curtet.centre][curtet.centreb - 1].block != True and grid[curtet.centre - 1][curtet.centreb - 1].block != True:
                curtet.rot += 1
                grid[curtet.centre + 1][curtet.centreb].falling = False
                grid[curtet.centre - 1][curtet.centreb].falling = False
                grid[curtet.centre + 1][curtet.centreb - 1].falling = False
                grid[curtet.centre][curtet.centreb + 1].falling = True
                grid[curtet.centre][curtet.centreb - 1].falling = True
                grid[curtet.centre - 1][curtet.centreb - 1].falling = True
                grid[curtet.centre][curtet.centreb + 1].color = grid[curtet.centre + 1][curtet.centreb].color
                grid[curtet.centre][curtet.centreb - 1].color = grid[curtet.centre - 1][curtet.centreb].color
                grid[curtet.centre - 1][curtet.centreb - 1].color = grid[curtet.centre + 1][curtet.centreb - 1].color
        elif curtet.rot == 4:
            if grid[curtet.centre + 1][curtet.centreb].block != True and grid[curtet.centre - 1][curtet.centreb].block != True and grid[curtet.centre - 1][curtet.centreb + 1].block != True:
                curtet.rot = 1
                grid[curtet.centre][curtet.centreb + 1].falling = False
                grid[curtet.centre][curtet.centreb - 1].falling = False
                grid[curtet.centre - 1][curtet.centreb - 1].falling = False
                grid[curtet.centre + 1][curtet.centreb].falling = True
                grid[curtet.centre - 1][curtet.centreb].falling = True
                grid[curtet.centre - 1][curtet.centreb + 1].falling = True
                grid[curtet.centre + 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb + 1].color
                grid[curtet.centre - 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb - 1].color
                grid[curtet.centre - 1][curtet.centreb + 1].color = grid[curtet.centre - 1][curtet.centreb - 1].color
    elif curtet.tet == 'z':
        if curtet.rot == 1:
            if grid[curtet.centre + 1][curtet.centreb + 1].block != True and grid[curtet.centre][curtet.centreb - 1].block != True:
                curtet.rot += 1
                grid[curtet.centre - 1][curtet.centreb + 1].falling = False
                grid[curtet.centre][curtet.centreb + 1].falling = False
                grid[curtet.centre][curtet.centreb - 1].falling = True
                grid[curtet.centre + 1][curtet.centreb + 1].falling = True
                grid[curtet.centre][curtet.centreb - 1].color = grid[curtet.centre][curtet.centreb + 1].color
                grid[curtet.centre + 1][curtet.centreb + 1].color = grid[curtet.centre - 1][curtet.centreb + 1].color
        elif curtet.rot == 2:
            if grid[curtet.centre - 1][curtet.centreb + 1].block != True and grid[curtet.centre][curtet.centreb + 1].block != True:
                curtet.rot = 1
                grid[curtet.centre + 1][curtet.centreb + 1].falling = False
                grid[curtet.centre][curtet.centreb - 1].falling = False
                grid[curtet.centre - 1][curtet.centreb + 1].falling = True
                grid[curtet.centre][curtet.centreb + 1].falling = True
                grid[curtet.centre][curtet.centreb + 1].color = grid[curtet.centre][curtet.centreb - 1].color
                grid[curtet.centre - 1][curtet.centreb + 1].color = grid[curtet.centre + 1][curtet.centreb + 1].color
    elif curtet.tet == 's':
        if curtet.rot == 1:
            if grid[curtet.centre + 1][curtet.centreb - 1].block != True and grid[curtet.centre + 1][curtet.centreb].block != True:
                curtet.rot += 1
                grid[curtet.centre + 1][curtet.centreb + 1].falling = False
                grid[curtet.centre - 1][curtet.centreb].falling = False
                grid[curtet.centre + 1][curtet.centreb].falling = True
                grid[curtet.centre + 1][curtet.centreb - 1].falling = True
                grid[curtet.centre + 1][curtet.centreb].color = grid[curtet.centre - 1][curtet.centreb].color
                grid[curtet.centre + 1][curtet.centreb - 1].color = grid[curtet.centre + 1][curtet.centreb + 1].color
        elif curtet.rot == 2:
            if grid[curtet.centre + 1][curtet.centreb + 1].block != True and grid[curtet.centre - 1][curtet.centreb].block != True:
                curtet.rot = 1
                grid[curtet.centre + 1][curtet.centreb].falling = False
                grid[curtet.centre + 1][curtet.centreb - 1].falling = False
                grid[curtet.centre + 1][curtet.centreb + 1].falling = True
                grid[curtet.centre - 1][curtet.centreb].falling = True
                grid[curtet.centre + 1][curtet.centreb + 1].color = grid[curtet.centre + 1][curtet.centreb].color
                grid[curtet.centre - 1][curtet.centreb].color = grid[curtet.centre + 1][curtet.centreb - 1].color
    refreshGrid()


def tetrimino(a1,a2,b1,b2,c1,c2,d1,d2,color):
    grid[a1][a2].falling = True
    grid[b1][b2].falling = True
    grid[c1][c2].falling = True
    grid[d1][d2].falling = True
    grid[a1][a2].color = color
    grid[b1][b2].color = color
    grid[c1][c2].color = color
    grid[d1][d2].color = color

def newTetrimino():
    tet = tetriminos[random.randint(0, 6)]
    curtet.tet = tet
    curtet.rot = 1
    #'t','l','j','i','s','z','o'
    #middle top - 5, 24
    curtet.centre = 5
    curtet.centreb = 23
    if tet == 'z':
        tetrimino(5,24,5,23,4,24,6,23,'lime green')
    elif tet == 's':
        tetrimino(5,24,5,23,4,23,6,24,'red')
    elif tet == 't':
        tetrimino(5,23,4,23,6,23,5,24,'dark magenta')
    elif tet == 'l':
        tetrimino(5,23,4,23,6,23,6,24,'dark orange')
    elif tet == 'j':
        tetrimino(5,23,4,23,6,23,4,24,'blue')
    elif tet == 'i':
        tetrimino(4,24,5,24,6,24,7,24,'cyan')
        curtet.centre = 6
        curtet.centreb = 24
    elif tet == 'o':
        tetrimino(5,24,6,24,5,23,6,23,'gold')
    refreshGrid()

newTetrimino()
for i in range(25):
    grid[0][i].block = True
    grid[0][i].color = 'black'
for i in range(25):
    grid[11][i].block = True
    grid[11][i].color = 'black'
for i in range(12):
    grid[i][0].block = True
    grid[i][0].color = 'black'

refreshGrid()
wn.listen()
wn.onkeypress(left,'a')
wn.onkeypress(right,'d')
wn.onkeypress(down,'s')
wn.onkeypress(rotate,'w')
wn.onkeypress(instantDrop,'space')
wn.mainloop()

应该发生什么:每1秒钟,它运行down()函数

发生什么:由于某种原因,它运行速度非常慢(您可以删除线程和运行它并按下“ S”,以查看它应该是什么样的)。

I'm really not sure if I'm using threads right because I just started using them but using the threading library, I have set up a thread and linked it to a function, but for some reason that function runs very slow inside the thread compared to in the main code. I am using threading to be able to use the time.sleep() function at the same time as being able to input and process other things (since time.sleep halts the entire program for the duration that it is waiting). Sorry for long code but here it is:

import time
import threading
import turtle
import random

wn = turtle.Screen()
tetris = turtle.Turtle()
tetris.speed(0)
wn.tracer(0)
grid = []
tetriminos = ['t','l','j','i','s','z','o']

def time_count():
    while True:
        down()
        time.sleep(1)

t1 = threading.Thread(target=time_count)
t1.start()

#current tetrimino
class currenttetrimino():
    def __init__(self,tet,rot,centre,centreb):
        self.tet = tet
        self.rot = rot
        self.centre = centre
        self.centreb = centreb
curtet = currenttetrimino('t','1',0,0)

class square():
    def __init__(self, falling, block, color):
        self.falling = falling
        self.block = block
        self.color = color
for i in range(12):
    grid.append([])
for i in range(12):
    for j in range(25):
        grid[i].append(square(False, False, 'gray'))

def gridsquare(color):
    tetris.setheading(0)
    tetris.color(color)
    tetris.begin_fill()
    for i in range(4):
        tetris.forward(20)
        tetris.right(90)
    tetris.end_fill()
    tetris.color('black')

def refreshGrid():
    tetris.clear()
    for i in range(12):
        for j in range(25):
            tetris.pu()
            tetris.goto(i * 20 - 120, j * 20 - 250)
            tetris.pd()
            if grid[i][j].block == True:
                gridsquare(grid[i][j].color)
            elif grid[i][j].falling == True:
                gridsquare(grid[i][j].color)
            else:
                gridsquare('gray')

def left():
    ok = True
    for i in range(12):
        for j in range(25):
            if grid[i][j].falling == True:
                if grid[i - 1][j].block == True:
                    ok = False
    if ok == True:
        for i in range(12):
            for j in range(25):
                if grid[i][j].falling == True:
                    grid[i][j].falling = False
                    grid[i - 1][j].falling = True
                    grid[i - 1][j].color = grid[i][j].color
        curtet.centre -= 1
        refreshGrid()

def right():
    ok = True
    for i in range(12):
        for j in range(25):
            if grid[i][j].falling == True:
                if grid[i + 1][j].block == True:
                    ok = False
    if ok == True:
        for i in range(12):
            for j in range(25):
                if grid[11 - i][j].falling == True:
                    grid[11 - i][j].falling = False
                    grid[11 - i + 1][j].falling = True
                    grid[11 - i + 1][j].color = grid[11 - i][j].color
        curtet.centre += 1
        refreshGrid()

def down():
    ok = True
    for i in range(12):
        for j in range(25):
            if grid[i][j].falling == True:
                if grid[i][j - 1].block == True:
                    ok = False
    if ok == True:
        for i in range(12):
            for j in range(25):
                if grid[i][j].falling == True:
                    grid[i][j].falling = False
                    grid[i][j - 1].falling = True
                    grid[i][j - 1].color = grid[i][j].color
        curtet.centreb -= 1
        refreshGrid()
    else:
        for i in range(12):
            for j in range(25):
                if grid[i][j].falling == True:
                    grid[i][j].falling = False
                    grid[i][j].block = True
        lineClearCheck()
        refreshGrid()
        newTetrimino()

def instantDrop():
    ok = True
    for i in range(12):
        for j in range(25):
            if grid[i][j].falling == True:
                if grid[i][j - 1].block == True:
                    ok = False
    if ok == True:
        for i in range(12):
            for j in range(25):
                if grid[i][j].falling == True:
                    grid[i][j].falling = False
                    grid[i][j - 1].falling = True
                    grid[i][j - 1].color = grid[i][j].color
        curtet.centreb -= 1
        instantDrop()
    else:
        for i in range(12):
            for j in range(25):
                if grid[i][j].falling == True:
                    grid[i][j].falling = False
                    grid[i][j].block = True
        lineClearCheck()
        refreshGrid()
        newTetrimino()

def lineClearCheck():
    for i in range(24):
        ok = True
        for j in range(10):
            if grid[j][i + 1].block == False:
                ok = False
        if ok == True:
            lineClear(i)


def lineClear(y):
    y += 1
    for i in range(10):
        grid[i + 1][y].block = False
    for i in range(10):
        for j in range(24):
            if j > y and grid[i + 1][j].block == True:
                grid[i + 1][j].block = False
                grid[i + 1][j - 1].block = True
                grid[i + 1][j - 1].color = grid[i + 1][j].color
    refreshGrid()
    lineClearCheck()

def rotate():
    if curtet.tet == 't':
        if curtet.rot == 1:
            if grid[curtet.centre][curtet.centreb - 1].block != True:
                curtet.rot += 1
                grid[curtet.centre - 1][curtet.centreb].falling = False
                grid[curtet.centre][curtet.centreb - 1].falling = True
                grid[curtet.centre][curtet.centreb - 1].color = grid[curtet.centre - 1][curtet.centreb].color
        elif curtet.rot == 2:
            if grid[curtet.centre - 1][curtet.centreb].block != True:
                curtet.rot += 1
                grid[curtet.centre][curtet.centreb + 1].falling = False
                grid[curtet.centre - 1][curtet.centreb].falling = True
                grid[curtet.centre - 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb + 1].color
        elif curtet.rot == 3:
            if grid[curtet.centre][curtet.centreb + 1].block != True:
                curtet.rot += 1
                grid[curtet.centre + 1][curtet.centreb].falling = False
                grid[curtet.centre][curtet.centreb + 1].falling = True
                grid[curtet.centre][curtet.centreb + 1].color = grid[curtet.centre + 1][curtet.centreb].color
        elif curtet.rot == 4:
            if grid[curtet.centre + 1][curtet.centreb].block != True:
                curtet.rot = 1
                grid[curtet.centre][curtet.centreb - 1].falling = False
                grid[curtet.centre + 1][curtet.centreb].falling = True
                grid[curtet.centre + 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb - 1].color
    elif curtet.tet == 'i':
        if curtet.rot == 1:
            if grid[curtet.centre][curtet.centreb + 1].block != True and grid[curtet.centre][curtet.centreb - 1].block != True and grid[curtet.centre][curtet.centreb - 2].block != True:
                curtet.rot += 1
                grid[curtet.centre - 1][curtet.centreb].falling = False
                grid[curtet.centre - 2][curtet.centreb].falling = False
                grid[curtet.centre + 1][curtet.centreb].falling = False
                grid[curtet.centre][curtet.centreb + 1].falling = True
                grid[curtet.centre][curtet.centreb - 1].falling = True
                grid[curtet.centre][curtet.centreb - 2].falling = True
                grid[curtet.centre][curtet.centreb + 1].color = grid[curtet.centre - 1][curtet.centreb].color
                grid[curtet.centre][curtet.centreb - 1].color = grid[curtet.centre - 2][curtet.centreb].color
                grid[curtet.centre][curtet.centreb - 2].color = grid[curtet.centre + 1][curtet.centreb].color
        elif curtet.rot == 2:
            if grid[curtet.centre - 1][curtet.centreb].block != True and grid[curtet.centre - 2][curtet.centreb].block != True and grid[curtet.centre + 1][curtet.centreb].block != True:
                curtet.rot = 1
                grid[curtet.centre][curtet.centreb + 1].falling = False
                grid[curtet.centre][curtet.centreb - 2].falling = False
                grid[curtet.centre][curtet.centreb - 1].falling = False
                grid[curtet.centre - 1][curtet.centreb].falling = True
                grid[curtet.centre - 2][curtet.centreb].falling = True
                grid[curtet.centre + 1][curtet.centreb].falling = True
                grid[curtet.centre - 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb + 1].color
                grid[curtet.centre - 2][curtet.centreb].color = grid[curtet.centre][curtet.centreb - 2].color
                grid[curtet.centre + 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb - 1].color
    elif curtet.tet == 'l':
        if curtet.rot == 1:
            if grid[curtet.centre][curtet.centreb + 1].block != True and grid[curtet.centre][curtet.centreb - 1].block != True and grid[curtet.centre + 1][curtet.centreb - 1].block != True:
                curtet.rot += 1
                grid[curtet.centre - 1][curtet.centreb].falling = False
                grid[curtet.centre + 1][curtet.centreb].falling = False
                grid[curtet.centre + 1][curtet.centreb + 1].falling = False
                grid[curtet.centre][curtet.centreb + 1].falling = True
                grid[curtet.centre][curtet.centreb - 1].falling = True
                grid[curtet.centre + 1][curtet.centreb - 1].falling = True
                grid[curtet.centre][curtet.centreb + 1].color = grid[curtet.centre - 1][curtet.centreb].color
                grid[curtet.centre][curtet.centreb - 1].color = grid[curtet.centre + 1][curtet.centreb].color
                grid[curtet.centre + 1][curtet.centreb - 1].color = grid[curtet.centre + 1][curtet.centreb + 1].color
        elif curtet.rot == 2:
            if grid[curtet.centre + 1][curtet.centreb].block != True and grid[curtet.centre - 1][curtet.centreb].block != True and grid[curtet.centre - 1][curtet.centreb - 1].block != True:
                curtet.rot += 1
                grid[curtet.centre][curtet.centreb + 1].falling = False
                grid[curtet.centre][curtet.centreb - 1].falling = False
                grid[curtet.centre + 1][curtet.centreb - 1].falling = False
                grid[curtet.centre + 1][curtet.centreb].falling = True
                grid[curtet.centre - 1][curtet.centreb].falling = True
                grid[curtet.centre - 1][curtet.centreb - 1].falling = True
                grid[curtet.centre + 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb + 1].color
                grid[curtet.centre - 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb - 1].color
                grid[curtet.centre - 1][curtet.centreb - 1].color = grid[curtet.centre + 1][curtet.centreb - 1].color
        elif curtet.rot == 3:
            if grid[curtet.centre][curtet.centreb + 1].block != True and grid[curtet.centre][curtet.centreb - 1].block != True and grid[curtet.centre - 1][curtet.centreb + 1].block != True:
                curtet.rot += 1
                grid[curtet.centre + 1][curtet.centreb].falling = False
                grid[curtet.centre - 1][curtet.centreb].falling = False
                grid[curtet.centre - 1][curtet.centreb - 1].falling = False
                grid[curtet.centre][curtet.centreb + 1].falling = True
                grid[curtet.centre][curtet.centreb - 1].falling = True
                grid[curtet.centre - 1][curtet.centreb + 1].falling = True
                grid[curtet.centre][curtet.centreb + 1].color = grid[curtet.centre + 1][curtet.centreb].color
                grid[curtet.centre][curtet.centreb - 1].color = grid[curtet.centre - 1][curtet.centreb].color
                grid[curtet.centre - 1][curtet.centreb + 1].color = grid[curtet.centre - 1][curtet.centreb - 1].color
        elif curtet.rot == 4:
            if grid[curtet.centre + 1][curtet.centreb].block != True and grid[curtet.centre - 1][curtet.centreb].block != True and grid[curtet.centre + 1][curtet.centreb + 1].block != True:
                curtet.rot = 1
                grid[curtet.centre][curtet.centreb + 1].falling = False
                grid[curtet.centre][curtet.centreb - 1].falling = False
                grid[curtet.centre - 1][curtet.centreb + 1].falling = False
                grid[curtet.centre + 1][curtet.centreb].falling = True
                grid[curtet.centre - 1][curtet.centreb].falling = True
                grid[curtet.centre + 1][curtet.centreb + 1].falling = True
                grid[curtet.centre + 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb + 1].color
                grid[curtet.centre - 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb - 1].color
                grid[curtet.centre + 1][curtet.centreb + 1].color = grid[curtet.centre - 1][curtet.centreb + 1].color
    elif curtet.tet == 'j':
        if curtet.rot == 1:
            if grid[curtet.centre][curtet.centreb + 1].block != True and grid[curtet.centre][curtet.centreb - 1].block != True and grid[curtet.centre + 1][curtet.centreb + 1].block != True:
                curtet.rot += 1
                grid[curtet.centre - 1][curtet.centreb].falling = False
                grid[curtet.centre + 1][curtet.centreb].falling = False
                grid[curtet.centre - 1][curtet.centreb + 1].falling = False
                grid[curtet.centre][curtet.centreb + 1].falling = True
                grid[curtet.centre][curtet.centreb - 1].falling = True
                grid[curtet.centre + 1][curtet.centreb + 1].falling = True
                grid[curtet.centre][curtet.centreb + 1].color = grid[curtet.centre - 1][curtet.centreb].color
                grid[curtet.centre][curtet.centreb - 1].color = grid[curtet.centre + 1][curtet.centreb].color
                grid[curtet.centre + 1][curtet.centreb + 1].color = grid[curtet.centre - 1][curtet.centreb + 1].color
        elif curtet.rot == 2:
            if grid[curtet.centre + 1][curtet.centreb].block != True and grid[curtet.centre - 1][curtet.centreb].block != True and grid[curtet.centre + 1][curtet.centreb - 1].block != True:
                curtet.rot += 1
                grid[curtet.centre][curtet.centreb + 1].falling = False
                grid[curtet.centre][curtet.centreb - 1].falling = False
                grid[curtet.centre + 1][curtet.centreb + 1].falling = False
                grid[curtet.centre + 1][curtet.centreb].falling = True
                grid[curtet.centre - 1][curtet.centreb].falling = True
                grid[curtet.centre + 1][curtet.centreb - 1].falling = True
                grid[curtet.centre + 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb + 1].color
                grid[curtet.centre - 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb - 1].color
                grid[curtet.centre + 1][curtet.centreb - 1].color = grid[curtet.centre + 1][curtet.centreb + 1].color
        elif curtet.rot == 3:
            if grid[curtet.centre][curtet.centreb + 1].block != True and grid[curtet.centre][curtet.centreb - 1].block != True and grid[curtet.centre - 1][curtet.centreb - 1].block != True:
                curtet.rot += 1
                grid[curtet.centre + 1][curtet.centreb].falling = False
                grid[curtet.centre - 1][curtet.centreb].falling = False
                grid[curtet.centre + 1][curtet.centreb - 1].falling = False
                grid[curtet.centre][curtet.centreb + 1].falling = True
                grid[curtet.centre][curtet.centreb - 1].falling = True
                grid[curtet.centre - 1][curtet.centreb - 1].falling = True
                grid[curtet.centre][curtet.centreb + 1].color = grid[curtet.centre + 1][curtet.centreb].color
                grid[curtet.centre][curtet.centreb - 1].color = grid[curtet.centre - 1][curtet.centreb].color
                grid[curtet.centre - 1][curtet.centreb - 1].color = grid[curtet.centre + 1][curtet.centreb - 1].color
        elif curtet.rot == 4:
            if grid[curtet.centre + 1][curtet.centreb].block != True and grid[curtet.centre - 1][curtet.centreb].block != True and grid[curtet.centre - 1][curtet.centreb + 1].block != True:
                curtet.rot = 1
                grid[curtet.centre][curtet.centreb + 1].falling = False
                grid[curtet.centre][curtet.centreb - 1].falling = False
                grid[curtet.centre - 1][curtet.centreb - 1].falling = False
                grid[curtet.centre + 1][curtet.centreb].falling = True
                grid[curtet.centre - 1][curtet.centreb].falling = True
                grid[curtet.centre - 1][curtet.centreb + 1].falling = True
                grid[curtet.centre + 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb + 1].color
                grid[curtet.centre - 1][curtet.centreb].color = grid[curtet.centre][curtet.centreb - 1].color
                grid[curtet.centre - 1][curtet.centreb + 1].color = grid[curtet.centre - 1][curtet.centreb - 1].color
    elif curtet.tet == 'z':
        if curtet.rot == 1:
            if grid[curtet.centre + 1][curtet.centreb + 1].block != True and grid[curtet.centre][curtet.centreb - 1].block != True:
                curtet.rot += 1
                grid[curtet.centre - 1][curtet.centreb + 1].falling = False
                grid[curtet.centre][curtet.centreb + 1].falling = False
                grid[curtet.centre][curtet.centreb - 1].falling = True
                grid[curtet.centre + 1][curtet.centreb + 1].falling = True
                grid[curtet.centre][curtet.centreb - 1].color = grid[curtet.centre][curtet.centreb + 1].color
                grid[curtet.centre + 1][curtet.centreb + 1].color = grid[curtet.centre - 1][curtet.centreb + 1].color
        elif curtet.rot == 2:
            if grid[curtet.centre - 1][curtet.centreb + 1].block != True and grid[curtet.centre][curtet.centreb + 1].block != True:
                curtet.rot = 1
                grid[curtet.centre + 1][curtet.centreb + 1].falling = False
                grid[curtet.centre][curtet.centreb - 1].falling = False
                grid[curtet.centre - 1][curtet.centreb + 1].falling = True
                grid[curtet.centre][curtet.centreb + 1].falling = True
                grid[curtet.centre][curtet.centreb + 1].color = grid[curtet.centre][curtet.centreb - 1].color
                grid[curtet.centre - 1][curtet.centreb + 1].color = grid[curtet.centre + 1][curtet.centreb + 1].color
    elif curtet.tet == 's':
        if curtet.rot == 1:
            if grid[curtet.centre + 1][curtet.centreb - 1].block != True and grid[curtet.centre + 1][curtet.centreb].block != True:
                curtet.rot += 1
                grid[curtet.centre + 1][curtet.centreb + 1].falling = False
                grid[curtet.centre - 1][curtet.centreb].falling = False
                grid[curtet.centre + 1][curtet.centreb].falling = True
                grid[curtet.centre + 1][curtet.centreb - 1].falling = True
                grid[curtet.centre + 1][curtet.centreb].color = grid[curtet.centre - 1][curtet.centreb].color
                grid[curtet.centre + 1][curtet.centreb - 1].color = grid[curtet.centre + 1][curtet.centreb + 1].color
        elif curtet.rot == 2:
            if grid[curtet.centre + 1][curtet.centreb + 1].block != True and grid[curtet.centre - 1][curtet.centreb].block != True:
                curtet.rot = 1
                grid[curtet.centre + 1][curtet.centreb].falling = False
                grid[curtet.centre + 1][curtet.centreb - 1].falling = False
                grid[curtet.centre + 1][curtet.centreb + 1].falling = True
                grid[curtet.centre - 1][curtet.centreb].falling = True
                grid[curtet.centre + 1][curtet.centreb + 1].color = grid[curtet.centre + 1][curtet.centreb].color
                grid[curtet.centre - 1][curtet.centreb].color = grid[curtet.centre + 1][curtet.centreb - 1].color
    refreshGrid()


def tetrimino(a1,a2,b1,b2,c1,c2,d1,d2,color):
    grid[a1][a2].falling = True
    grid[b1][b2].falling = True
    grid[c1][c2].falling = True
    grid[d1][d2].falling = True
    grid[a1][a2].color = color
    grid[b1][b2].color = color
    grid[c1][c2].color = color
    grid[d1][d2].color = color

def newTetrimino():
    tet = tetriminos[random.randint(0, 6)]
    curtet.tet = tet
    curtet.rot = 1
    #'t','l','j','i','s','z','o'
    #middle top - 5, 24
    curtet.centre = 5
    curtet.centreb = 23
    if tet == 'z':
        tetrimino(5,24,5,23,4,24,6,23,'lime green')
    elif tet == 's':
        tetrimino(5,24,5,23,4,23,6,24,'red')
    elif tet == 't':
        tetrimino(5,23,4,23,6,23,5,24,'dark magenta')
    elif tet == 'l':
        tetrimino(5,23,4,23,6,23,6,24,'dark orange')
    elif tet == 'j':
        tetrimino(5,23,4,23,6,23,4,24,'blue')
    elif tet == 'i':
        tetrimino(4,24,5,24,6,24,7,24,'cyan')
        curtet.centre = 6
        curtet.centreb = 24
    elif tet == 'o':
        tetrimino(5,24,6,24,5,23,6,23,'gold')
    refreshGrid()

newTetrimino()
for i in range(25):
    grid[0][i].block = True
    grid[0][i].color = 'black'
for i in range(25):
    grid[11][i].block = True
    grid[11][i].color = 'black'
for i in range(12):
    grid[i][0].block = True
    grid[i][0].color = 'black'

refreshGrid()
wn.listen()
wn.onkeypress(left,'a')
wn.onkeypress(right,'d')
wn.onkeypress(down,'s')
wn.onkeypress(rotate,'w')
wn.onkeypress(instantDrop,'space')
wn.mainloop()

What is supposed to happen: every 1 second it runs the down() function

What happens: it runs it very slow for some reason (you can remove the thread and run it and press 's' to see what it is supposed to be like).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文