更新時間: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ù)字推盤) # 設(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對象組成的元組。
頂層設(shè)計中通過drawBoard()函數(shù)調(diào)用動態(tài)界面繪制功能,該函數(shù)在靜態(tài)界面的基礎(chǔ)上繪制界面的動態(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的基礎(chǔ)上繪制了提示信息和推盤(包括方塊和外邊框)。因為推盤由多個相似的方塊組成,所以函數(shù)中將繪制方塊的代碼封裝到了函數(shù)drawTile()中,該函數(shù)接收方塊在序列中的行、列和值,根據(jù)這些數(shù)據(jù)在窗口中繪制方塊;為精簡代碼,此處將計算方塊距離窗口原點橫縱坐標(biāo)距離的代碼封裝到了函數(shù)getLeftTopOfLeft()中。
這里暫不考慮如何實現(xiàn) drawTile()函數(shù)和getLeftTopOfTile()函數(shù),但可知此時界面處理模塊的結(jié)構(gòu)應(yīng)如圖1所示。