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)
그 중:
관련 코드 는 다음 과 같 습 니 다.
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 행운 의 큰 돌 림 판 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
완전히 처음부터 시작하는 보드 게임의 프로그래밍과 기계 학습 [4 일째]평소 Python의 기본적인 사용법을 배웠으므로, 드디어 Pygame을 사용하여 게임 제작의 입구로 발길을 가고 싶습니다. Pygame은 Simple DirectMedia Layer (SDL)라고 불리는 다른 게임 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.