前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 做一个生日游戏

python 做一个生日游戏

作者头像
叶子陪你玩
发布2021-09-15 10:51:37
6540
发布2021-09-15 10:51:37
举报

一个叫做dyh的同学过生日,做了一个小作品送给他。

游戏特点:

  • 游戏有两个人物可选择(用的两张不同照片表示,照片来自好几年前上课照片,简单处理了一下)
  • 4级难度选择
  • 画面气球会动,营造氛围
  • 游戏带有生日背景音乐
  • 接到礼物音效
  • 碰到不同的礼物会出现不同的祝福语,祝福语会悬挂在头上持续1秒钟,生日快乐的祝福语出现概率最高50%,你真帅20%,厉害20%,666 10%。

完整代码:

代码语言:javascript
复制
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()

(全文完)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 叶子陪你玩编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档