模拟幸运大转盘抽奖

  1. 初始化: 使用 pygame.init() 初始化 pygame 库,并设置窗口大小和标题。

  2. 加载资源: 加载背景图片和指针图片,并将其转换为适合显示的格式。

  3. 奖项设置: 通过 rewardDict 字典定义了三个奖项等级及其概率范围。

  4. 奖项函数 (rewardFun): 根据生成的随机数确定用户获得的奖项等级。

  5. 开始界面 (start 函数): 显示开始界面,等待用户按键开始游戏。

  6. 转盘旋转 (middle 函数): 根据角度旋转指针,并在旋转一定角度后通过 rewardFun 函数确定奖项,并调用 end 函数显示结果。

  7. 结束界面 (end 函数): 显示用户获得的奖项。

  8. 主逻辑: 在程序的最后,通过调用 startmiddle 函数启动游戏。

    import pygame,sys
    import math
    import random
    
    pygame.init()  # 初始化pygame类
    screen = pygame.display.set_mode((600, 600))  # 设置窗口大小
    pygame.display.set_caption('幸运大转盘')  # 设置窗口标题
    tick = pygame.time.Clock()
    fps = 10  # 设置刷新率,数字越大刷新率越高
    picture = pygame.transform.scale(pygame.image.load("./幸运大转盘.png"), (600, 600))
    bg=picture.convert()
    picture = pygame.transform.scale(pygame.image.load("./1.png"), (30, 230))
    hand = picture.convert_alpha()
    
    rewardDict = {
        'first level': (0, 0.03),
        'second level': (0.03, 0.2),
        'third level': (0.2, 1)
    }
    def rewardFun():
        """用户的得奖等级"""
        # 生成一个0~1之间的随机数
        number = random.random()
        # 判断随机转盘是几等奖
        for k, v in rewardDict.items():
            if v[0] <= number < v[1]:
                return k
    
    def start():
        while True:
            for event in pygame.event.get():
    
                # 处理退出事件
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()
                elif event.type == pygame.KEYDOWN:
                    if (event.key == pygame.K_ESCAPE):
                        pygame.quit()
                        sys.exit()
                    else:
                        return
            screen.blit(bg,(0,0))
            newRect = hand.get_rect(center=(300,150))
            screen.blit(hand,newRect)
    
            pygame.draw.circle(screen,(255,255,0),(300,300),50)
    
            textFont = pygame.font.Font("./font.ttf", 80)
            textSurface = textFont.render("go", True, (110, 55, 155))
            screen.blit(textSurface, (270, 230))
            pygame.display.update()
    
    def middle():
        angle = 0
        while True:
            posx = 300 + int(150 * math.sin(angle * math.pi / 180))
            posy = 300 - int(150 * math.cos(angle * math.pi / 180))
            print(posx, posy, math.sin(angle * math.pi / 180))
    
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    sys.exit()
            screen.blit(bg,(0,0))
    
            newhand = pygame.transform.rotate(hand, -angle)
    
            newRect = newhand.get_rect(center=(posx,posy))
            screen.blit(newhand,newRect)
            pygame.draw.circle(screen,(255,255,0),(300,300),50)
    
            angle += 10
    
            if angle > 500:
                k = rewardFun()
                end(k)
                break
    
            tick.tick(fps)
            pygame.display.flip()  # 刷新窗口
    
    
    def end(k):
        textFont = pygame.font.Font("./font.ttf", 50)
        print("恭喜你,你抽中了"+k)
        textSurface = textFont.render("your awards is :%s" % k, True, (110, 55, 155))
        screen.fill((155, 155, 0))
        screen.blit(textSurface, (30, 230))
    
    
    if __name__ == '__main__':
        start()
        middle()
    

  • 22
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值