一个叫做dyh的同学过生日,做了一个小作品送给他。
游戏特点:
完整代码:
import pygame
import sys
import pyautogui
import random
import time
# 人物
dyh_dict = {'1号dyh':'dyh1.png','2号dyh':'dyh2.png'}
# 选择游戏人物
dyh_ask = pyautogui.confirm('选择游戏人物', buttons=['1号dyh', '2号dyh'])
dyh = dyh_dict[dyh_ask]
# 选择游戏模式
mode = {'easy': 10, 'medium': 15, 'difficult': 20, 'super': 30}
mode_ask = pyautogui.confirm('选择游戏模式', buttons=['easy', 'medium', 'difficult','super'])
# 祝福语
wishes = ["生日快乐","你真帅",'厉害',"666"]
# 初始化pygame
pygame.init()
# 设置窗口的大小,单位为像素
screen = pygame.display.set_mode((1200, 800))
# 设置窗口标题
pygame.display.set_caption('生日快乐')
# 加载字体
my_font = pygame.font.Font("anna.ttf",40)
# 加载背景音乐
pygame.mixer.init()
pygame.mixer.music.load("birthday.mp3")
pygame.mixer.music.play(-1, 0)
# 加载音效
sound = pygame.mixer.Sound('pop.mp3')
# 加载气球素材
balloon1 = pygame.image.load("balloon1.png")
balloon1 = pygame.transform.scale(balloon1, (200, 200)) #转化大小
balloon2 = pygame.image.load("balloon2.png")
balloon2 = pygame.transform.scale(balloon2, (200, 200)) #转化大小
angle = 20
balloon1_list = []
balloon2_list = []
for i in range(5):
balloon1= pygame.transform.rotate(balloon1, angle) #旋转
balloon2 = pygame.transform.rotate(balloon2, angle) #旋转
balloon1_list.append(balloon1)
balloon2_list.append(balloon2)
angle-=10
# 气球计数
i = 0
# 加载主角dyh
dyh_img = pygame.image.load(dyh)
dyh_img_size = dyh_img.get_size()
if dyh=='dyh2.png':
dyh_img_new_size = (dyh_img_size[0]//2,dyh_img_size[1]//2)
dyh_img = pygame.transform.scale(dyh_img, dyh_img_new_size)
dyh_img_size = dyh_img.get_size()
# 初始主角位置
pos_x = (1200-dyh_img_size[0])//2
pos_y = 800-dyh_img_size[1]
# 加载礼物
gift_list = []
for i in range(1,8):
gift_img = pygame.image.load(f'{i}.png')
gift_img_size = gift_img.get_size()
gift_img_new_size = (gift_img_size[0]//2,gift_img_size[1]//2)
gift_img = pygame.transform.scale(gift_img, gift_img_new_size)
gift_list.append(gift_img)
gift_x = random.randint(200,1000)
gift_y = random.randint(-300,0)
gift_img =random.choice(gift_list)
gift_img_size =gift_img.get_size()
# 时钟
clock = pygame.time.Clock()
# 是否显示祝福语开关
is_display = False
# 程序主循环
while True:
# 每秒30次
clock.tick(10)
# 事件处理
for event in pygame.event.get():
# 判断事件是否为退出事件
if event.type == pygame.QUIT:
# 退出pygame
pygame.quit()
# 退出系统
sys.exit()
key_list = pygame.key.get_pressed()
if key_list[pygame.K_RIGHT]:
pos_x += 20
elif key_list[pygame.K_LEFT]:
pos_x -= 20
# 逻辑处理
# gift 下落
gift_y += mode[mode_ask]
if gift_y>800:
gift_x = random.randint(200,1000)
gift_y = random.randint(-300,0)
gift_img =random.choice(gift_list)
gift_img_size =gift_img.get_size()
# 碰撞检测
if gift_y + gift_img_size[1] > pos_y:
if (pos_x < gift_x < pos_x +dyh_img_size[0]) or (pos_x < gift_x+gift_img_size[0] < pos_x +dyh_img_size[0]):
wishesImage = my_font.render(random.choices(wishes,[0.5, 0.2, 0.2, 0.1],k=1)[0], True, (255,0,0))
sound.play()
is_display = True
start = time.time()
gift_x = random.randint(200,1000)
gift_y = random.randint(-300,0)
gift_img =random.choice(gift_list)
gift_img_size =gift_img.get_size()
# 渲染图形
# 绘制背景
screen.fill((0,255,255))
# 绘制气球
i = i + 1
screen.blit(balloon1_list[i%5],(50,100))
screen.blit(balloon2_list[i%5],(950,150))
# 绘制dyh
screen.blit(dyh_img,(pos_x,pos_y))
# 绘制gift
screen.blit(gift_img,(gift_x,gift_y))
# 绘制文字
textImage = my_font.render('mode:'+ mode_ask, True, (255,0,0))
screen.blit(textImage, (1000, 10))
# 碰到礼物就绘制祝福语,持续两秒
if is_display:
end = time.time()
if end-start<1:
screen.blit(wishesImage, (pos_x, pos_y))
else:
is_display=False
# 刷新屏幕
pygame.display.update()
(全文完)