개발 꿀팁/PYTHON

파이썬 크리스마스 선물 그리기

Jammie 2022. 11. 21. 15:34
반응형

일 년에 한 번 있는 크리스마스가 왔네요, 올해 크리스마스는 어떻게 보낼 계획입니까?누구와 함께 보내든, 내가 파이썬으로 여러분을 위해 준비한 크리스마스 선물부터 만나보세요!

1, 로딩 라이브러리
​  ​
본문의 크리스마스 선물을 실현하려면 먼저 파이썬에 아래 라이브러리를 로드해야 합니다

import pygame
import random
import os
from turtle import *
from pygame.locals import *
import tkinter as tk
from PIL import Image
from tkinter import filedialog

2.배경사진과 음악 선택
​  ​
아래와 같은 코드에 따라 원하는 배경 이미지와 음악을 커스터마이징 할 수 있다

root = tk.Tk( )
root.withdraw( )
​
Folderpath = filedialog.askdirectory (title = '그림 저장할 폴더를 선택하십시오') # 선택한 폴더 가져오기
bgpath = filedialog.askopenfilename (title = '배경 그림을 선택하십시오')
mucpath = filedialog.askopenfilename (title = '음악을 선택하십시오')
os.chdir(Folderpath)

위의 코드를 실행하면 컴퓨터 바탕화면 팝업창에 파일을 저장할 폴더, 배경 사진, 음악을 차례로 선택하라는 메시지가 나타납니다.

​  ​
​  ​

3. 동적 효과 설정 및 음악 재생
​  ​
이어서 다음과 같은 코드로 동적 효과를 제어하고 음악을 재생한다

pygame.init( ) #pygame 초기화
SIZE = (790, 430) #화면 가로세로 설정, 배경화면에 맞게 조정(또는 이미지 조정)
bg_size = width, height = 300, 200 # 인터페이스 창 시작 및 닫기 설정
bg_rgb = (255, 255, 255)
screen = pygame.display.set_mode(bg_size)
screen = pygame.display.set_mode(SIZE)
screen1 = pygame.display.set_mode(SIZE)
pygame.display.set_caption("즐거운 크리스마스")
ori_bg = Image.open(bgpath)
new_bg = ori_bg.resize(790,430))
new_bg.save(Folderpath + '/new_bg.gif')
bg = pygame.image.load(Folderpath + '/new_bg.gif')
snow_list = [] #눈송이 목록
fori in range(300):
x_site = random.randrange(0, SIZE[0]) #눈꽃의 중심 위치
y_site = random.randrange(0, SIZE[1]) #눈꽃의 중심 위치
X_shift = random.randint(-1, 1) #x축 오프셋
radius = random.randint(4, 6) #반경과 y주위 강하량
snow_list.append([x_site, y_site, X_shift, radius])
clock = pygame.time.Clock () # 프레임 레이트 객체 생성
track = pygame.mixer.music.load (mucpath) # 음악 파일 로드
pygame.mixer.music.play () # 음악 스트리밍 시작
pygame.mixer.music.fadeout(600000) #음악이 얼마나 오랫동안 희미하게 끝날지 설정
play_image = pygame.image.load (bgpath).convert_alpha( ) # 재생 그림 만들기surface 개체
pause_image = pygame.image.load (bgpath).convert_alpha( ) # 일시 중지된 그림 surface 개체 만들기
pause_rect = pause_image.get_rect( ) # 재생 직사각형 상자 가져오기
print(pause_rect.width,pause_rect.height) # 일시정지 직사각형 상자 가져오기
pause_rect.left, pause_rect.top = (width - pause_rect.width) // 2, (height - pause_rect.height) // 2
pause = False # 재생 플래그 비트 정의
while True:
# 큐 이벤트 찾기
for event in pygame.event.get():
# 창 닫기 이벤트 찾기
if event.type == pygame.QUIT:
sys.exit( )

# 마우스 오른쪽 클릭 이벤트 찾기
if event.type == MOUSEBUTTONDOWN:
# 마우스 왼쪽 단추를 눌렀는지 확인합니다
if event.button == 1:
pause = not pause

# 마우스 오른쪽 단추를 눌렀는지 확인합니다
if event.button == 3:
pause = not pause

# 키가 눌렸는지 감지하기
if event.type == KEYDOWN:
# 스페이스 키 눌림 감지하기
if event.key == K_SPACE:
pause = not pause

# 인터페이스 배경 채우기
screen.fill(bg_rgb)

# 공백으로 재생과 일시 중단을 제어하고 적절한 그림을 표시합니다
if pause:
pygame.mixer.music.pause( )
screen.blit(pause_image, pause_rect)
else:
pygame.mixer.music.unpause( )
screen.blit(play_image, pause_rect)

screen1.blit(bg, (0, 0)) #사진 배경
j = 0
for i in range(len(snow_list):
j + = 1
if j<10:
pygame.draw.circle(screen1, (255, 255, 255), snow_list[i][:2], snow_list[i][3]-3)
elif j<20:
pygame.draw.circle(screen1, (random.randint(200, 255), random.randint(200, 255), random.randint(200, 255)), snow_list[i][:2], snow_list[i][3]-3]
elif j<30:
pygame.draw.circle(screen1, (random.randint(100, 200), random.randint(100, 200), random.randint(100, 200), snow_list[i][:2], snow_list[i][3]-3]
elif j<40:
pygame.draw.circle(screen1, (random.randint(0, 100), random.randint(0, 100), random.randint(0, 100), snow_list[i][:2], snow_list[i][3]-3]
else:
pygame.draw.circle(screen1, (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)), snow_list[i][:2], snow_list[i][3]-3]
# 눈송이 위치 이동(다음 사이클 효과)
snow_list[i][0] += snow_list[i][2]
snow_list[i][1] += snow_list[i][3]
if snow_list[i][1] > SIZE[1]: #눈송이의 위치가 화면을 넘어갔는지 여부를 판단한다. 예, 위치 재설정
snow_list[i][0] = random.randrange(0, SIZE[0])
snow_list[i][1] = random.randrange(0, SIZE[1])
​
pygame.display.flip( ) # 화면 새로 고침
clock.tick(20)
pygame.quit( ) #종료

 

반응형

'개발 꿀팁 > PYTHON' 카테고리의 다른 글

가장 완전한 파이썬 작업 엑셀  (0) 2022.11.22
【Pytho상용 함수]  (0) 2022.11.22
[python] 설날 불꽃쇼  (0) 2022.11.21
python등롱을 그리다  (0) 2022.11.21
[파이썬은 오리를 그릴 수 있다]  (1) 2022.11.21