[Python] 纯文本查看 复制代码
import pygame
import sys
import random
# 初始化Pygame
pygame.init()
# 屏幕设置
WIDTH, HEIGHT = 800, 400
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("滚动抽奖小游戏")
# 颜色定义
BACKGROUND = (30, 30, 30)
HIGHLIGHT = (255, 255, 0)
PRIZE_COLORS = [
(220, 20, 60), (30, 144, 255), (50, 205, 50),
(255, 140, 0), (148, 0, 211), (0, 191, 255),
(255, 215, 0), (244, 164, 96), (255, 99, 71),
]
TEXT_COLOR = (255, 255, 255)
# 奖品设置
PRIZES = [
"iPhone", "iPad", "MacBook", "PS5", "智能手表",
"耳机", "无人机", "咖啡机", "谢谢参与"
]
# 字体设置
FONT = pygame.font.SysFont("SimHei", 28)
# 按钮设置
BUTTON_COLOR = (70, 130, 180)
BUTTON_HOVER_COLOR = (100, 149, 237)
BUTTON_RECT = pygame.Rect(WIDTH // 2 - 75, HEIGHT - 80, 150, 50)
# 奖品滚动区域设置
PRIZE_WIDTH = 120
PRIZE_HEIGHT = 80
PRIZE_SPACING = 20
SCROLL_SPEED = 10 # 奖品滚动速度
# 奖品初始位置
prizes = []
for i, prize in enumerate(PRIZES):
x = i * (PRIZE_WIDTH + PRIZE_SPACING)
prizes.append({"name": prize, "color": PRIZE_COLORS[i % len(PRIZE_COLORS)], "x": x})
# 游戏状态
scrolling = False
result = None
# 固定框选区域
FRAME_WIDTH = PRIZE_WIDTH + PRIZE_SPACING
FRAME_HEIGHT = PRIZE_HEIGHT + 20
FRAME_X = (WIDTH - FRAME_WIDTH) // 2
FRAME_Y = (HEIGHT - PRIZE_HEIGHT) // 2 - 10
# 游戏主循环
clock = pygame.time.Clock()
def draw_prizes():
"""绘制滚动奖品"""
for prize in prizes:
# 绘制奖品矩形
rect = pygame.Rect(prize["x"], FRAME_Y + 10, PRIZE_WIDTH, PRIZE_HEIGHT)
pygame.draw.rect(screen, prize["color"], rect, border_radius=10)
# 绘制奖品名称
text = FONT.render(prize["name"], True, TEXT_COLOR)
text_rect = text.get_rect(center=rect.center)
screen.blit(text, text_rect)
def draw_frame():
"""绘制框选区域"""
pygame.draw.rect(screen, HIGHLIGHT, (FRAME_X, FRAME_Y, FRAME_WIDTH, FRAME_HEIGHT), 5, border_radius=15)
def draw_button():
"""绘制控制按钮"""
color = BUTTON_HOVER_COLOR if BUTTON_RECT.collidepoint(pygame.mouse.get_pos()) else BUTTON_COLOR
pygame.draw.rect(screen, color, BUTTON_RECT, border_radius=10)
text = FONT.render("开始" if not scrolling else "停止", True, TEXT_COLOR)
text_rect = text.get_rect(center=BUTTON_RECT.center)
screen.blit(text, text_rect)
def draw_result():
"""绘制抽奖结果"""
if result:
result_text = FONT.render(f"恭喜您获得: {result}", True, TEXT_COLOR)
result_rect = result_text.get_rect(center=(WIDTH // 2, HEIGHT - 150))
screen.blit(result_text, result_rect)
def update_prizes():
"""更新奖品位置"""
for prize in prizes:
prize["x"] -= SCROLL_SPEED
# 将移出屏幕左侧的奖品移动到右侧
if prizes[0]["x"] + PRIZE_WIDTH < 0:
removed = prizes.pop(0)
removed["x"] = prizes[-1]["x"] + PRIZE_WIDTH + PRIZE_SPACING
prizes.append(removed)
def get_selected_prize():
"""获取框选区域内的奖品"""
for prize in prizes:
if FRAME_X < prize["x"] + PRIZE_WIDTH // 2 < FRAME_X + FRAME_WIDTH:
return prize["name"]
while True:
# 事件处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
if BUTTON_RECT.collidepoint(pygame.mouse.get_pos()):
if not scrolling:
scrolling = True
result = None
else:
scrolling = False
result = get_selected_prize()
# 更新奖品滚动
if scrolling:
update_prizes()
# 绘制屏幕内容
screen.fill(BACKGROUND)
draw_prizes()
draw_frame()
draw_button()
draw_result()
pygame.display.flip()
clock.tick(60)