|
|
发表于 2025-7-8 17:32:11
|
显示全部楼层
import pygame
import sys
import random
# 初始化 Pygame
pygame.init()
# 设置屏幕宽高
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("蓝色背景、黄色角色和多个红色障碍物")
# 定义颜色
BLUE = (0, 0, 255) # 蓝色
DARK_BLUE = (0, 0, 200) # 深蓝色
YELLOW = (255, 255, 0) # 黄色
RED = (255, 0, 0) # 红色
WHITE = (255, 255, 255) # 白色
# 玩家设置
PLAYER_WIDTH = 50
PLAYER_HEIGHT = 50
player_x = SCREEN_WIDTH // 2 - PLAYER_WIDTH // 2
player_y = SCREEN_HEIGHT - PLAYER_HEIGHT - 10
player_speed = 5
# 障碍物设置
OBSTACLE_RADIUS = 20
OBSTACLE_COUNT = 5 # 障碍物数量
obstacles = [] # 存储多个障碍物
for _ in range(OBSTACLE_COUNT):
obstacle_x = random.randint(OBSTACLE_RADIUS, SCREEN_WIDTH - OBSTACLE_RADIUS)
obstacle_y = random.randint(-SCREEN_HEIGHT, 0) # 障碍物初始位置随机
obstacle_speed = random.randint(2, 6) # 障碍物速度随机
obstacles.append({"x": obstacle_x, "y": obstacle_y, "speed": obstacle_speed})
# 背景滚动设置
background_y = 0
background_speed = 2
# 计分设置
score = 0
font = pygame.font.Font(None, 36) # 分数字体
# 游戏主循环
clock = pygame.time.Clock()
running = True
def draw_player(x, y):
"""绘制玩家"""
pygame.draw.rect(screen, YELLOW, (x, y, PLAYER_WIDTH, PLAYER_HEIGHT)) # 黄色玩家
def draw_obstacle(x, y):
"""绘制障碍物"""
pygame.draw.circle(screen, RED, (x, y), OBSTACLE_RADIUS) # 红色圆形障碍物
def draw_score(score):
"""绘制分数"""
score_surface = font.render(f"Score: {score}", True, WHITE)
screen.blit(score_surface, (10, 10)) # 分数显示在屏幕左上角
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 获取按键输入
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and player_x > 0:
player_x -= player_speed
if keys[pygame.K_RIGHT] and player_x < SCREEN_WIDTH - PLAYER_WIDTH:
player_x += player_speed
if keys[pygame.K_UP] and player_y > 0:
player_y -= player_speed
if keys[pygame.K_DOWN] and player_y < SCREEN_HEIGHT - PLAYER_HEIGHT:
player_y += player_speed
# 背景滚动逻辑
background_y += background_speed
if background_y >= SCREEN_HEIGHT:
background_y = 0
# 移动障碍物
for obstacle in obstacles:
obstacle["y"] += obstacle["speed"]
if obstacle["y"] > SCREEN_HEIGHT + OBSTACLE_RADIUS: # 超出屏幕后,重置位置
obstacle["y"] = -OBSTACLE_RADIUS
obstacle["x"] = random.randint(OBSTACLE_RADIUS, SCREEN_WIDTH - OBSTACLE_RADIUS)
obstacle["speed"] = random.randint(2, 6) # 随机速度
# 检测碰撞
if (player_x < obstacle["x"] < player_x + PLAYER_WIDTH or player_x < obstacle["x"] + OBSTACLE_RADIUS < player_x + PLAYER_WIDTH) and \
(player_y < obstacle["y"] < player_y + PLAYER_HEIGHT or player_y < obstacle["y"] + OBSTACLE_RADIUS < player_y + PLAYER_HEIGHT):
print("游戏结束!")
running = False
# 增加分数
score += 1 # 每帧加 1 分(可根据需要调整加分规则)
# 绘制背景
screen.fill((0, 0, 0)) # 清屏
pygame.draw.rect(screen, BLUE, (0, background_y - SCREEN_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT)) # 蓝色背景
pygame.draw.rect(screen, DARK_BLUE, (0, background_y, SCREEN_WIDTH, SCREEN_HEIGHT)) # 深蓝色背景
# 绘制玩家
draw_player(player_x, player_y)
# 绘制障碍物
for obstacle in obstacles:
draw_obstacle(obstacle["x"], obstacle["y"])
# 绘制分数
draw_score(score)
# 更新屏幕
pygame.display.flip()
# 控制帧率
clock.tick(60)
# 退出 Pygame
pygame.quit()
sys.exit() |
|