首頁技術文章正文

Python程序中界面處理模塊子層設計

更新時間:2023-07-20 來源:黑馬程序員 瀏覽量:

界面處理模塊分為靜態(tài)界面繪制和動態(tài)界面繪制兩個子模塊。

(1)靜態(tài)界面繪制

靜態(tài)界面繪制包括創(chuàng)建窗口和繪制游戲靜態(tài)部分界面(即游戲按鈕)。使用代碼實現(xiàn)靜態(tài)界面繪制函數(shù)drawStaticWin(),具體代碼如下:

WINWIDTH  = 640                                            # 窗口寬度
WINHEIGHT = 480                                            # 窗口高度
# 創(chuàng)建建靜態(tài)窗口
def drawStaticwin():
     # 窗口靜態(tài)部分繪制
     winSet=pygame.display.set mode((WINWIDTHWINHEIGHT))   # 創(chuàng)建窗口
     pygame.display.set caption(數(shù)字推盤)                  # 設置名字 
     image=pygame.image.load('bg.jpg')                     # 繪制背景
     winSet.blit(image, (0,0))
     #按鈕創(chuàng)建
     new surf,new rect = makeText('新游戲,BTTEXTCOLOR,
                                   BTCOLORWINWIDTH-85,WINHEIGHT-40)
     winSet.blit(new surf,new rect)
     return winSet,new surf,new rect

考慮到后續(xù)動態(tài)界面繪制部分也會使用到繪制文本的代碼,這里將文本對象的創(chuàng)建封裝成了一個函數(shù)-makeText()該函數(shù)接收文本、文本顏色、底色和繪制位置返回一個由Surface對象和 Rect對象組成的元組。

(2) 動態(tài)界面繪制

頂層設計中通過drawBoard()函數(shù)調用動態(tài)界面繪制功能,該函數(shù)在靜態(tài)界面的基礎上繪制界面的動態(tài)部分(提示信息和推盤)。游戲中的推盤實際上由方塊和外邊框組成,實現(xiàn)drawBoard()函數(shù)。具體代碼如下:

#繪制面板
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)

以上代碼在靜態(tài)界面STATICSURF的基礎上繪制了提示信息和推盤(包括方塊和外邊框)。因為推盤由多個相似的方塊組成,所以函數(shù)中將繪制方塊的代碼封裝到了函數(shù)drawTile()中,該函數(shù)接收方塊在序列中的行、列和值,根據(jù)這些數(shù)據(jù)在窗口中繪制方塊;為精簡代碼,此處將計算方塊距離窗口原點橫縱坐標距離的代碼封裝到了函數(shù)getLeftTopOfLeft()中。

這里暫不考慮如何實現(xiàn) drawTile()函數(shù)和getLeftTopOfTile()函數(shù),但可知此時界面處理模塊的結構應如圖1所示。

分享到:
在線咨詢 我要報名
和我們在線交談!