[pygame]メモリパズル-3


私は続けます.
getShapeAndColor(board,boxx,boxy)
def getShapeAndColor(board,boxx,boxy): 
    #x,y 위치의 아이콘 형태의 값은 board[x][y][0]
    #x,y 위치의 아이콘 색의 값은 board[x][y][1]
    return board[boxx][boxy][0], board[boxx][boxy][1]
このような簡単な関数を書くことで、コードを読みやすくします.
drawBoxCovers(board,boxes,coverage)
def drawBoxCovers(board,boxes,coverage):
    # 닫히거나 열린 상태의 상자를 그린다. 
    # 상자는 아이템 2개짜리 리스트이며 상자의 x,y 위치를 가진다.
    for box in boxes:
        left, top = leftTopCoordsOfBox(box[0],box[1])
        pygame.draw.rect(DISPLAYSURF,BGCOLOR,(left,top,BOXSIZE,BOXSIZE))
        shape, color = getShapeAndColor(board, box[0], box[1])
        drawIcon(shape,color,box[0],box[1])
        if coverage>0: # 닫힌 상태이면 덮개만 그린다. 
            pygame.draw.rect(DISPLAYSURF,BOXCOLOR,(left,top,coverage,BOXSIZE))
    pygame.display.update()
    FPSCLOCK.tick(FPS)
ゲームボードのデータ構造を取得するには、表紙を描くボックスのリストが必要で、パラメータとして描画するボックスの数が必要です.
cover/revealBoxAnimation()
def revealBoxesAnimation(board,boxesToReveal):
  #상자가 열리는 애니메인션 수행
  for coverage in range(BOXSIZE,(-REVEALSPEED)-1,-REVEALSPEED):
      drawBoxCovers(board,boxesToReveal,coverage)
      #coverage가 REVEALSPEED 의 속도에 따라 이뤄진다 ! 

def coverBoxesAnimation(board,boxesToCover):
  #상자가 닫히는 애니메이션 수행
  for coverage in range(0,BOXSIZE+REVEALSPEED,REVEALSPEED):
      drawBoxCovers(board,boxesToCover,coverage)
drawBoard(board,revealed)
def drawBoard(board,revealed):
 #모든 상자를 상태에 맞게 그리기
 for boxx in range(BOARDWIDTH):
     for boxy in range(BOARDHEIGHT):
         left, top = leftTopCoordsOfBox(boxx,boxy)
         if not revealed[boxx][boxy]:
             #닫힌 상자를 그린다.
             pygame.draw.rect(DISPLAYSURF,BOXCOLOR,(left,top,BOXSIZE,BOXSIZE))
         else:
             #열린 상자, 즉 아이콘을 그린다.
             shape, color = getShapeAndColor(board,boxx,boxy)
             drawIcon(shape,color,boxx,boxy)
drawIconは開いているボックスペイントアイコンを呼び出し、閉じたボックスは白いボックスをペイントします.
drawHighlightBox(boxx,boxy)
def drawHighlightBox(boxx,boxy):
  left,top = leftTopCoordsOfBox(boxx,boxy)
  pygame.draw.rect(DISPLAYSURF,HIGHLIGHTCOLOR,(left-5,top-5,BOXSIZE+10,BOXSIZE+10),4)
  
プレイヤーが閉じた箱をクリックして開くと、箱の周りに青いハイライト効果が現れます.
startGameAnimation(board)
def startGameAnimation(board):
    # 무작위로 한 번에 8 개씩 상자를 열어서 보여준다.
    coveredBoxes = generateRevealedBoxesData(False)
    boxes = []
    for x in range(BOARDWIDTH):
        for y in range(BOARDHEIGHT):
            boxes.append((x,y))
    random.shuffle(boxes)
    boxGroups = splitIntoGroupsOf(8,boxes)
    
    drawBoard(board,coveredBoxes)
    for boxGroup in boxGroups:
        revealBoxesAnimation(board,boxGroup)
        coverBoxesAnimation(board,boxGroup)
この8つを通してスタートすると順番にアイコンが表示されるヒントが!
gameWonAnimation(board)
def gameWonAnimation(board):
 #플레이어가 승리하면 배경색을 깜빡인다. ! 
 coveredBoxes = generateRevealedBoxesData(True)
 color1 = LIGHTBGCOLOR
 color2 = BGCOLOR

 for i in range(13):
     color1,color2 = color2,color1 #색을 바꾼다.
     DISPLAYSURF.fill(color1)
     drawBoard(board,coveredBoxes)
     pygame.display.update()
     pygame.time.wait(300)
プレイヤーの勝利を祝うために、順番に画面にcolor 1 color 2を描きます.
hasWon(revealedBoxes)
def hasWon(revealedBoxes):
    #모든 상자를 열었으면 True 아니면 False
    for i in revealedBoxes:
        if False in i:
            return False # 닫힌 상자가 있으면 False
    return True
これによりプレイヤーが勝利したかどうかを見ることができる.
なぜmain関数を使ったのですか?
main()関数を記述し、コードを2つの重要なステップに入れます.
1.グローバル変数ではなく領域変数を使用できます.
2.個別の関数をテストできます.
name(下の欄)
if __name__ == '__main__':
  main()
nameが表示され、main関数が呼び出されたかどうかがわかります.
この方法を用いると、作成されたプログラムの各関数が正しい戻り値を返すかどうかを容易にテストすることができる.
コードがよく読めます!!使いやすい
ソフトがほとんどないのでそのままです.私はゲームをした後、放っておくことはめったにありません.
新しいエラーを発見する可能性があるので、読みやすく理解しやすいコードを書く必要があります.
次の投稿で締めくくります...