欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

pygame可視化幸運(yùn)大轉(zhuǎn)盤實(shí)現(xiàn)

 更新時(shí)間:2021年04月28日 09:22:42   作者:dhjabc_1  
這篇文章主要介紹了pygame可視化幸運(yùn)大轉(zhuǎn)盤實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

繼續(xù)分享pygame有趣的技術(shù)知識(shí),歡迎往下看。

一、先搭個(gè)架子

(一)黏貼背景圖:

在這里插入圖片描述

實(shí)現(xiàn)代碼如下:

import pygame

pygame.init()  # 初始化pygame類
screen = pygame.display.set_mode((600, 600))  # 設(shè)置窗口大小
pygame.display.set_caption('幸運(yùn)大轉(zhuǎn)盤')  # 設(shè)置窗口標(biāo)題
tick = pygame.time.Clock()
fps = 10  # 設(shè)置刷新率,數(shù)字越大刷新率越高
# 方法一
# bg = pygame.image.load("./幸運(yùn)大轉(zhuǎn)盤.png").convert()
# 方法二
picture = pygame.transform.scale(pygame.image.load("./幸運(yùn)大轉(zhuǎn)盤.png"), (600, 600))
bg=picture.convert()

while True:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    # screen.fill((255, 255, 0))  # 設(shè)置背景為白色
    screen.blit(bg, (0, 0))
    tick.tick(fps)
    pygame.display.flip()  # 刷新窗口

(二)增加中間的圈圈

核心代碼:

pygame.draw.circle(screen,(255,255,0),(300,300),50)

代碼解釋:

繪制圓形方法:pygame.draw.circle(Surface, color, pos , raduis, width)

其中:

  • Surfuce參數(shù): 傳入需要在該Surface對(duì)象上繪制圓形的Surface對(duì)象
  • color參數(shù): 需要繪制圓形的線的顏色,傳入一個(gè)rgb三原色元組
  • pos參數(shù):圓心的坐標(biāo)
  • raduis 表示圓的半徑
  • width參數(shù):表示繪制圓的線的寬度,當(dāng)為0時(shí),圓內(nèi)全部被填充

效果圖:

在這里插入圖片描述

相關(guān)代碼如下:

import pygame

pygame.init()  # 初始化pygame類
screen = pygame.display.set_mode((600, 600))  # 設(shè)置窗口大小
pygame.display.set_caption('幸運(yùn)大轉(zhuǎn)盤')  # 設(shè)置窗口標(biāo)題
tick = pygame.time.Clock()
fps = 10  # 設(shè)置刷新率,數(shù)字越大刷新率越高
# 方法一
# bg = pygame.image.load("./幸運(yùn)大轉(zhuǎn)盤.png").convert()
# 方法二
picture = pygame.transform.scale(pygame.image.load("./幸運(yùn)大轉(zhuǎn)盤.png"), (600, 600))
bg=picture.convert()

while True:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    # screen.fill((255, 255, 0))  # 設(shè)置背景為白色
    screen.blit(bg, (0, 0))
    pygame.draw.circle(screen,(255,255,0),(300,300),50)
    tick.tick(fps)
    pygame.display.flip()  # 刷新窗口

(三)讓大轉(zhuǎn)盤自己動(dòng)起來(lái)

核心代碼:

    newbg = pygame.transform.rotate(bg, angle)
    newRect = newbg.get_rect(center=(300,300))
    angle -= 1
    screen.blit(newbg, newRect)

運(yùn)行效果:

在這里插入圖片描述

相關(guān)代碼如下:

import pygame

pygame.init()  # 初始化pygame類
screen = pygame.display.set_mode((600, 600))  # 設(shè)置窗口大小
pygame.display.set_caption('幸運(yùn)大轉(zhuǎn)盤')  # 設(shè)置窗口標(biāo)題
tick = pygame.time.Clock()
fps = 10  # 設(shè)置刷新率,數(shù)字越大刷新率越高
# 方法一
# bg = pygame.image.load("./幸運(yùn)大轉(zhuǎn)盤.png").convert()
# 方法二
picture = pygame.transform.scale(pygame.image.load("./幸運(yùn)大轉(zhuǎn)盤.png"), (600, 600))
bg=picture.convert()

angle = 0
while True:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    # screen.fill((255, 255, 0))  # 設(shè)置背景為白色
    newbg = pygame.transform.rotate(bg, angle)
    newRect = newbg.get_rect(center=(300,300))
    angle -= 1
    screen.blit(newbg, newRect)

    # screen.blit(bg, (0, 0))
    pygame.draw.circle(screen,(255,255,0),(300,300),50)
    tick.tick(fps)
    pygame.display.flip()  # 刷新窗口

二、再加個(gè)指針,幸運(yùn)的小指針

(一)小指針不動(dòng),轉(zhuǎn)盤動(dòng)

運(yùn)行效果:

在這里插入圖片描述

相關(guān)代碼如下:

import pygame

