更新時間:2023-07-20 來源:黑馬程序員 瀏覽量:
界面處理模塊分為靜態(tài)界面繪制和動態(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對象組成的元組。
頂層設計中通過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所示。