본문 바로가기
개발_TIL

개발_TIL | 2022-04-26 (7)

by Hee94 2022. 4. 26.

 Python의 pygame을 활용한 게임 만들기! (2)

 

게임 시작에 앞서 메인메뉴 화면!

   어제 코딩한 부분에 이어서 오늘은 기본 메뉴가 나오는 화면을 코딩해보았다.

#시작 화면 메뉴
def mainmenu():

    pygame.display.set_caption('같은 그림 찾기')
    pygame.display.set_icon(pygame.image.load('image/img15.png'))
    menu = True

    while menu:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                quitgame()

        gameDisplay.fill(WHITE)

        gameDisplay.blit(titleImg, (120, 130))
        Button(startImg, 280, 360, 60, 20, clickStartImg, 273, 358, main)
        Button(quitImg, 445, 360, 60, 20, clickQuitImg, 440, 358, quitgame)
        pygame.display.update()
        clock.tick(15)   #일정 주기로 화면 갱신

흰색바탕으로 화면을 채우고 타이틀이미지를 하나 넣어 가운데를 장식한 후 버튼 두개에 각자의 이미지를 넣고 버튼에 마우스를 올렸을때 이미지를 살짝 바꿔 표현하였다.

if __name__ == '__main__':
    mainmenu()

처음 시작을 mainmenu 함수로 지정하여 먼저 시작되게끔 하였다.

게임 진행 화면!

   현재 카카오프렌즈의 캐릭터 이미지를 8개를 넣어서 2쌍씩 들어가있게 해놓았다.

   <-표시를 누르게되면 메인메뉴화면으로 넘어가게 구현을 해놓았고, QUIT(빨강)을 누르게 되면 종료되게 구현하였다.

   게임이 시작되면 16개의 카드중 4장씩 4번 카드위치를 보여준 후 마우스를 이용하여 짝을 맞출 수 있게 되어있다.

#게임 메인화면
def main():
    global FPSCLOCK, DISPLAYSURF
    pygame.init()

    FPSCLOCK = pygame.time.Clock()
    DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT))

    mousex = 0
    mousey = 0 #마우스 이벤트 발생 좌표
    pygame.display.set_caption('같은 그림 찾기')
    pygame.display.set_icon(pygame.image.load('image/img15.png'))
    mainBoard = getRandomizedBoard()
    revealedBoxes = generateRevealedBoxesData(False)

    firstSelection = None # 첫 클릭 좌표 저장
    DISPLAYSURF.fill(BGCOLOR)
    startGameAnimation(mainBoard)


    while True:
        mouseClicked = False

        DISPLAYSURF.fill(BGCOLOR) # 전체 배경색
        drawBoard(mainBoard, revealedBoxes)

        Button(backImg,635, 280, 60, 20,clickBackImg , 630, 278, mainmenu)
        Button(quitImg, 635, 360, 60, 20, clickQuitImg, 630, 358, quitgame)

        for event in pygame.event.get(): #이벤트 처리 루프
            if event.type == QUIT or (event.type ==KEYUP and event.key == K_ESCAPE):
                pygame.quit()
                sys.exit()
            elif event.type == MOUSEMOTION:
                mousex, mousey = event.pos
            elif event.type == MOUSEBUTTONUP:
                mousex, mousey = event.pos
                mouseClicked = True

        boxx, boxy = getBoxAtPixel(mousex, mousey)
        if boxx != None and boxy != None:
            # 마우스가 현재 박스 위에 있다.
            if not revealedBoxes[boxx][boxy]: #닫힌 상자라면 하이라이트만!
                drawHighlightBox(boxx,boxy)
            if not revealedBoxes[boxx][boxy] and mouseClicked:
                revealBoxesAnimation(mainBoard,[(boxx, boxy)])
                revealedBoxes[boxx][boxy] = True #닫힌 상자+클릭-> 박스 열기
                if firstSelection ==None : #1번 박스>좌표 기록
                    firstSelection = (boxx, boxy)
                else: #1번 박스 아님>2번 박스>짝검사
                    icon1shape, icon1color = getPicAndNum(mainBoard, firstSelection[0], firstSelection[1])
                    icon2shape, icon2color = getPicAndNum(mainBoard, boxx, boxy)
                    if icon1shape !=icon2shape or icon1color != icon2color:
                        #서로 다름이면 둘 다 닫기
                        pygame.time.wait(1000) #1000 milliseconds = 1sec
                        coverBoxesAnimation(mainBoard, [(firstSelection[0], firstSelection[1]), (boxx, boxy)])
                        revealedBoxes[firstSelection[0]][firstSelection[1]]=False
                        revealedBoxes[boxx][boxy] =False

                    #짝이면
                    elif hasWon(revealedBoxes):
                       pygame.time.wait(2000)

                       #게임판 재설정
                       mainBoard = getRandomizedBoard()
                       revealedBoxes = generateRevealedBoxesData(False)

                       #잠깐 공개
                       drawBoard(mainBoard, revealedBoxes)
                       pygame.display.update()
                       pygame.time.wait(1000)

                       #게임 시작
                       startGameAnimation(mainBoard)

                    firstSelection = None #1번 박스 리셋

                #화면을 다시 그린 다음 시간 지연을 기다린다..
        pygame.display.update()
        FPSCLOCK.tick(FPS)

마우스포인터가 카드위에 올라오게되면? 테두리색이 변해요!

   마우스 포인터가 카드 위에 올라왔을 때 애니메이션을 구현하여 어느 위치에 있는지 파악하기가 무척 쉽다!

def drawHighlightBox(boxx, boxy):   #테두리색 박스
    left, top = leftTopCardsOfBox(boxx, boxy)
    pygame.draw.rect(DISPLAYSURF, HIGHLIGHTCOLOR, (left - 5, top - 5, BOXSIZE + 10, BOXSIZE + 10), 4)

 

'개발_TIL' 카테고리의 다른 글

개발_TIL | 2022-04-28 (9)  (0) 2022.04.28
개발_TIL | 2022-04-27 (8)  (1) 2022.04.27
개발_TIL | 2022-04-25 (6)  (0) 2022.04.26
개발_TIL | 2022-04-22 (5)  (0) 2022.04.22
개발_TIL | 2022-04-21 (4)  (0) 2022.04.21