更新时间:2023-07-20 来源:黑马程序员 浏览量:
界面处理模块分为静态界面绘制和动态界面绘制两个子模块。
静态界面绘制包括创建窗口和绘制游戏静态部分界面(即游戏按钮)。使用代码实现静态界面绘制函数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对象组成的元组。
顶层设计中通过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所示。