找回密码
 中文实名注册
搜索
查看: 833|回复: 2

躲避陨石小游戏 2025-07-04 16:06:16

[复制链接]

11

主题

13

回帖

847

积分

高级会员

积分
847
发表于 2025-7-4 16:34:03 | 显示全部楼层 |阅读模式
[Python] 纯文本查看 复制代码
import pygame
import random
import time

# 初始化 Pygame
pygame.init()

# 屏幕尺寸
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("躲避陨石")

# 颜色
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)  # 定义红色

# 玩家
player_size = 50
player_x = screen_width // 2 - player_size // 2
player_y = screen_height - player_size - 10
player_speed = 2  # 进一步降低玩家速度

# 陨石
meteor_size = 30
meteor_speed = 1  # 进一步降低陨石速度
meteors = []

# 分数和时间
score = 0
font = pygame.font.Font(None, 36)
start_time = time.time()
game_duration = 300  # 5 分钟 = 300 秒

# 游戏主循环
running = True
win = False
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_size:
        player_x += player_speed

    # 陨石移动和生成
    for i in range(len(meteors) - 1, -1, -1):
        meteors[i][1] += meteor_speed
        if meteors[i][1] > screen_height:
            meteors.pop(i)
            score += 1
    if random.randint(0, 75) == 0:
        meteor_x = random.randint(0, screen_width - meteor_size)
        meteors.append([meteor_x, -meteor_size])

    # 碰撞检测
    for meteor in meteors:
        if (
            player_x < meteor[0] + meteor_size
            and player_x + player_size > meteor[0]
            and player_y < meteor[1] + meteor_size
            and player_y + player_size > meteor[1]
        ):
            running = False

    # 时间和胜利条件
    elapsed_time = int(time.time() - start_time)
    remaining_time = game_duration - elapsed_time
    if remaining_time <= 0:
        running = False
        win = True

    # 绘制
    screen.fill(black)
    pygame.draw.rect(screen, white, (player_x, player_y, player_size, player_size))
    for meteor in meteors:
        pygame.draw.rect(screen, red, (meteor[0], meteor[1], meteor_size, meteor_size)) # 使用红色绘制陨石

    score_text = font.render(f"Score: {score}", True, white)
    screen.blit(score_text, (10, 10))

    timer_text = font.render(f"Time: {remaining_time}", True, white)
    screen.blit(timer_text, (screen_width - timer_text.get_width() - 10, 10))

    pygame.display.flip()

# 游戏结束显示结果
if win:
    print("You Win!")
    # 可添加胜利画面或其他操作
else:
    print("Game Over! Your score:", score)
    # 可添加游戏结束画面或其他操作

pygame.quit()

回复

使用道具 举报

1

主题

29

回帖

119

积分

注册会员

积分
119
发表于 2025-7-8 18:44:45 | 显示全部楼层
:D:D
回复

使用道具 举报

1

主题

29

回帖

119

积分

注册会员

积分
119
发表于 2025-7-8 18:45:31 | 显示全部楼层
:):):):):):):):):):):):):):)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 中文实名注册

本版积分规则

快速回复 返回顶部 返回列表