美文网首页Pygame101
001 Memory Puzzle - step6 绘制盖子

001 Memory Puzzle - step6 绘制盖子

作者: 爱学习的洋仔 | 来源:发表于2019-08-19 15:25 被阅读0次
    绘制盖子

    这一节,我们的任务是给图形绘制盖子,这个问题分为2个部分:

    1. 如何判断一个图形组里的哪个图形需要盖子
    2. 如何绘制盖子

    先来看第一个问题:如何判断一个图形组里的哪个图形需要盖子

    在游戏开始时, 所有的图形都有盖子, 随着玩家的操作, 有些图形对被找到, 盖子被打开, 这就需要一直记录每个位置的盖子信息, 我们通过一个和图形组对应的二维数组来完成, 二维数组记录了一些布尔值, 如果是True, 就是盖子被打开, 如果是False就需要盖子。
    在游戏开始时,我们使用一个函数来产生盖子信息:

    def generateRevealedBoxesData(val):
        revealedBoxes = []
        for i in range(BOARD_WIDTH):
            revealedBoxes.append([val] * BOARD_HEIGHT)
        return revealedBoxes
    

    通过使用 revealedBoxes = generateRevealedBoxesData(False) 命令, 就可以在游戏开始时创建一个所有盖子都盖上的状态, 然后在游戏中, 可以修改某个盖子的状态: revealedBoxes[boxx][boxy] = True

    下面是第二个问题:如何绘制盖子

    首先,我们定义盖子颜色为白色:
    BOXCOLOR = WHITE # 定义盖子颜色为白色
    然后,我们根据图形的行列位置找到它的屏幕坐标
    left, top = leftTopCoordsOfBox(boxx, boxy)
    最后,我们使用pygame.draw.rect来绘制盖子
    pygame.draw.rect(displaysurf, BOXCOLOR, (left, top, BOXSIZE, BOXSIZE))


    有了包含是否需要绘制盖子的二维数组,知道了如何绘制盖子,我们要修改之前创建的drawBoard函数,使它可以根据数组信息绘制盖子/图形:

    def drawBoard(displaysurf, board, revealed):
        # 根据信息绘制图形/盖子
        for boxx in range(BOARD_WIDTH):
            for boxy in range(BOARD_HEIGHT):
                left, top = leftTopCoordsOfBox(boxx, boxy)
                if not revealed[boxx][boxy]:    # 在这里进行判断,是否需要绘制盖子
                    pygame.draw.rect(displaysurf, BOXCOLOR, (left, top, BOXSIZE, BOXSIZE))
                else:
                    shape, color = getShapeAndColor(board, boxx, boxy)
                    drawIcon(displaysurf, shape, color, boxx, boxy)
    

    最后,修改mian函数,进行测试:

    def main():
        pygame.init()
        fpsclock = pygame.time.Clock()
        displaysurf = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
    
        pygame.display.set_caption("Memory Game")
    
        displaysurf.fill(BGCOLOR)
    
        board = getRandomizedBoard()
        # 创建包含盖子信息的二维数组
        revealedBoxes = generateRevealedBoxesData(False)
    
        while True:
            displaysurf.fill(BGCOLOR)
            for event in pygame.event.get():
                if event.type == QUIT:
                    pygame.quit()
                    sys.exit()
    
            drawBoard(displaysurf, board, revealedBoxes)
    
            pygame.display.update()
            fpsclock.tick(FPS)
    

    相关文章

      网友评论

        本文标题:001 Memory Puzzle - step6 绘制盖子

        本文链接:https://www.haomeiwen.com/subject/duossctx.html