Итак, мы хотим сделать анимацию с двумя разными скоростями, поэтому давайте сначала создадим новую глобальную переменную для этого:
...
WINDOWHEIGHT = 480 # size of windows' height in pixels
# ADD THIS
INITIALREVEALSPEED = 1 # speed boxes' sliding reveals and covers AT THE START OF THE GAME
REVEALSPEED = 8 # speed boxes' sliding reveals and covers
BOXSIZE = 40 # size of box height & width in pixels
...
Поиском REVEALSPEED
мы увидим, что анимация обрабатывается вrevealBoxesAnimation
и coverBoxesAnimation
функции.Они используют константу REVEALSPEED
(не совсем постоянную, но эй), но мы хотим, чтобы скорость была динамической, поэтому давайте просто передадим скорость, которую мы хотим использовать в качестве параметра.Измените функции на:
def revealBoxesAnimation(board, boxesToReveal, speed=REVEALSPEED):
# Do the "box reveal" animation.
for coverage in range(BOXSIZE, (-speed) - 1, -speed):
drawBoxCovers(board, boxesToReveal, coverage)
def coverBoxesAnimation(board, boxesToCover, speed=REVEALSPEED):
# Do the "box cover" animation.
for coverage in range(0, BOXSIZE + speed, speed):
drawBoxCovers(board, boxesToCover, coverage)
Мы по-прежнему используем REVEALSPEED
в качестве значения по умолчанию, поэтому нам не нужно изменять каждый вызов метода.
Поскольку мы хотим только замедлитьанимация в начале игры, нам нужно только изменить вызовы методов, которые происходят в начале.Если мы ищем места, где используется revealBoxesAnimation
, мы находим функцию startGameAnimation
.Давайте изменим это на:
def startGameAnimation(board):
# Randomly reveal the boxes 8 at a time.
coveredBoxes = generateRevealedBoxesData(False)
boxes = []
for x in range(BOARDWIDTH):
for y in range(BOARDHEIGHT):
boxes.append( (x, y) )
random.shuffle(boxes)
boxGroups = splitIntoGroupsOf(8, boxes)
drawBoard(board, coveredBoxes)
for boxGroup in boxGroups:
revealBoxesAnimation(board, boxGroup, INITIALREVEALSPEED)
coverBoxesAnimation(board, boxGroup, INITIALREVEALSPEED)
И это все.