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. 코드 실행 결과