어제 만들어 놓은 코드로 계속 패치를 진행 하였다.
유튜브 를 보고 뼈대 코드를 구성하다 보니, 이해가 안가는 로직도 몇개 있었다.
다음 부터는 템플릿을 참조하는 것 이 아닌, 내가 처음부터 디자인 해보는 것 도 좋은 공부가 될 것 같다.
아직 나는 처음부터 내가 로직을 구현하기에는 실력이 많이 부족하다는 생각이 들어 다른 사람들이 만든 로직을 가지고
공부를 하고 있다.
타이머를 구현하고 싶었다. 어제 마지막으로 타이머를 구현하였다. 하지만 이 타이머가 전체 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에 연동시켜서 저장해보자
오전시간, 코드 리팩토링으로 이미지 파일 나누기
함수 나눠보기.. 함수별로 파일로 나눠서 정리해 보고 싶다
내일 오전에 못하더라도 개인적인 코드리뷰 시간을 가지고 정리해보자. 꼭.
코드 잘 봤습니다 :)
주말을 활용해서 금일 계획하신 복습을 꼭 진행해주세요!