首页技术文章正文

Python程序中界面处理模块子层设计

更新时间:2023-07-20 来源:黑马程序员 浏览量:

界面处理模块分为静态界面绘制和动态界面绘制两个子模块。

(1)静态界面绘制

静态界面绘制包括创建窗口和绘制游戏静态部分界面(即游戏按钮)。使用代码实现静态界面绘制函数drawStaticWin(),具体代码如下:

WINWIDTH  = 640                                            # 窗口宽度
WINHEIGHT = 480                                            # 窗口高度
# 创建建静态窗口
def drawStaticwin():
     # 窗口静态部分绘制
     winSet=pygame.display.set mode((WINWIDTHWINHEIGHT))   # 创建窗口
     pygame.display.set caption(数字推盘)                  # 设置名字 
     image=pygame.image.load('bg.jpg')                     # 绘制背景
     winSet.blit(image, (0,0))
     #按钮创建
     new surf,new rect = makeText('新游戏,BTTEXTCOLOR,
                                   BTCOLORWINWIDTH-85,WINHEIGHT-40)
     winSet.blit(new surf,new rect)
     return winSet,new surf,new rect

考虑到后续动态界面绘制部分也会使用到绘制文本的代码,这里将文本对象的创建封装成了一个函数-makeText()该函数接收文本、文本颜色、底色和绘制位置返回一个由Surface对象和 Rect对象组成的元组。

(2) 动态界面绘制

顶层设计中通过drawBoard()函数调用动态界面绘制功能,该函数在静态界面的基础上绘制界面的动态部分(提示信息和推盘)。游戏中的推盘实际上由方块和外边框组成,实现drawBoard()函数。具体代码如下:

#绘制面板
def drawBoard(board,msg):
    WINSET.blit(STATICSURF, (0,0))
    if msg:                               #提示信息
        msgSurf,msgRect = makeText (msg,MSGCOLOR,None, 5,5)
        pygame.image.save (msgSurf,imsg.png')
        imgSurf = pygame.image.load('msg.png')
        WINSET.blit(imgSurf,msgRect)
    for i in range(len(board)):           #绘制方块序列
        for jin range(len(board[0])):
           if board[i][j]:
               drawTile(i,,board[i][j])
    #绘制外边框
    left,top= getLeftTopofTile(0,0)
    width = COL * BLOCKSIZE
    height = ROW *BLOCKSIZE
    pygame.draw.rect(WINSET,BDCOLOR, (left - 5,top - 5, width + 11, height + 11),4)

以上代码在静态界面STATICSURF的基础上绘制了提示信息和推盘(包括方块和外边框)。因为推盘由多个相似的方块组成,所以函数中将绘制方块的代码封装到了函数drawTile()中,该函数接收方块在序列中的行、列和值,根据这些数据在窗口中绘制方块;为精简代码,此处将计算方块距离窗口原点横纵坐标距离的代码封装到了函数getLeftTopOfLeft()中。

这里暂不考虑如何实现 drawTile()函数和getLeftTopOfTile()函数,但可知此时界面处理模块的结构应如图1所示。

分享到:
在线咨询 我要报名
和我们在线交谈!