↓ 지난 포스팅 ↓
게임개발일지 #1 - 파이썬으로 뱀서류 게임 만들어보기(feat.Pygame)
문득뱀파이어서바이벌 스러운 게임을 만들고 싶어짐 별 계획없이 무턱대고 시작해봄먼저 메모장에 텍스트로 만들고 싶은 게임에 대해 간단히 기술.(어떤형태의 맵인지, Enemies의 스폰 방식은 어
andersonlab.tistory.com
지난시간에는 시커먼 맵과 동그란 초록색의 원형 캐릭터를 만들어봄.
이번엔 맵을 한번 깔아보겠음.
대충 일러스트레이터+포토샵으로 아무렇게나 맵 작업ㅋㅋㅋㅋㅋ
import pygame
import sys
import random
# 초기화
pygame.init()
# 타일 이미지 리스트 만들기
tile_images = [
pygame.image.load("assets/bg_01.jpg").convert(),
pygame.image.load("assets/bg_02.jpg").convert(),
pygame.image.load("assets/bg_03.jpg").convert(),
pygame.image.load("assets/bg_04.jpg").convert(),
pygame.image.load("assets/bg_05.jpg").convert(),
pygame.image.load("assets/bg_06.jpg").convert(),
]
# 타일 크기 맞춰 조정
tile_images = [pygame.transform.scale(img, (TILE_SIZE, TILE_SIZE)) for img in tile_images]
# 월드 타일 맵 생성 (64x64 타일 맵 생성 예시)
WORLD_TILES = 64
tile_map = [[random.choice(tile_images) for _ in range(WORLD_TILES)] for _ in range(WORLD_TILES)]
# 월드 좌표 기준 타일 시작 위치
start_tile_x = (world_x // TILE_SIZE) - 1
start_tile_y = (world_y // TILE_SIZE) - 1
for tx in range(start_tile_x, start_tile_x + (SCREEN_WIDTH // TILE_SIZE) + 3):
for ty in range(start_tile_y, start_tile_y + (SCREEN_HEIGHT // TILE_SIZE) + 3):
# world 좌표 기준으로 실제 화면 위치 계산
screen_x = (tx * TILE_SIZE) - world_x
screen_y = (ty * TILE_SIZE) - world_y
# 맵 범위 안이면 타일 그리기
if 0 <= tx < WORLD_TILES and 0 <= ty < WORLD_TILES:
tile = tile_map[ty][tx]
screen.blit(tile, (screen_x, screen_y))
# 해상도 설정 (모바일 기준)
SCREEN_WIDTH = 540
SCREEN_HEIGHT = 960
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Game Project - Jay")
# 색상 정의
GREEN = (0, 255, 0) # 플레이어
BLACK = (0, 0, 0) # 배경
GRAY = (70, 70, 70)
# 타일 크기
TILE_SIZE = 250
# 플레이어 설정
PLAYER_RADIUS = 20
player_pos = (SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2) # 중앙 고정
# 월드 좌표 오프셋 (맵 이동용)
world_x = 0
world_y = 0
speed = 5
# FPS 설정
clock = pygame.time.Clock()
FPS = 60
# 게임 루프
running = True
while running:
clock.tick(FPS)
keys = pygame.key.get_pressed()
# 입력 처리 - 맵이 반대로 움직임
if keys[pygame.K_w]:
world_y += speed
if keys[pygame.K_s]:
world_y -= speed
if keys[pygame.K_a]:
world_x += speed
if keys[pygame.K_d]:
world_x -= speed
# 이벤트 처리
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 화면 초기화
screen.fill(BLACK)
# 플레이어 그리기
pygame.draw.circle(screen, GREEN, player_pos, PLAYER_RADIUS)
# 화면 업데이트
pygame.display.flip()
# 종료 처리
pygame.quit()
sys.exit()
맵 이미지 넣는 코드는 더 간결하게 할 수 있긴한데
일단 테스트하느라 유지보수때문에 대충 저렇게 함
그런데...?
File "C:\~~~\~~~\Desktop\game-python\main.py", line 10, in <module>
pygame.image.load("assets/bg_01.jpg").convert(),
pygame.error: No video mode has been set
오류가 난다.
왜 이럴까...?
"pygame.error: No video mode has been set"
pygame.image.load(...).convert() 전에 디스플레이가 설정되지 않은 것이었다...
디스플레이 설정을 더 위로 해주자.
하는 김에 전체적으로 조금 바꿔야겠음.
import pygame
import sys
import random
# 초기화
pygame.init()
# 해상도 설정 (모바일 기준)
SCREEN_WIDTH = 540
SCREEN_HEIGHT = 960
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Game Project - Jay")
# 색상 정의
GREEN = (0, 255, 0)
BLACK = (0, 0, 0)
# 타일 크기
TILE_SIZE = 250
# 맵 타일 개수 (64x64 크기)
WORLD_TILES = 64
# 플레이어 설정
PLAYER_RADIUS = 20
player_pos = (SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2)
# 월드 오프셋 (화면 기준 맵의 위치를 바꾸는 좌표)
world_x = 0
world_y = 0
speed = 5
# 타일 이미지 불러오기 및 리사이즈
tile_images = [
pygame.image.load("assets/tiles/bg_01.jpg").convert(),
pygame.image.load("assets/tiles/bg_02.jpg").convert(),
pygame.image.load("assets/tiles/bg_03.jpg").convert(),
pygame.image.load("assets/tiles/bg_04.jpg").convert(),
pygame.image.load("assets/tiles/bg_05.jpg").convert(),
pygame.image.load("assets/tiles/bg_06.jpg").convert(),
]
tile_images = [pygame.transform.scale(img, (TILE_SIZE, TILE_SIZE)) for img in tile_images]
# 랜덤 타일 맵 생성
tile_map = [[random.choice(tile_images) for _ in range(WORLD_TILES)] for _ in range(WORLD_TILES)]
# 플레이어 설정
PLAYER_RADIUS = 20
player_pos = (SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2) # 중앙 고정
# 월드 좌표 오프셋 (맵 이동용)
world_x = 0
world_y = 0
speed = 5
# FPS 설정
clock = pygame.time.Clock()
FPS = 60
# 게임 루프
running = True
while running:
clock.tick(FPS)
keys = pygame.key.get_pressed()
# 입력 처리 - 맵이 반대로 움직임
if keys[pygame.K_w]:
world_y += speed
if keys[pygame.K_s]:
world_y -= speed
if keys[pygame.K_a]:
world_x += speed
if keys[pygame.K_d]:
world_x -= speed
# 이벤트 처리
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 화면 초기화
screen.fill(BLACK)
# 타일 그리기
start_tile_x = (world_x // TILE_SIZE) - 1
start_tile_y = (world_y // TILE_SIZE) - 1
for tx in range(start_tile_x, start_tile_x + (SCREEN_WIDTH // TILE_SIZE) + 3):
for ty in range(start_tile_y, start_tile_y + (SCREEN_HEIGHT // TILE_SIZE) + 3):
screen_x = (tx * TILE_SIZE) - world_x
screen_y = (ty * TILE_SIZE) - world_y
if 0 <= tx < WORLD_TILES and 0 <= ty < WORLD_TILES:
tile = tile_map[ty][tx]
screen.blit(tile, (screen_x, screen_y))
# 플레이어 그리기
pygame.draw.circle(screen, GREEN, player_pos, PLAYER_RADIUS)
# 화면 업데이트
pygame.display.flip()
# 종료 처리
pygame.quit()
sys.exit()
실행해보자.
오 맵은 잘 나온다
근데 문제가...
일단, wasd 방향키가 반대로 인식됨
그리고, 위로 올라가면 검은 영역이 나옴
화면 초기화 코드
screen.fill(BLACK) 때문인가보다
굳이 필요없는 소스같음
다음시간엔 오류 잡고 캐릭터를 디자인해 얹어보겠음
'개발일지 > 게임' 카테고리의 다른 글
게임개발일지 #4 - 파이썬으로 뱀서류 게임 만들어보기(feat.Pygame) (0) | 2025.06.09 |
---|---|
게임개발일지 #3 - 파이썬으로 뱀서류 게임 만들어보기(feat.Pygame) (1) | 2025.06.08 |
게임개발일지 #1 - 파이썬으로 뱀서류 게임 만들어보기(feat.Pygame) (0) | 2025.05.29 |