Python
Python: 연습 8 (가상 애완동물 키우기 [터미널 or GUI])
이지파이
2025. 5. 2. 15:18
가상 애완동물 키우기 프로젝트(터미널 or GUI)가상 애완동물 키우기 프로젝트를 진행해보려고 한다. 이건 기존의 프로젝트들에 비해 다소 간단하고 유치해 보일 수 있지만 잠깐 쉬어가는 타임으로 만들어 봤다.
Step 1. 기본 게임 화면 + 움직이는 강아지
1. python 코드
import pygame
import sys
# 초기화
pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("🐶 강아지 키우기 게임 Step 1")
clock = pygame.time.Clock()
# 색상
WHITE = (255, 255, 255)
# 강아지 이미지 로드 + 크기 줄이기 (예: 100x100 픽셀로)
dog_img = pygame.image.load('puppy.png')
dog_img = pygame.transform.scale(dog_img, (100, 100))
dog_rect = dog_img.get_rect()
dog_rect.center = (400, 300)
# 이동 속도
speed_x = 3
# 게임 루프
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 강아지 이동
dog_rect.x += speed_x
if dog_rect.right >= 800 or dog_rect.left <= 0:
speed_x = -speed_x
# 화면 그리기
screen.fill(WHITE)
screen.blit(dog_img, dog_rect)
pygame.display.flip()
clock.tick(60)
pygame.quit()
sys.exit()
2. 코드 실행
terminal 에서 아래와 같이 실행
cd "c:/Users/kwater/Desktop/Python 연습/virtual_pet"
python virtual_pet.py
3. 코드 실행 결과
실행 결과 아래와 같은 창이 뜨면서 강아지가 움직인다.
Step 2. 기본 게임 화면 + 움직이는 강아지
목표
화면에 버튼 추가 (밥 주기, 놀아주기, 재우기, 씻기기) |
각 버튼 클릭 → 강아지 상태 변화 |
화면 상단에 강아지 상태(배고픔, 행복, 졸음, 청결) 표시 |
1. python 코드
import pygame
import sys
# 초기화
pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("🐶 강아지 키우기 게임 (이미지 버튼)")
clock = pygame.time.Clock()
font = pygame.font.Font("C:/Windows/Fonts/malgun.ttf", 24)
# 색상
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
# 강아지 이미지 로드 + 크기 줄이기
dog_img = pygame.image.load('puppy.png')
dog_img = pygame.transform.scale(dog_img, (100, 100))
dog_rect = dog_img.get_rect()
dog_rect.center = (400, 300)
# 버튼 이미지 로드 + 크기 줄이기
feed_img = pygame.image.load('feed.png')
toy_img = pygame.image.load('toy.png')
nap_img = pygame.image.load('nap.png')
bath_img = pygame.image.load('bath.png')
feed_img = pygame.transform.scale(feed_img, (60, 60))
toy_img = pygame.transform.scale(toy_img, (60, 60))
nap_img = pygame.transform.scale(nap_img, (60, 60))
bath_img = pygame.transform.scale(bath_img, (60, 60))
# 버튼 rect 설정
button_rects = {
"밥 주기": pygame.Rect(50, 500, 60, 60),
"놀아주기": pygame.Rect(250, 500, 60, 60),
"재우기": pygame.Rect(450, 500, 60, 60),
"씻기기": pygame.Rect(650, 500, 60, 60)
}
# 상태값
hunger = 50
happiness = 50
sleepiness = 50
cleanliness = 50
# 움직임 상태
is_happy = False
happy_timer = 0
base_x = 400
shake_offset = 0
shake_direction = 1
shake_range = 10
# 게임 루프
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN:
mx, my = event.pos
for text, rect in button_rects.items():
if rect.collidepoint(mx, my):
if text == "밥 주기":
hunger = max(0, hunger - 10)
is_happy = True
happy_timer = 120
elif text == "놀아주기":
happiness = min(100, happiness + 10)
is_happy = True
happy_timer = 120
elif text == "재우기":
sleepiness = max(0, sleepiness - 10)
elif text == "씻기기":
cleanliness = min(100, cleanliness + 10)
# 상태 변화
hunger = min(100, hunger + 0.02)
happiness = max(0, happiness - 0.02)
sleepiness = min(100, sleepiness + 0.02)
cleanliness = max(0, cleanliness - 0.02)
# 강아지 이동 (행복할 때만 좌우 흔들림)
if is_happy:
shake_offset += shake_direction
if abs(shake_offset) >= shake_range:
shake_direction *= -1
dog_rect.x = base_x + shake_offset
happy_timer -= 1
if happy_timer <= 0:
is_happy = False
dog_rect.x = base_x
# 화면 그리기
screen.fill(WHITE)
screen.blit(dog_img, dog_rect)
# 상태 표시
hunger_text = font.render(f"배고픔: {int(hunger)}", True, BLACK)
happiness_text = font.render(f"행복도: {int(happiness)}", True, BLACK)
sleepiness_text = font.render(f"졸음: {int(sleepiness)}", True, BLACK)
cleanliness_text = font.render(f"청결: {int(cleanliness)}", True, BLACK)
screen.blit(hunger_text, (50, 30))
screen.blit(happiness_text, (250, 30))
screen.blit(sleepiness_text, (450, 30))
screen.blit(cleanliness_text, (650, 30))
# 버튼 이미지 그리기
screen.blit(feed_img, button_rects["밥 주기"].topleft)
screen.blit(toy_img, button_rects["놀아주기"].topleft)
screen.blit(nap_img, button_rects["재우기"].topleft)
screen.blit(bath_img, button_rects["씻기기"].topleft)
pygame.display.flip()
clock.tick(60)
pygame.quit()
sys.exit()
2. 코드 실행
terminal 에서 아래와 같이 실행
python virtual_pet.py
3. 코드 실행 결과