DICERS - 1 Python GUI, Dicers, Pygame

김근호·2021년 7월 10일
0

Python GUI

Github : https://github.com/gust9988/dicers

전기 수업을 담당했던 선생님은 프론트엔드로 시작한 풀스택 엔지니어셨고,
당신께서 그러셨던 것처럼, 혹은 학생들의 흥미 증진(?)을 위해
첫 프로젝트로 Python의 기초 내용과 연관된 GUI 라이브러리를 이용하여
'시각화된 프로그램'을 만들 것을 프로젝트 주제로 내주셨다.

이를 위해 선생님께서는 tkinter 대신 PyQt4 (Python 3.5)를 수업하셨다.
하지만 한 가지 문제에 봉착한다.
내가 만들고 싶은 프로그램은 PyQt5로 구현하기 힘들었기 때문이다.

나는 게임을 만들고 싶었다.


Dicers

  1. 유저는 100pt를 소지하고 시작한다.
  2. 주사위 3개를 굴려 나온 수의 조합에 따라 포인트를 받는다

    예) 100pt를 가진 채로 10pt를 걸었다면,

    조합 없음 = pt를 잃는다. (100pt -> 90pt)
    (1, 2, 3) = pt만큼 더 잃는다. (100pt -> 80pt)

    같은 수 2개 = pt를 다시 돌려 받는다. (100pt -> 100pt)

    (4, 5, 6) = pt만큼 더 돌려 받는다. (100pt -> 110pt)
    같은 수 3개 = pt의 4배만큼 더 돌려 받는다. (100pt -> 140pt)
    (1, 1, 1) = pt의 9배만큼 더 돌려 받는다. (100pt -> 200pt)


Pygame

이를 위해서 Pygame 책을 따로 사서 공부했다.
Pygame은 JS의 Canvas처럼 좌표에 따라 점, 선, 면을 그리는 것이 가능했다.
그러나 자유로운 만큼 세세한 디테일을 잡기 위해서는 더 세심한 코드가 필요했다.
편하면 안 예쁘고 (PyQt5) 예쁘면 손이 많이 간다. (Pygame)


Surface, event, update (render, draw, blit)

Pygame은 Flip Animation과 유사한 방식으로 작동했다.
(실상 모든 디지털 디스플레이가 그런가)

Surface 객체는 종이에 해당하는 객체이고, 내가 어떠한 event를 기준으로 update를 설정하면
event 발생시 draw, render된 요소를 Surface 위에 blit하고 다시 update하는 식으로 작동한다.

플레이어의 event 접근에 따라 다음 장의 그림이 바뀌는 Flip Animation이라고 생각했다.
메인 루프가 while로 계속 돌아가며, 때로 컴퓨터가 버벅이면 게임 그래픽도 느려졌다(!)


profile
devrmsrms

0개의 댓글