티스토리 뷰
필자가 이제까지 봤던 모든게임,
직접 제작해보았던 게임,
코드만 본 게임
모두 다 합쳐서도 단 하나도 이것을 벗어나는 게임은 없었습니다. 있었다면 필자에게 말해주면 고맙겠습니다.
어떤 순서냐 하면
입력받음 -> 상태업데이트 -> 그리기 -> 입력받음
게임에 따라서 조금씩 다를 수는 있지만 이걸 벗어나는 경우란건 존재하지 않았습니다.
조금씩 다른게 입력을 쉬고 있으면 상태 업데이트도 같이 안할 수도 있는거고, 입력만 안받지만 주변 풍경은 계속 변하고 있을 수도 있습니다.
어쨋든 저 큰 골격을 벗어나는 경우는 본 적이 없고, 필자는 본 그대로 라이브러리를 써서 옮겨보도록 하겠습니다.
우선 1부터 15까지 숫자를 나타낼 판과 공백 판 하나가 있으면 좋겠네요. 이건 직접 그려서 만드시면 됩니다.
이제까지 저희가 만들어 왔던 코드를 수정하는 형식이 될겁니다. 우선 이전의 코드를 켜주세요.
임포트 할 라이브러리가 늘었습니다. 근데 pygame 실습할때 다 추가했었던 라이브러리 입니다. 별로 어려울건 없어요~
이제까지 가독성 문제로 모든 숫자들을 " 1 " " 2 " 이런식으로 저장하셨던거 기억하시나요.
앞으로는 이렇게 저장할 일은 없을겁니다. 우선 이부분은 숫자로 고치도록 합시다.
numberList = [i for i in range(16)]
random.suffle(numberList) 로 바꾸어주시면 됩니다. 숫자로 처리하니 이렇게 간편해집니다.
(실제로는 속도 향상도 일어나지만 이런게임에서는 아무 의미 없습니다.)
다음으로는 판을 검사하는 것들도 바꾸어 주어야겠죠??
네 이런식으로 바꾸어주면 됩니다. 이것도 더 잘 생성하는 방법이 있어요 이중 반복문을 사용했으면 훨씬 깔끔하게 작성 할 수 있었지만 (귀차니즘이 도져서) 그냥 해봤습니다.
그리고 gameBoard 판때기(?) 를 그리는 부분이 바뀌어야합니다.
원래는 이미지를 클래스별로 가지고 있는게 맞는거 같은데, 우선은 게임보드도 단 하나만 생긴다는게 보장이 되어있고, 게임 이미지는 전역으로 생성해서 사용했습니다.(좋은 방식 아닙니다)
우선 이미지가 있다고 가정하고 이것을 그리는 함수를 작성해 봅시다.
이미지는 배열로 받겠죠.?
이중 반복문을 사용해서...
이미지 하나당 픽셀을 100픽셀짜리로 미리 만들어 놔서 저렇게 출력합니다.
(추후에 3D게임을 만들때는 이미지의 크기나 그런것들도 가변적으로 변해야 할 수도 있습니다 전체를 다 불러오는게 아니라는 소리입니다.)
위에 보이는 코드가 조금 이상해 보일 수도 있는데 i j 가 바뀐데에는 이유가 있습니다.
gameBoard 에서는 앞에 있는 변수가 y 뒤에것이 x 축이 되어있기 때문인데 뒤의 변수는 x,y 이기 때문에 바꾸어서 넣은겁니다. 헷갈리지 않도록 주의합시다.
img배열안에서 숫자를 각각 넣어서 이미지를 불러옵니다. 즉 배열의 index 와 숫자가 동일합니다.
gameBoard 를 생성하기 전에 해줘야하는것들입니다. 이미지를 미리 로드하고 (게임이 커지면 미리 로드하지 않아요~ 게임 맵이 바뀌면서 로딩해야하는것이 그런 문제 메모리에 한계가 있기 때문입니다 다만 이런 게임에서는 메모리를 걱정할 정도로 고 용량의 텍스처나 이미지를 쓰지 않아서...)
별로 어려운것은 없습니다 .다음에는 입력을 받는 부분을 생각해볼건데.
필자가 또 실력이 부족해서
조금 생각해봐야하는 문제가 생겼습니다. 키보드로 움직일때는 0 이 움직인다고 생각하면 편했는데, 이걸 마우스로는 어떻게 해야할까요. 우리는 실제로 16퍼즐을 맞출때 공백을 움직이지 않습니다
드래그를 해서 해결하는 방법이 있겠지만, 드래그는 마우스의 BUTTONUP 과 BUTTONDOWN 을 두가지 조합하고 위치까지 받아와야하는 어려움이 있습니다. 이건 추후에 BUTTONDRAG 를 새로 구현해야합니다. 그런 이유로 패스하겠습니다. (필자는 pygame 에서 BUTTONDRAG 를 못찾은거 같은데 있긴 있을거에요)
필자는 버튼을 클릭했을때 주변에 공백이 있으면 그 공백으로 움직이고
공백이 없다면 아무처리도 하지 않는 것을 생각했습니다. 꽤 직관적이여서 마음에 들었습니다.
우선 글이 너무 길어져서 다음 포스팅으로 가겠습니다.
'Game with Python' 카테고리의 다른 글
16퍼즐 제작 - (9) (1) | 2017.06.18 |
---|---|
16퍼즐 제작 - (8) (0) | 2017.06.16 |
pygame에 대해서 간단히 알아봅시다. -(2) (0) | 2017.06.16 |
pygame에 대해서 간단히 알아봅시다. -(1) (0) | 2017.06.15 |
16퍼즐 제작 - (6) (0) | 2017.06.13 |