Код IT
← Каталог

Python — Tetris — DAS (Delayed Auto Shift)

Фрагмент из «Python — Tetris»: DAS (Delayed Auto Shift).

python spinoffencyclopedia9-04-razrabotka-igr-praktikum-razrabotki-igr-5 embed URL статья в энциклопедии
Python main.py
DAS_DELAY = 0.15   # пауза до автоповтора, сек
DAS_RATE = 0.05    # интервал повторных шагов

# В Game.__init__
self.das_timer = 0.0
self.das_dir = 0

def _update_das(self, dt):
    keys = pygame.key.get_pressed()
    want = (keys[pygame.K_RIGHT] - keys[pygame.K_LEFT])
    if want == 0:
        self.das_dir = 0
        self.das_timer = 0.0
        return
    if want != self.das_dir:
        self.das_dir = want
        self.das_timer = 0.0
        self.active.try_move(self.board, want, 0)
        return
    self.das_timer += dt
    interval = DAS_DELAY if self.das_timer < DAS_DELAY else DAS_RATE
    if self.das_timer >= DAS_DELAY:
        sub = self.das_timer - DAS_DELAY
        steps = int(sub / DAS_RATE)
        if steps > 0:
            for _ in range(steps):
                if not self.active.try_move(self.board, want, 0):
                    break
            self.das_timer = DAS_DELAY + (sub % DAS_RATE)
DAS_DELAY = 0.15   # пауза до автоповтора, сек
DAS_RATE = 0.05    # интервал повторных шагов

# В Game.__init__
self.das_timer = 0.0
self.das_dir = 0

def _update_das(self, dt):
    keys = pygame.key.get_pressed()
    want = (keys[pygame.K_RIGHT] - keys[pygame.K_LEFT])
    if want == 0:
        self.das_dir = 0
        self.das_timer = 0.0
        return
    if want != self.das_dir:
        self.das_dir = want
        self.das_timer = 0.0
        self.active.try_move(self.board, want, 0)
        return
    self.das_timer += dt
    interval = DAS_DELAY if self.das_timer < DAS_DELAY else DAS_RATE
    if self.das_timer >= DAS_DELAY:
        sub = self.das_timer - DAS_DELAY
        steps = int(sub / DAS_RATE)
        if steps > 0:
            for _ in range(steps):
                if not self.active.try_move(self.board, want, 0):
                    break
            self.das_timer = DAS_DELAY + (sub % DAS_RATE)