pygame.init()  # 初始化pygame類
screen = pygame.display.set_mode((600, 600))  # 設(shè)置窗口大小
pygame.display.set_caption('幸運(yùn)大轉(zhuǎn)盤')  # 設(shè)置窗口標(biāo)題
tick = pygame.time.Clock()
fps = 10  # 設(shè)置刷新率,數(shù)字越大刷新率越高
picture = pygame.transform.scale(pygame.image.load("./幸運(yùn)大轉(zhuǎn)盤.png"), (600, 600))
bg=picture.convert()
picture = pygame.transform.scale(pygame.image.load("./hand.png"), (30, 230))
hand = picture.convert_alpha()
angle = 0
while True:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    newbg = pygame.transform.rotate(bg, angle)
    newRect = newbg.get_rect(center=(300,300))
    angle -= 1
    screen.blit(newbg, newRect)

    newRect = hand.get_rect(center=(300,150))
    screen.blit(hand,newRect)
    
    pygame.draw.circle(screen,(255,255,0),(300,300),50)
    tick.tick(fps)
    pygame.display.flip()  # 刷新窗口

(二)轉(zhuǎn)盤不動(dòng),小指針動(dòng)

思路:轉(zhuǎn)盤指針的框的中心點(diǎn)按照?qǐng)A的軌跡進(jìn)行移動(dòng),然后在移動(dòng)的過(guò)程中同步旋轉(zhuǎn)對(duì)應(yīng)的角度,這樣就整個(gè)指針一方面移動(dòng),一方面轉(zhuǎn)動(dòng)。實(shí)現(xiàn)了自然的按照中心旋轉(zhuǎn)的效果了。

1、先自己畫指針矩形框的中心點(diǎn)移動(dòng)

代碼如下:

import pygame,sys
import math

pygame.init()  # 初始化pygame類
screen = pygame.display.set_mode((600, 600))  # 設(shè)置窗口大小
pygame.display.set_caption('幸運(yùn)大轉(zhuǎn)盤')  # 設(shè)置窗口標(biāo)題
tick = pygame.time.Clock()
fps = 100  # 設(shè)置刷新率,數(shù)字越大刷新率越高
picture = pygame.transform.scale(pygame.image.load("./幸運(yùn)大轉(zhuǎn)盤.png"), (600, 600))
bg=picture.convert()
picture = pygame.transform.scale(pygame.image.load("./hand.png"), (30, 230))
hand = picture.convert_alpha()
angle = 0
pos_list = []
while True:
    posx = 300+int(150*math.sin(135+angle/360))
    posy = 300+int(150*math.cos(135+angle/360))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    screen.blit(bg,(0,0))
    pos_list.append((posx,posy))
    for pos in pos_list:
        pygame.draw.circle(screen, (0, 0, 0), pos, 1)
    angle -= 2
    pygame.draw.circle(screen,(255,255,0),(300,300),80)
    tick.tick(fps)
    pygame.display.flip()  # 刷新窗口

效果如下:

在這里插入圖片描述

2、增加指針轉(zhuǎn)動(dòng)(不完善的版本)

代碼如下:

import pygame,sys
import math

pygame.init()  # 初始化pygame類
screen = pygame.display.set_mode((600, 600))  # 設(shè)置窗口大小
pygame.display.set_caption('幸運(yùn)大轉(zhuǎn)盤')  # 設(shè)置窗口標(biāo)題
tick = pygame.time.Clock()
fps = 100  # 設(shè)置刷新率,數(shù)字越大刷新率越高
picture = pygame.transform.scale(pygame.image.load("./幸運(yùn)大轉(zhuǎn)盤.png"), (600, 600))
bg=picture.convert()
picture = pygame.transform.scale(pygame.image.load("./hand.png"), (30, 230))
hand = picture.convert_alpha()
angle = 0
pos_list = []
while True:
    posx = 300+int(150*math.sin(135+angle/360))
    posy = 300+int(150*math.cos(135+angle/360))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    screen.blit(bg,(0,0))
    pos_list.append((posx,posy))
    for pos in pos_list:
        pygame.draw.circle(screen, (0, 0, 0), pos, 1)
    newhand = pygame.transform.rotate(hand, angle/6)
    # old_center = rect.center
    newRect = newhand.get_rect(center=(posx,posy))
    screen.blit(newhand,newRect)
    pygame.draw.rect(screen, (255,0,0), newRect, 1)
    # if angle>-10:
    angle -= 2
    print(angle)
    if angle < -2250:
        angle = 0

    pygame.draw.circle(screen,(255,255,0),(300,300),80)
    tick.tick(fps)
    pygame.display.flip()  # 刷新窗口

效果如下:

在這里插入圖片描述

3、增加指針轉(zhuǎn)動(dòng)(修正版)

發(fā)現(xiàn)原來(lái)是math類庫(kù)中的sin和cos函數(shù)傳遞的參數(shù)問(wèn)題。

