soma0sd

코딩 & 과학 & 교육

반응형

오늘부터 파이썬의 게임모듈 파이게임(pygame)을 사용하여 슬라임 서바이벌(가칭)이라는 게임을 개발합니다. Python 3.9.12 pygame 2.1.2 (SDL 2.0.18) 위는 기초 언어 환경입니다. 파이게임은 LGPL 라이선스를 사용하며 SDL2을 파이썬에서 사용할 수 있도록 만들고 몇 가지 기능이 추가되어있는 모듈입니다. 기초 개발환경은 파이썬 3.9의 최신 릴리즈와 파이게임 2.1.2를 사용합니다. mypy 0.942 black 22.3.0 pydocstyle 6.1.1 개발 편의성 도구입니다. 마이파이(mypy)는 소스코드 검사를 수행하며 디버그를 실행하기 전에 상당수의 오류를 미리 잡아줘서 편합니다. 블랙(black)은 파이썬 코드를 규격에 맞게 정리해주는 역할을 수행합니다. 여러 소스..

게임 개발 일지: 기본 개발 환경 구성

이전에는 키보드 조작으로 타일맵 이동코드를 추가했습니다. 이 방법은 키보들르 눌렀을 때 한 번만 이동하고 원하는 만큼 이동하려면 그만큼 여러번 눌러야 합니다. 게임 시스템에 따라 그방식이 좋은 경우도 있지만, 키보드를 누르고 있는동안 부드럽게 이동하는 것이 좋은 경우도 있을 것입니다. 오늘은 게임의 타일맵을 키보드의 WASD키를 누르고 있는 동안 이동하도록 만들고, 부드러운 이동을 위해 누르는 동안 타일맵의 이동이 가속하도록 만듭니다. 키보드 이벤트 Pygame의 키보드 입력을 매개변수로 받아 카메라의 속도를 변경하는 메서드를 작성합니다. 이 때, 무한정 가속하면 게임할 때 문제가 있을테니 [-10, 10]범위에서 가속하도록 합니다. 키보드에서 손을 떼면 가속과 속도를 무시하고 즉시 정지하도록 합니다. ..

Pygame: 키보드를 누르고 있으면 타일맵 이동을 가속

이전의 등축투영 타일의 좌표 포스트는 코드를 기준으로 설명했고 배치하는 방식에 대한 설명이 꽤나 불성실해서 보충하는 포스트를 작성하였습니다. 규칙을 파악하기 각각 \( w_{tile} \) 는 타일셋 이미지의 너비, \( h_{tile} \)는 타일셋 이미지의 높이, \( w_{grid} \)는 배치할 격자의 너비, \( h_{grid} \)는 배치할 격자의 높이입니다. 아이디어를 얻기 위해 그림을 보며 수식으로 정리해봅니다. $$ \begin{matrix} f_{x}(0, 0) = & 0 & f_{y}(0, 0) = & 0 \\ f_{x}(1, 0) = & - 0.5 w_{grid} & f_{y}(1, 0) = & 0.5 h_{grid} \\ f_{x}(0, 1) = & 0.5 w_{grid} & f_..

Pygame [보충]: 등축투영 타일의 좌표

만드는 게임이 건설 운영 시뮬레이션이다보니 캐릭터의 이동이 아니라 직접 조작으로 화면을 옮기는 기능이 필요합니다. 오른손은 마우스로 바쁠테니 WASD이동을 하는 편이 좋겠죠. 타일맵 이동 소스코드의 move() 메서드 먼저 살펴보면 self.__cam_pos_x 값과 self.__cam_pos_y 값을 변경하는 것을 볼 수 있습니다. 이 값들은 blit_to() 메서드에서 타일 배치 좌표를 보정하는 역할을 합니다. 보정값을 바꿨으니 모든 타일의 위치가 변합니다. def blit_to(self, surface: "Surface"): """지정한 표면에 타일맵을 출력""" surface.fill(pygame.Color(0, 0, 0, 0)) xlim, ylim = self.shape xcenter = sur..

Pygame: 키보드 조작으로 타일맵 이동

