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)은 파이썬 코드를 규격에 맞게 정리해주는 역할을 수행합니다. 여러 소스..

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

요즘은 코딩동아리가 없는 학교를 찾아보기 어려울 정도로 교과목 뿐만 아니라 동아리 수요도 늘었습니다. 하지만 그 인기만큼 준비없이 시작했다가 금방 망해버리는 동아리도 주로 코딩동아리입니다. 이번 시리즈는 개인 경험과 주변 선생님의 사례를 기반으로 처음 코딩 동아리를 시작하려고 하는 학생과 선생님들이 동아리를 빌드업하는데 참고할만한 이야기를 다룹니다. 이 시리즈에서 다루는 내용은 고등학교를 기준으로 합니다. 읽다가 궁금한 내용이 생기셨다면 덧글보다 아래 메일 주소와 제목을 참고하여 보내주시는 것이 더 빠르게 답변할 수 있습니다. 다만 글쓴이는 현재 학교가 아니라 기업에 소속되어 있어서 관련공문 해설이나 행사문의는 답변하기 곤란합니다. 이메일 주소: soma0sd@gmail.com 이메일 제목: [질문] 코..

코딩/프로그래밍 동아리 만들기: 활동별 분류

요즘은 코딩동아리가 없는 학교를 찾아보기 어려울 정도로 교과목 뿐만 아니라 동아리 수요도 늘었습니다. 하지만 그 인기만큼 준비없이 시작했다가 금방 망해버리는 동아리도 주로 코딩동아리입니다. 이번 시리즈는 개인 경험과 주변 선생님의 사례를 기반으로 처음 코딩 동아리를 시작하려고 하는 학생과 선생님들이 동아리를 빌드업하는데 참고할만한 이야기를 다룹니다. 이 시리즈에서 다루는 내용은 고등학교를 기준으로 합니다. 읽다가 궁금한 내용이 생기셨다면 덧글보다 아래 메일 주소와 제목을 참고하여 보내주시는 것이 더 빠르게 답변할 수 있습니다. 다만 글쓴이는 현재 학교가 아니라 기업에 소속되어 있어서 관련공문 해설이나 행사문의는 답변하기 곤란합니다. 이메일 주소: soma0sd@gmail.com 이메일 제목: [질문] 코..

코딩/프로그래밍 동아리 만들기: 동아리 빌드업

이전에는 키보드 조작으로 타일맵 이동코드를 추가했습니다. 이 방법은 키보들르 눌렀을 때 한 번만 이동하고 원하는 만큼 이동하려면 그만큼 여러번 눌러야 합니다. 게임 시스템에 따라 그방식이 좋은 경우도 있지만, 키보드를 누르고 있는동안 부드럽게 이동하는 것이 좋은 경우도 있을 것입니다. 오늘은 게임의 타일맵을 키보드의 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) - 바닥 타일셋 그리기

End of content

No more pages to load

◀ PREVNEXT ▶