数字雨
准备工作
首先,确保你的Python环境中已经安装了Pygame库。如果未安装,可以通过pip安装:
pip install pygame
初始化Pygame和设置游戏参数
接下来,我们初始化Pygame库,并设置游戏的基本参数,如屏幕大小、字体样式和大小等。
import pygame
import random
# 初始化pygame库
pygame.init()
# 设置屏幕宽度和高度
SCREEN_WIDTH, SCREEN_HEIGHT = 600, 800
# 设置字体大小和样式
FONT_SIZE = 24
FONT_NAME = 'Arial' # 使用系统支持的字体
font = pygame.font.Font(pygame.font.match_font(FONT_NAME), FONT_SIZE)
# 设置屏幕并初始化
winSur = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption('Modified Falling Texts')
# 初始化背景
bg_color = (0, 0, 0, 128) # 半透明黑色背景
bg_surface = pygame.Surface((SCREEN_WIDTH, SCREEN_HEIGHT), flags=pygame.SRCALPHA)
bg_surface.fill(bg_color)
准备游戏元素
在这个游戏中,我们需要准备一些基本的游戏元素,比如数字文本。我们生成一个包含0到9的数字文本列表,这些文本将用于游戏过程中随机显示。
# 生成数字文本列表
texts = [font.render(str(i), True, (0, 255, 0)) for i in range(10)]
# 计算列数,即每列可以放置的文本数量
COLUMN_WIDTH = SCREEN_WIDTH // FONT_SIZE
# 初始化下降位置列表
drops = [0] * COLUMN_WIDTH
游戏主循环
游戏的主循环是游戏的核心,它负责处理用户输入、更新游戏状态、绘制游戏画面以及控制游戏速度。
while True:
# 事件处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit() # 优雅退出pygame
exit()
# 控制游戏速度
pygame.time.delay(30) # 稍微加快速度
# 绘制背景
winSur.blit(bg_surface, (0, 0))
# 更新和绘制数字
for i in range(COLUMN_WIDTH):
# 随机选择数字文本
text = random.choice(texts)
# 绘制文本到窗口
winSur.blit(text, (i * FONT_SIZE, drops[i] * FONT_SIZE))
# 更新下落位置
drops[i] += 1
# 判断是否重置下落位置
if drops[i] * FONT_SIZE > SCREEN_HEIGHT - FONT_SIZE or random.random() > 0.95:
drops[i] = 0
# 更新屏幕显示
pygame.display.flip()
完整代码
import random
import pygame
# 初始化pygame库
pygame.init()
# 设置屏幕宽度和高度
SCREEN_WIDTH, SCREEN_HEIGHT = 600, 800
# 设置字体大小和样式
FONT_SIZE = 24
FONT_NAME = 'Arial' # 更改字体名称以支持更广泛的系统
font = pygame.font.Font(pygame.font.match_font(FONT_NAME), FONT_SIZE)
# 设置屏幕并初始化
winSur = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption('Modified Falling Texts')
# 初始化背景
bg_color = (0, 0, 0, 128) # 半透明黑色背景
bg_surface = pygame.Surface((SCREEN_WIDTH, SCREEN_HEIGHT), flags=pygame.SRCALPHA)
bg_surface.fill(bg_color)
# 生成数字文本列表
texts = [font.render(str(i), True, (0, 255, 0)) for i in range(10)]
# 计算列数
COLUMN_WIDTH = SCREEN_WIDTH // FONT_SIZE
# 初始化下降位置列表
drops = [0] * COLUMN_WIDTH
# 游戏主循环
while True:
# 事件处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit() # 使用pygame.quit()优雅退出
exit()
# 控制游戏速度
pygame.time.delay(30) # 稍微加快速度
# 绘制背景
winSur.blit(bg_surface, (0, 0))
# 更新和绘制数字
for i in range(COLUMN_WIDTH):
# 随机选择数字文本
text = random.choice(texts)
# 绘制文本到窗口
winSur.blit(text, (i * FONT_SIZE, drops[i] * FONT_SIZE))
# 更新下落位置
drops[i] += 1
# 判断是否重置下落位置
if drops[i] * FONT_SIZE > SCREEN_HEIGHT - FONT_SIZE or random.random() > 0.95:
drops[i] = 0
# 更新屏幕显示
pygame.display.flip()
字母雨
初始化Pygame和设置游戏窗口
首先,我们需要导入必要的库并初始化Pygame环境。接着,我们定义游戏窗口的参数,如宽度、高度和字体大小。
import random
import pygame
# 初始化pygame
pygame.init()
# 定义屏幕参数
PANEL_WIDTH = 400
PANEL_HEIGHT = 500
FONT_SIZE = 15
# 创建游戏窗口
win_surface = pygame.display.set_mode((PANEL_WIDTH, PANEL_HEIGHT))
pygame.display.set_caption('Modified Falling Letters') # 设置窗口标题
加载字体和创建背景
为了在游戏中显示文本,我们需要加载字体。这里我们使用系统默认字体,以确保跨平台的兼容性。同时,我们创建一个半透明背景,以增加游戏的视觉效果。
# 加载字体
font = pygame.font.SysFont(None, FONT_SIZE)
# 创建半透明背景
bg_surface = pygame.Surface((PANEL_WIDTH, PANEL_HEIGHT), flags=pygame.SRCALPHA)
bg_surface.fill((0, 0, 0, 30)) # 填充背景颜色为半透明黑色
准备字母列表和渲染文本
接下来,我们定义一个包含英文字母的列表,并使用加载的字体来渲染这些字母为Pygame表面对象。这些表面对象将在游戏循环中被绘制到屏幕上。
# 准备字母列表并渲染为pygame表面对象
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'g', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z']
texts = [font.render(letter, True, (0, 255, 0)) for letter in letters] # 渲染每个字母
游戏主循环
游戏的核心在于其主循环,它负责处理事件、绘制图形和更新屏幕。
# 初始化下落位置列表
drops = [0] * int(PANEL_WIDTH / FONT_SIZE) # 计算可以放置的列数并初始化位置
# 游戏主循环
while True:
# 事件处理
for event in pygame.event.get():
if event.type == pygame.QUIT: # 如果用户点击了关闭按钮
pygame.quit() # 退出pygame
exit() # 退出程序
elif event.type == pygame.KEYDOWN: # 如果用户按下了键盘上的某个键
keys = pygame.key.get_pressed() # 获取所有按键的状态
if keys[pygame.K_SPACE]: # 如果按下的是空格键
pygame.quit() # 退出pygame
exit() # 退出程序
# 控制游戏速度
pygame.time.delay(30) # 暂停30毫秒
# 绘制背景
win_surface.fill((0, 0, 0)) # 填充窗口为黑色,覆盖之前的图像
win_surface.blit(bg_surface, (0, 0)) # 在窗口上绘制半透明背景
# 更新和绘制字母
for i in range(len(drops)):
# 随机选择一个字母进行绘制
text = random.choice(texts)
# 绘制字母到窗口的相应位置
win_surface.blit(text, (i * FONT_SIZE, drops[i] * FONT_SIZE))
# 更新下落位置
drops[i] += 1
# 判断是否重置下落位置
if drops[i] * FONT_SIZE > PANEL_HEIGHT - FONT_SIZE or random.random() > 0.95:
drops[i] = 0 # 重置位置
# 更新屏幕显示
pygame.display.flip() # 刷新屏幕,显示新绘制的图像
完整代码
import random
import pygame
# 初始化pygame
pygame.init()
# 定义屏幕参数
PANEL_WIDTH = 400
PANEL_HEIGHT = 500
FONT_SIZE = 15
# 创建游戏窗口
win_surface = pygame.display.set_mode((PANEL_WIDTH, PANEL_HEIGHT))
pygame.display.set_caption('Modified Falling Letters') # 设置窗口标题
# 加载字体(这里使用系统字体,确保跨平台兼容性)
font = pygame.font.SysFont(None, FONT_SIZE)
# 创建半透明背景
bg_surface = pygame.Surface((PANEL_WIDTH, PANEL_HEIGHT), flags=pygame.SRCALPHA)
bg_surface.fill((0, 0, 0, 30)) # 填充背景颜色为半透明黑色
# 准备字母列表并渲染为pygame表面对象
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'g', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z']
texts = [font.render(letter, True, (0, 255, 0)) for letter in letters] # 渲染每个字母
# 计算可以放置的列数
COLUMNS = int(PANEL_WIDTH / FONT_SIZE)
# 初始化下落位置列表
drops = [0] * COLUMNS
# 游戏主循环
while True:
# 事件处理
for event in pygame.event.get():
if event.type == pygame.QUIT: # 如果用户点击了关闭按钮
pygame.quit() # 退出pygame
exit() # 退出程序
elif event.type == pygame.KEYDOWN: # 如果用户按下了键盘上的某个键
keys = pygame.key.get_pressed() # 获取所有按键的状态
if keys[pygame.K_SPACE]: # 如果按下的是空格键
pygame.quit() # 退出pygame
exit() # 退出程序
# 控制游戏速度
pygame.time.delay(30) # 暂停30毫秒
# 绘制背景
win_surface.fill((0, 0, 0)) # 填充窗口为黑色,覆盖之前的图像
win_surface.blit(bg_surface, (0, 0)) # 在窗口上绘制半透明背景
# 更新和绘制字母
for i in range(COLUMNS):
# 随机选择一个字母进行绘制
text = random.choice(texts)
# 绘制字母到窗口的相应位置
win_surface.blit(text, (i * FONT_SIZE, drops[i] * FONT_SIZE))
# 更新下落位置
drops[i] += 1
# 判断是否重置下落位置
if drops[i] * FONT_SIZE > PANEL_HEIGHT - FONT_SIZE or random.random() > 0.95:
drops[i] = 0 # 重置位置
# 更新屏幕显示
pygame.display.flip() # 刷新屏幕,显示新绘制的图像