這一節(jié)氯葬,我們的任務(wù)是給圖形繪制蓋子谚殊,這個(gè)問(wèn)題分為2個(gè)部分:
- 如何判斷一個(gè)圖形組里的哪個(gè)圖形需要蓋子
- 如何繪制蓋子
先來(lái)看第一個(gè)問(wèn)題:如何判斷一個(gè)圖形組里的哪個(gè)圖形需要蓋子
在游戲開(kāi)始時(shí), 所有的圖形都有蓋子, 隨著玩家的操作, 有些圖形對(duì)被找到, 蓋子被打開(kāi), 這就需要一直記錄每個(gè)位置的蓋子信息, 我們通過(guò)一個(gè)和圖形組對(duì)應(yīng)的二維數(shù)組來(lái)完成, 二維數(shù)組記錄了一些布爾值, 如果是True, 就是蓋子被打開(kāi), 如果是False就需要蓋子。
在游戲開(kāi)始時(shí)仇参,我們使用一個(gè)函數(shù)來(lái)產(chǎn)生蓋子信息:
def generateRevealedBoxesData(val):
revealedBoxes = []
for i in range(BOARD_WIDTH):
revealedBoxes.append([val] * BOARD_HEIGHT)
return revealedBoxes
通過(guò)使用 revealedBoxes = generateRevealedBoxesData(False) 命令, 就可以在游戲開(kāi)始時(shí)創(chuàng)建一個(gè)所有蓋子都蓋上的狀態(tài), 然后在游戲中, 可以修改某個(gè)蓋子的狀態(tài): revealedBoxes[boxx][boxy] = True
下面是第二個(gè)問(wèn)題:如何繪制蓋子
首先嘹叫,我們定義蓋子顏色為白色:
BOXCOLOR = WHITE # 定義蓋子顏色為白色
然后,我們根據(jù)圖形的行列位置找到它的屏幕坐標(biāo)
left, top = leftTopCoordsOfBox(boxx, boxy)
最后诈乒,我們使用pygame.draw.rect來(lái)繪制蓋子
pygame.draw.rect(displaysurf, BOXCOLOR, (left, top, BOXSIZE, BOXSIZE))
有了包含是否需要繪制蓋子的二維數(shù)組罩扇,知道了如何繪制蓋子,我們要修改之前創(chuàng)建的drawBoard函數(shù),使它可以根據(jù)數(shù)組信息繪制蓋子/圖形:
def drawBoard(displaysurf, board, revealed):
# 根據(jù)信息繪制圖形/蓋子
for boxx in range(BOARD_WIDTH):
for boxy in range(BOARD_HEIGHT):
left, top = leftTopCoordsOfBox(boxx, boxy)
if not revealed[boxx][boxy]: # 在這里進(jìn)行判斷喂饥,是否需要繪制蓋子
pygame.draw.rect(displaysurf, BOXCOLOR, (left, top, BOXSIZE, BOXSIZE))
else:
shape, color = getShapeAndColor(board, boxx, boxy)
drawIcon(displaysurf, shape, color, boxx, boxy)
最后消约,修改mian函數(shù),進(jìn)行測(cè)試:
def main():
pygame.init()
fpsclock = pygame.time.Clock()
displaysurf = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
pygame.display.set_caption("Memory Game")
displaysurf.fill(BGCOLOR)
board = getRandomizedBoard()
# 創(chuàng)建包含蓋子信息的二維數(shù)組
revealedBoxes = generateRevealedBoxesData(False)
while True:
displaysurf.fill(BGCOLOR)
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
drawBoard(displaysurf, board, revealedBoxes)
pygame.display.update()
fpsclock.tick(FPS)