22.04.26 파이썬 게임과제 2일차

김하진·2022년 4월 26일

파이썬 게임 과제 2일차

어제 만들어 놓은 코드로 계속 패치를 진행 하였다.
유튜브 를 보고 뼈대 코드를 구성하다 보니, 이해가 안가는 로직도 몇개 있었다.
다음 부터는 템플릿을 참조하는 것 이 아닌, 내가 처음부터 디자인 해보는 것 도 좋은 공부가 될 것 같다.
아직 나는 처음부터 내가 로직을 구현하기에는 실력이 많이 부족하다는 생각이 들어 다른 사람들이 만든 로직을 가지고
공부를 하고 있다.

오늘 애 먹은 부분

타이머를 구현하고 싶었다. 어제 마지막으로 타이머를 구현하였다. 하지만 이 타이머가 전체 pygame 에서
의 타이머인 느낌, ingame 에서의 타이머가 아닌 것 이다. 비행기 충돌처리가 되고 게임이 메인메뉴로 돌아가도
타이머는 계속 돌아간다 이걸 어떻게 수정하지..?

main loop () 로 가져와 봤다. 그래도 결과는 똑같다.
global 함수로 값을 주고 시도를 해봤다. 그래도 결과는 같았다.

내가 pygame.time에 대한 이해가 부족하지 않았나 싶다...

 elapsed_time = (pygame.time.get_ticks() - start_ticks) / 1000 
 timer = game_font.render(str(int(total_time - elapsed_time)), True, (255,255,255))

이 코드를 사용하였지만, 구현을 했지만, 원하는 구현은 실패 했다...........
pygame 시간은 ms 단위라 계산은 이해가 가지만 더 공부 해보는 걸로....

  • input 박스 만들기!

    메인화면에 input 박스를 만들고 싶었다.
    이게 굉장히.. 어려웠다. 구글로도 잘 안나오는 부분이라 외국분들이 써놓은 글을 부랴부랴 해석해서
    어떻게 구현은 했다.!

  font = pg.font.Font(None, 32)
    clock = pg.time.Clock()
    input_box = pg.Rect(150, 300, 140, 32)
    color_inactive = pg.Color('lightskyblue3')
    color_active = pg.Color('dodgerblue2')
    color = color_inactive
    active = False
    text_player = ''
    done = False

    while not done:
        for event in pg.event.get():
            if event.type == pg.QUIT:
                done = True
            if event.type == pg.MOUSEBUTTONDOWN:
                # If the user clicked on the input_box rect.
                if input_box.collidepoint(event.pos):
                    # Toggle the active variable.
                    active = not active
                else:
                    active = False
                # Change the current color of the input box.
                color = color_active if active else color_inactive
            if event.type == pg.KEYDOWN:
                if active:
                    if event.key == pg.K_RETURN:
                        print(text_player)
                        text_player = ''
                        done = True
                    elif event.key == pg.K_BACKSPACE:
                        text_player = text_player[:-1]
                    else:
                        text_player += event.unicode

        screen.fill((30, 30, 30))
        # Render the current text.
        txt_surface = font.render(text_player, True, color)
        # Resize the box if the text is too long.
        width = max(200, txt_surface.get_width() + 10)
        input_box.w = width
        # Blit the text.
        screen.blit(txt_surface, (input_box.x + 5, input_box.y + 5))
        # Blit the input_box rect.
        pg.draw.rect(screen, color, input_box, 2)

        pg.display.flip()

전체 코드는 이러하다.
pygame.imput 모듈을 이용한 것이다.
while 문을 통해서 이벤트 발생시키고 그값에 따라 출력하고 엔터를 누르면 print(text)를 출력하고
메인 화면으로 넘어간다.
이 코드 또한 내걸로 만들어야겠다.

  • 오늘 느낀점

내일 까지 마무리 해야한다.. 개인적으로 DB까지 구현을 하고 싶었지만 시간이 될 지 모르겠다.
사실 시간땜에 오늘 타이머도 과감히 포기했다. 전체적으로 코드를 갈아 엎어야 할 것 같아서 이다
다음 프로젝트는 템플릿을 참고만하고 기본로직 구현은 직접 해봐야겠다. 아무리 이해하면서, 정리하면서 한다해도
내가 패치나 디버깅 과정중 햇갈리거나 어지러운 점이 너무나도 많은 것 같다.

  • 내일 꼭 하고 싶은 것

DB.... 연동 해보기 하이스코어 구현과, 플레이어 이름 을 DB에 연동시켜서 저장해보자
오전시간, 코드 리팩토링으로 이미지 파일 나누기
함수 나눠보기.. 함수별로 파일로 나눠서 정리해 보고 싶다
내일 오전에 못하더라도 개인적인 코드리뷰 시간을 가지고 정리해보자. 꼭.

profile
진킴

2개의 댓글

comment-user-thumbnail
2022년 4월 27일

코드 잘 봤습니다 :)
주말을 활용해서 금일 계획하신 복습을 꼭 진행해주세요!

1개의 답글