일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 시집
- 숨결이 바람이 될 때
- comfyui
- 고양이발 살인사건
- Stable diffusion
- frozen lake
- 나는 스물일곱 2등 항해사입니다.
- 타이핑 몬스터
- 에르난 디아스
- Python
- 단어가 품은 세계
- 황선엽
- 부에노비스타 소셜클럽
- 운석피하기 게임
- 게임개발
- gymnasium
- 아무도 없는 숲속에서
- 매트로폴리탄
- 타이핑좀비
- pygame
- Ai
- 쿠바전통음악
- 나는 매트로폴리탄 미술관 경비원입니다.
- 타자연습게임
- 어른의 행복은 조용하다
- 트렌드코리아2025
- 운석 피하기 게임
- Gym
- openAI
- 인생의 해상도
- Today
- Total
스푸79 기록 보관소
타자 연습 게임, 타이핑 몬스터(4) - 배경 본문
이번에는 게임의 배경과 구조물을 넣어 보도록 하겠습니다.
바닥에 아스팔트 깔고 철조망을 올려서 좀비들이 특정 구역부터는 멈추도록 구현해 봤습니다.
플레이어 이미지도 넣었습니다.
원래 초기 기획 단계에서는 신부님이었는데 뜬금 없지만 람보로 바꿨습니다.
점점 더 초기 기획과는 거리가 멀어지는 것 같네요.
아스팔트는 총 8개로 작업을 했습니다. 바닥에 너무 단조로운 이미지로 바닥을 깔면
게임 화면이 많이 밋밋해 보이더라구요. 그래서 여러 채도의 회색을 섞여서
실제 아스팔트처럼 보이도록 반죽해서 그렸습니다.^^
이미지를 화면에 출력할 때 무작위로 8장의 이미지 중 1장을 골라서
바닥에 차곡차곡 깔리도록 했습니다. 전체 화면이 800 x 800 이라 총 64장이 깔리면 화면이 꽉 채워집니다.
class Background():
def __init__(self):
#super().__init__()
...
self.matrix = [[random.randint(0, 6) for _ in range(9)] for _ in range(9)]
def draw_tile(self, surface):
for y in range(0, 9):
for x in range(0, 9):
tile = self.matrix[y][x]
surface.blit(self.noline_maptile[tile], (x * 100, y * 100))
철조망 이미지도 추가했는데 해당 이미지는 반투명하도록 처리를 했습니다.
반투명으로 처리를 하지 않으면 철조망을 지나가는 좀비 뿐만 아니라
좀비 머리 위의 타이핑을 해야할 글자가 가려지기 때문입니다.
그리고
좀비가 철조망에 붙었을 때 망을 흔드는 모습도 그려봤습니다.
철조망에 좀비가 일정시간 동안 붙어 있으면
점점 철조망이 망가지면서 구멍이 생겨나도록 구현할 계획입니다.
우선 이번 포스팅에서는 철조망에 붙어서 저렇게 위아래로 흔드는 것까지만 구현하겠습니다.
def update(self):
if self.monster_status == cfg.WALK:
self.pos += self.speed
self.rect.center = self.pos
if self.rect.y > cfg.SCREEN_HEIGHT:
self.kill()
self.animation("LOOP")
elif self.monster_status == cfg.ATTACK:
self.animation("LOOP")
elif self.monster_status == cfg.DIE:
if self.animation_index == len(self.images) - 1:
self.animation("ONETIME")
self.opacity -= 3
self.image.set_alpha(self.opacity)
if self.opacity < 0:
self.kill()
else:
self.animation("LOOP")
지난 번 코드에 cfg.ATTACK 이라는 상태값 체크하는 코드를 추가했습니다.
animation 상태는 LOOP로 지정했는데 철조망을 흔드는 걸 반복 해야하기 때문에 LOOP로 지정했습니다.
좀비가 철조망 끝에서 딱 멈추게 하려면 어떻게 해야할까요?
철조망과 좀비의 높이는 서로 다릅니다.
철조망은 125px, 좀비는 86px입니다.
그렇다면 좀비의 위치 + 86px 의 값이 철조망의 위치 + 125px 보다 큰 경우에
좀비를 더이상 전진하지 못하도록 처리하면
마치 철조망에 걸린 것과 같은 연출이 가능합니다.
def check_fence(self):
if self.monster_status == "DIE":
pass
else:
if self.rect.y + self.rect.height >= cfg.FENCE_POSITION_Y and \
self.monster_status not in (cfg.DIE, cfg.ATTACK):
self.set_status("ATTACK")
위의 코드처럼 좀비의 상태값을 ATTACK로 변경하여 좀비 애니메이션을 변경하면 됩니다.
단, 여기서 좀비의 상태가 DIE 또는 ATTACK인 경우가 아닌 WAK인 경우에만 동작하도록 처리해야 합니다.
그렇지 않으면 단어를 맞게 타이핑을 해도 ATTACK 상태에서 DIE상태로 넘어가지 않고
철조망에서 계속 흔드는 상태로 남아 있게 됩니다.
전체 소스 코드를 올립니다.
실행 방법은 기존과 동일합니다. python 3.8 버전 이상 설치된 PC에서
첨부된 파일에 압축을 풀고 기본 경롤에서 python main.py 를 실행하시면 됩니다.
다음 강좌에서는 정확하게 좀비 위에 있는 단어를 정확하게 타이핑하면
람보가 기관총을 발사하면서 좀비가 쓰러지도록 구현할 계획입니다.
그리고 다음 강의에서는 좀비 캐릭터를 하나 더 추가할 예정입니다.
아래 이미지가 추가될 좀비 캐릭터입니다.
새로운 캐릭터 추가하면서
게임 개발 뿐만 아니라 모든 개발에 있어 가장 중요한 개념인
객체 지향 프로그래밍에 대해 설명할 생각입니다.
다음 포스팅에서 뵙겟습니다.
'게임공작소' 카테고리의 다른 글
타자 연습 게임, 타이핑 몬스터(6) - 플레이어 사망 및 사운드 (19) | 2025.03.16 |
---|---|
타자 연습 게임, 타이핑 몬스터(5) - 객체지향 (19) | 2025.02.15 |
타자 연습 게임, 타이핑 몬스터(3) - 애니메이션 (46) | 2025.01.12 |
타자 연습 게임, 타이핑 몬스터(2) - 프로토타입 (65) | 2024.12.21 |
타자 연습 게임, 타이핑 몬스터(1) - 게임기획 (100) | 2024.12.08 |