Math.Sin()里面的是弧度制。 如果是sin(30),就用Math.Sin(Math.PI*30.0/180.0);

因此主要修改的代碼如下:

    posx = 300 + int(150 * math.sin(angle * math.pi / 180))
    posy = 300 - int(150 * math.cos(angle * math.pi / 180))

對(duì)應(yīng)的運(yùn)行效果如下:

在這里插入圖片描述

想運(yùn)行快點(diǎn)的話,就把a(bǔ)ngle的參數(shù)變大就好。

完整代碼如下:

import pygame
import math
pygame.init()  # 初始化pygame類
screen = pygame.display.set_mode((600, 600))  # 設(shè)置窗口大小
pygame.display.set_caption('幸運(yùn)大轉(zhuǎn)盤')  # 設(shè)置窗口標(biāo)題
tick = pygame.time.Clock()
fps = 10  # 設(shè)置刷新率,數(shù)字越大刷新率越高
picture = pygame.transform.scale(pygame.image.load("./幸運(yùn)大轉(zhuǎn)盤.png"), (600, 600))
bg=picture.convert()
picture = pygame.transform.scale(pygame.image.load("./hand.png"), (30, 230))
hand = picture.convert_alpha()
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)
    angle += 10
    pygame.draw.circle(screen,(255,255,0),(300,300),50)
    tick.tick(fps)
    pygame.display.flip()  # 刷新窗口

三、增加隨時(shí)數(shù)算法,實(shí)現(xiàn)隨機(jī)事件

直接借用了這個(gè)算法:

輪盤分為三部分: 一等獎(jiǎng), 二等獎(jiǎng)和三等獎(jiǎng);
輪盤轉(zhuǎn)的時(shí)候是隨機(jī)的,
如果范圍在[0,0.08)之間,代表一等獎(jiǎng),
如果范圍在[0.08,0.3)之間,代表2等獎(jiǎng),
如果范圍在[0.3, 1.0)之間,代表3等獎(jiǎng),

把該算法封裝成函數(shù),相關(guān)代碼如下:

rewardDict = {
    '一等獎(jiǎng)': (0, 0.03),
    '二等獎(jiǎng)': (0.03, 0.2),
    '三等獎(jiǎng)': (0.2, 1)
}
def rewardFun():
    """用戶的得獎(jiǎng)等級(jí)"""
    # 生成一個(gè)0~1之間的隨機(jī)數(shù)
    number = random.random()
    # 判斷隨機(jī)轉(zhuǎn)盤是幾等獎(jiǎng)
    for k, v in rewardDict.items():
        if v[0] <= number < v[1]:
            return k

四、增加開(kāi)始函數(shù)

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/font.ttf", 80)
        textSurface = textFont.render("go", True, (110, 55, 155))
        screen.blit(textSurface, (270, 230))
        pygame.display.update()

五、增加結(jié)束函數(shù)

def end(k):
    textFont = pygame.font.Font("./font/font.ttf", 50)
    textSurface = textFont.render("your awards is :%s" % k, True, (110, 55, 155))
    screen.fill((155, 155, 0))
    screen.blit(textSurface, (30, 230))

六、最終完整效果及代碼

import pygame,sys
import math
import random

pygame.init()  # 初始化pygame類
screen = pygame.display.set_mode((600, 600))  # 設(shè)置窗口大小
pygame.display.set_caption('幸運(yùn)大轉(zhuǎn)盤')  # 設(shè)置窗口標(biāo)題
tick = pygame.time.Clock()
fps = 10  # 設(shè)置刷新率,數(shù)字越大刷新率越高
picture = pygame.transform.scale(pygame.image.load("./幸運(yùn)大轉(zhuǎn)盤.png"), (600, 600))
bg=picture.convert()
picture = pygame.transform.scale(pygame.image.load("./hand.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():
    """用戶的得獎(jiǎng)等級(jí)"""
    # 生成一個(gè)0~1之間的隨機(jī)數(shù)
    number = random.random()
    # 判斷隨機(jī)轉(zhuǎn)盤是幾等獎(jiǎng)
    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/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)

        tick.tick(fps)
        pygame.display.flip()  # 刷新窗口


def end(k):
    textFont = pygame.font.Font("./font/font.ttf", 50)
    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()

運(yùn)行效果如下:

在這里插入圖片描述

七、尾聲

總算完整寫完了整個(gè)案例,發(fā)現(xiàn)通過(guò)在上班過(guò)程中抽空寫這些博客,真的很難,碼字不易、輸出不易,且行且珍惜。
里面有很多細(xì)節(jié)么有優(yōu)化、自己都發(fā)現(xiàn)很多bug,沒(méi)有很多的時(shí)間去完善和改進(jìn),歡迎各位多多提出寶貴意見(jiàn)。

到此這篇關(guān)于pygame可視化幸運(yùn)大轉(zhuǎn)盤實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)pygame 幸運(yùn)大轉(zhuǎn)盤內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論