본문 바로가기
python 프로젝트(pygame)

4. 게임 오버화면과 시작화면 구성(마지막)

by watergrace2u 2020. 8. 13.
반응형
SMALL

먼저 게임 오버화면 구성은 handleGameOver 함수와 마지막에 남은 자물쇠의 갯수만큼 별을 표시하는 drawStar 함수로 구성된다.

def handleGameOver(padlock,gameWin,gameLose):
    while True:
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                pygame.quit()
                exit(0)
            elif event.type==pygame.KEYDOWN:
                if event.key==pygame.K_q:
                    pass

            elif event.type==pygame.KEYUP:
                if event.key==pygame.K_q:
                    pass

        font = pygame.font.Font(None,80)

        if gameWin:
            text = font.render("!!CONGRATULATION!!",True,(51,255,0),(0,0,0))
            drawStar(padlock) # 함수 호출
                
        elif gameLose:
            text = font.render("!!GAME OVER!!",True,(255,0,0),(0,0,0))
            screen.blit(sad,(290,135))
            screen.blit(sad,(410,135))

        text_rect = text.get_rect()
        text_rect.center = (400,250)
        screen.blit(text,text_rect.topleft)

        pygame.display.flip()
        fpsClock.tick(FPS)

handleGameOver 함수에서 키 이벤트를 처리하는 함수를 넣지 않으면 게임오버시에 화면을 닫으려고 하면 에러가 뜬다.

다른 방법으로 해결하는 방법이 있을텐데 더 찾아보고 다시 정리해야겠다.

 

def drawStar(padlock):
    starx=[]
    plus=30
    for index in range(padlock.count):
        starx.insert(index,140+plus)
        plus += 100
    for x in starx:
        screen.blit(star,(x,130))

남은 자물쇠의 개수만큼 게임 승리시 별이 표시된다. 별의 개수는 항상 다르므로 따로따로 정해주지는 않았다.

 

다음으로 게임 시작화면이다. 이 부분은 startScreen 함수를 따로 만들어서 처리하였다.

def startScreen():
    keyC = False
    while True:
        screen.fill((0,0,0))
        font = pygame.font.Font(None,100)
        title = font.render("Defend Padlock",True,(0,198,255))
        title_rect = title.get_rect()
        title_rect.center = (400,80)
        screen.blit(title,title_rect.topleft)

        font = pygame.font.Font(None,40)
        winText = font.render("WIN --> ",True,(0,255,0))
        loseText = font.render("LOSE --> ",True,(255,0,0))
        secondText = font.render("Defend for 90 seconds",True,(255,255,255))
        thirdText = font.render("All padlocks -> keys or Player dies",True,(255,255,255))
        pressText = font.render("Press c to continue...",True,(255,255,0))
        screen.blit(winText,(90,200))
        screen.blit(loseText,(90,260))
        screen.blit(secondText,(250,200))
        screen.blit(thirdText,(250,260))
        screen.blit(pressText,(250,380))

        pygame.display.flip()

        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                pygame.quit()
                exit(0)
            elif event.type==pygame.KEYDOWN:
                if event.key==pygame.K_c:
                    keyC = True 
            elif event.type==pygame.KEYUP:
                if event.key==pygame.K_c:
                    keyC=False 
        if keyC:
            break

c를 누르면 게임이 시작된다.

 

이렇게 모든 게임의 주요 클래스와 함수 정리가 끝났고 마지막에 

startScreen()

main()

두 개의 함수를 차례대로 호출해주면 게임이 실행된다.

 

<앞으로 더 추가하고자 하는 사항>

- 게임오버시 키를 누르면 게임이 완전히 처음부터 다시 시작되도록(시작화면 제외)

- 더 좋은 코드 생각해보기

 

파이썬을 이용해서 처음으로 게임을 만들어보았는데 나름 얻은 것도 많았고 재미있었다. 이번에 게임을 만들어보면서 유니티도 공부해보고 싶다는 마음이 생겼다. 우선 현재 공부하고 있는 자바 자료구조 유튜브 영상을 다 보고 유니티를 공부해야겠다. 그와 동시에 do it 시리즈의 '자료구조와 함께 배우는 알고리즘' 자바편도 공부해야겠다.(2020.8.13)

 

 

반응형
LIST

'python 프로젝트(pygame)' 카테고리의 다른 글

3. 게임작동 메인함수  (0) 2020.08.13
2. pygame 기본적인 클래스 구성 + 코드  (0) 2020.08.11
1. pygame 게임 실행화면  (0) 2020.08.11

댓글