게임을 제작하다보니 소스코드의 덩치가 꽤나 커져서 깃허브에 저장소를 만들었습니다. 등축투영(isometric) 타일은 정육면체를 표현할 때 윗면만 보이는 직교좌표계 타일맵과는 다르게 세 면이 동시에 같은 넓이로 보이는 타일맵을 의미합니다. 높이 표현이 수월하며 입체 표현이 용이합니다. 그러나, 타일을 그릴 때 정사각형을 기반으로 하는 직교좌표계 타일보다 그리기가 어렵고, 캐릭터의 이동방향이 기울어져있어 조작의 직관성이 떨어진다는 단점이 있습니다. 오늘은 어제 한 타일 배치에 이어 파이게임(Pygame)의 게임화면에 배치한 등축투영 타일맵을 중앙에 배치하도록 합니다. 타일맵을 그냥 배치하면 제일 위쪽의 타일부터 배치하다보니 게임 타일맵 전체가 한쪽에 치우친 것을 볼 수 있습니다. 게임을 시작할 때 한쪽에 ..

Pygame: 등축투영 타일맵을 가운데 배치하기

오늘은 등축 투영(isometric) 타일배치를 위한 좌표계를 구현해봅니다. 직교 좌표계를 등축투영 좌표계로 변환 하향식 게임에서 사용하는 직교좌표계 타일에서 왼쪽 위가 (0, 0) 좌표일 때, 이 타일 좌표계를 그대로 회전시켜 등축투영(isometric) 좌표계로 변환하면 그림처럼 왼쪽 끝이 (0. 0) 좌표계가 됩니다. 하지만 이대로 타일을 배치하면 문제가 발생합니다. 타일을 x가 0인 지점부터 차례대로 채운다고 하면 랜더링 하는 순서로 인해 그림과 같은 문제가 생깁니다. 원점을 꼭대기 부분으로 바꾸지 않으면 계산이 편하긴 하겠지만 랜더링 순서로 인해 맵에 벽이나 언덕 타일이 있는 경우 심각한 문제가 발생합니다. 타일셋 이미지 예제를 작성하기 전에 타일셋 이미지를 프로젝트 디렉토리 내부의 asset/..

Pygame: 등축투영 타일의 좌표

오늘은 aseprite를 사용하여 64x64 타일을 기준으로 등축 투영(isometric) 바닥 타일을 그려봅니다. 기본 패턴 바닥 타일은 하단의 사각박스로 시작합니다. 실선과 점선 타일의 외곽선을 실선이나 점선으로 표현하는 방법입니다. 패턴 기초적인 패턴과 질감을 표현하는 기초적인 방법입니다. 객체 추가하기 입체감이 필요한 사물을 바닥에 배치하는 방법입니다. 예시는 나무와 숲 타일입니다.

Pygame: 타일셋 그리기(3) - 바닥 타일셋 그리기

어제는 기본 타일셋 이미지 생성을 통해 등축 타일을 픽셀로 옮겼을 때 대략 어떤 모습일지 알아봤습니다. 오늘은 어제 본 기본 타일셋을 가지고 지형 타일셋을 그려봅니다. 사용한 응용프로그램은 다음과 같습니다. aseprite: 픽셀아트를 위한 전문도구입니다. 2D 스프라이트, 타일, 애니메이션 등을 손쉽게 그릴 수 있습니다. 스팀에서 20,500원에 구매했습니다. Tiled: 완성한 타일셋을 배치할 수 있는 맵 에디터입니다. 파이게임을 위한 패키지도 있으며 오늘은 만든 타일셋이 제대로 나오는지 확인하는 용도로 사용했습니다. 타일 크기 2D 게임에서 사용하는 등축투영 타일의 경우 32x32와 64x64, 128x128 중 하나를 사용하는 모양입니다. 32x32 타일 (c) Rodrigo-Vega 64x64 ..

Pygame: 타일셋 그리기(2) - 지형 타일셋 제작

지난번 Pygame: 타일 맵 만들기에서 이어집니다. 저번에는 건설/운영 시뮬레이션 게임에서 자주 사용하는 등축 타일맵을 사용하기로 마음먹고 기본적인 배치 방법을 살펴봤습니다. 타일 셋을 그리는 좋은 그리기 도구들이 많지만 그걸 사용하는 저는 센스가 전혀 없습니다. 무료 에셋도 많고 품질도 괜찮은 게임 에셋 스토어인 itch.io를 사용하는 방법도 있지만 코딩으로 어떻게 해볼수 있는건 해보려고 합니다. 오늘은 타일셋 이미지 하나를 생성하는 프로그램을 만들고, 최종적으로 난수의 신께 도움을 받아 필요한 등축 타일셋을 생성하는 프로그램을 만들어보려고 합니다. Pygame에서도 이미지 저장 기능을 제공하지만 순전히 제가 귀찮아서 Matplotlib을 사용했습니다. 나중에 뭔가 제대로 만들어지면 그때가서 수정할..

Pygame: 타일셋 그리기(1) - 코딩으로 기본 타일셋 생성

End of content

No more pages to load

◀ PREVNEXT ▶