Могу ли я сохранить оригинальную скорость раскрытия в игре-головоломке на память на pygame медленно, а затем сделать ее быстрее, играя в игру? - PullRequest
2 голосов
/ 26 сентября 2019

Это код игры

https://inventwithpython.com/pygame/chapter3.html

В настоящее время у меня установлена ​​скорость раскрытия 1, однако это для начального раскрытия и раскрытия во время игры.В любом случае я могу сохранить начальную скорость раскрытия на уровне 1, но затем изменить скорость раскрытия во время игры на что-то более быстрое?

Чтобы сделать это, я чувствую, что мне нужно добавить строкукод под откровенной скоростью в строке 12, я просто не знаю, что должна сказать новая строка.

FPS = 30 # frames per second, the general speed of the program
WINDOWWIDTH = 640 # size of window's width in pixels
WINDOWHEIGHT = 480 # size of windows' height in pixels
REVEALSPEED = 2 # speed boxes' sliding reveals and covers
BOXSIZE = 60 # size of box height & width in pixels
GAPSIZE = 10 # size of gap between boxes in pixels
BOARDWIDTH = 8 # number of columns of icons
BOARDHEIGHT = 7 # number of rows of icons
assert (BOARDWIDTH * BOARDHEIGHT) % 2 == 0, 'Board needs to have an even number of boxes for pairs of matches.'
XMARGIN = int((WINDOWWIDTH - (BOARDWIDTH * (BOXSIZE + GAPSIZE))) / 2)
YMARGIN = int((WINDOWHEIGHT - (BOARDHEIGHT * (BOXSIZE + GAPSIZE))) / 2)

1 Ответ

3 голосов
/ 26 сентября 2019

Итак, мы хотим сделать анимацию с двумя разными скоростями, поэтому давайте сначала создадим новую глобальную переменную для этого:

...
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)

И это все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...