pygame 시각 화 행운 대 룰렛 실현

pygame 의 재 미 있 는 기술 지식 을 계속 공유 하 세 요.아래 를 보 세 요.
첫째,먼저 틀 을 세우다
(1)배경 그림 붙 이기:
在这里插入图片描述
구현 코드 는 다음 과 같 습 니 다:

import pygame

pygame.init()  #    pygame 
screen = pygame.display.set_mode((600, 600))  #       
pygame.display.set_caption('     ')  #       
tick = pygame.time.Clock()
fps = 10  #      ,         
#    
# bg = pygame.image.load("./     .png").convert()
#    
picture = pygame.transform.scale(pygame.image.load("./     .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))  #        
    screen.blit(bg, (0, 0))
    tick.tick(fps)
    pygame.display.flip()  #     

(2)중간의 원 을 늘린다.
핵심 코드:

pygame.draw.circle(screen,(255,255,0),(300,300),50)
코드 설명:
원형 그리 기 방법:pygame.draw.circle(Surface,color,pos,raduis,width)
그 중:
  • Surface 매개 변수:이 Surface 대상 에 동 그 란 Surface 대상 을 그 려 야 합 니 다
  • color 매개 변수:둥 근 선의 색 을 그 려 서 rgb 삼원 색 원 조 를 전달 해 야 합 니 다
  • pos 매개 변수:원심 의 좌표raduis 는 원 의 반지름 을 나타 낸다
  • width 매개 변수:원 을 그 리 는 선의 폭 을 나타 내 고 0 일 때 원 내 는 모두 채 워 집 니 다.
  • 효과 그림:
    在这里插入图片描述
    관련 코드 는 다음 과 같 습 니 다.
    
    import pygame
    
    pygame.init()  #    pygame 
    screen = pygame.display.set_mode((600, 600))  #       
    pygame.display.set_caption('     ')  #       
    tick = pygame.time.Clock()
    fps = 10  #      ,         
    #    
    # bg = pygame.image.load("./     .png").convert()
    #    
    picture = pygame.transform.scale(pygame.image.load("./     .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))  #        
        screen.blit(bg, (0, 0))
        pygame.draw.circle(screen,(255,255,0),(300,300),50)
        tick.tick(fps)
        pygame.display.flip()  #     
    (3)큰 돌 림 판 을 스스로 움 직 이게 한다.
    핵심 코드:
    
        newbg = pygame.transform.rotate(bg, angle)
        newRect = newbg.get_rect(center=(300,300))
        angle -= 1
        screen.blit(newbg, newRect)
    
    실행 효과:
    在这里插入图片描述
    관련 코드 는 다음 과 같 습 니 다.
    
    import pygame
    
    pygame.init()  #    pygame 
    screen = pygame.display.set_mode((600, 600))  #       
    pygame.display.set_caption('     ')  #       
    tick = pygame.time.Clock()
    fps = 10  #      ,         
    #    
    # bg = pygame.image.load("./     .png").convert()
    #    
    picture = pygame.transform.scale(pygame.image.load("./     .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))  #        
        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()  #     
    
    행운 의 작은 지침
    (1)작은 바늘 이 움 직 이지 않 고 돌 림 판 이 움직인다.
    실행 효과:
    在这里插入图片描述
    관련 코드 는 다음 과 같 습 니 다.
    
    import pygame
    
    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("./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()  #     
    
    
    (2)돌 림 판 이 움 직 이지 않 고 새끼손가락 이 움직인다.
    사고:돌 림 판 포인터 의 중심 점 은 원 의 궤적 에 따라 이동 한 다음 에 이동 하 는 과정 에서 대응 하 는 각 도 를 동기 화하 여 전체 포인터 가 한편 으로 이동 하고 한편 으로 는 회전 합 니 다.자 연 스 럽 게 중심 에 따라 회전 하 는 효 과 를 실현 하 였 다.
    1.먼저 포인터 사각형 상자 의 중심 점 이동
    코드 는 다음 과 같 습 니 다:
    
    import pygame,sys
    import math
    
    pygame.init()  #    pygame 
    screen = pygame.display.set_mode((600, 600))  #       
    pygame.display.set_caption('     ')  #       
    tick = pygame.time.Clock()
    fps = 100  #      ,         
    picture = pygame.transform.scale(pygame.image.load("./     .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.포인터 회전 증가(불완전한 버 전)
    코드 는 다음 과 같 습 니 다:
    
    import pygame,sys
    import math
    
    pygame.init()  #    pygame 
    screen = pygame.display.set_mode((600, 600))  #       
    pygame.display.set_caption('     ')  #       
    tick = pygame.time.Clock()
    fps = 100  #      ,         
    picture = pygame.transform.scale(pygame.image.load("./     .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.포인터 회전 증가(수정판)
    원래 math 라 이브 러 리 의 sin 과 cos 함수 가 전달 하 는 매개 변수 문 제 를 발견 하 였 습 니 다.
    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))
    
    대응 하 는 실행 효 과 는 다음 과 같 습 니 다.
    在这里插入图片描述
    빨리 실행 하려 면 angle 의 인 자 를 크게 만 들 면 됩 니 다.
    전체 코드 는 다음 과 같 습 니 다:
    
    import pygame
    import math
    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("./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()  #     
    
    
    3.수시 알고리즘 을 추가 하여 랜 덤 이벤트 실현
    이 알고리즘 을 직접 빌 렸 습 니 다:
    룰렛 은 세 부분 으로 나 뉜 다.1 등 상,2 등 상과 3 등 상.
    룰렛 을 돌 릴 때 는 랜 덤 이다.
    만약 범위 가[0,0.08)사이 라면 1 등 을 대표 한다.
    범위 가[0.08,0.3)사이 라면 대표 2 등 상,
    범위 가[0.3,1.0)사이 라면 3 등 을 대표 한다.
    이 알고리즘 을 함수 로 봉 합 니 다.관련 코드 는 다음 과 같 습 니 다.
    
    rewardDict = {
        '   ': (0, 0.03),
        '   ': (0.03, 0.2),
        '   ': (0.2, 1)
    }
    def rewardFun():
        """       """
        #     0~1      
        number = random.random()
        #           
        for k, v in rewardDict.items():
            if v[0] <= number < v[1]:
                return k
    
    4.시작 함수 증가
    
    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()
    
    
    5.끝 함수 증가
    
    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))
    
    
    6.최종 완전 효과 및 코드
    
    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("./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():
        """       """
        #     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/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()
    
    실행 효 과 는 다음 과 같 습 니 다:
    在这里插入图片描述
    마지막
    드디어 전체 사례 를 다 썼 는데 출근 하 는 과정 에서 시간 을 내 서 이런 블 로 그 를 쓰 는 것 이 정말 어렵 고 코드 가 쉽 지 않 으 며 수출 이 쉽 지 않 으 며 행 이 소중 하 다 는 것 을 알 게 되 었 다.
    안에 많은 세부 사항 이 있 습 니까?최적화 가 있 고 자신 이 많은 bug 를 발 견 했 습 니 다.보완 하고 개선 할 시간 이 많 지 않 습 니 다.여러분 들 이 소중 한 의견 을 많이 제시 하 시 는 것 을 환영 합 니 다.
    pygame 의 시각 화 된 행운 의 큰 돌 림 판 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 pygame 행운 의 큰 돌 림 판 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기