python见缝插针小游戏源码。(可复制)

发布于:2025-08-08 ⋅ 阅读:(140) ⋅ 点赞:(0)

#运行此代码,请先处理好环境。提前下pygame。

#接下来上代码。

import pygame
import random
import sys

# 初始化pygame
pygame.init()

# 游戏窗口设置
SCREEN_WIDTH = 480
SCREEN_HEIGHT = 700
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)
BLUE = (0, 0, 255)

# 游戏时钟
clock = pygame.time.Clock()
FPS = 60

class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.Surface((50, 80))
        self.image.fill(BLUE)
        self.rect = self.image.get_rect()
        self.rect.center = (100, SCREEN_HEIGHT // 2)
        self.velocity = 0
        self.gravity = 0.8
        self.jump_power = -15
        self.on_ground = True
    
    def update(self):
        # 重力作用
        self.velocity += self.gravity
        self.rect.y += self.velocity
        
        # 地面检测
        if self.rect.bottom >= SCREEN_HEIGHT - 50:
            self.rect.bottom = SCREEN_HEIGHT - 50
            self.on_ground = True
            self.velocity = 0
    
    def jump(self):
        if self.on_ground:
            self.velocity = self.jump_power
            self.on_ground = False

class Obstacle(pygame.sprite.Sprite):
    def __init__(self, x, y, width, height):
        super().__init__()
        self.image = pygame.Surface((width, height))
        self.image.fill(RED)
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.speed = 5
    
    def update(self):
        self.rect.x -= self.speed
        if self.rect.right < 0:
            self.kill()

class Ground(pygame.sprite.Sprite):
    def __init__(self, x, y, width, height):
        super().__init__()
        self.image = pygame.Surface((width, height))
        self.image.fill(BLACK)
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.speed = 5
    
    def update(self):
        self.rect.x -= self.speed
        if self.rect.right < 0:
            self.rect.left = SCREEN_WIDTH

def spawn_obstacle():
    height = random.randint(30, 60)
    y = SCREEN_HEIGHT - 50 - height
    obstacle = Obstacle(SCREEN_WIDTH, y, 30, height)
    all_sprites.add(obstacle)
    obstacles.add(obstacle)

# 创建精灵组
all_sprites = pygame.sprite.Group()
obstacles = pygame.sprite.Group()
grounds = pygame.sprite.Group()

# 创建玩家
player = Player()
all_sprites.add(player)

# 创建地面
for i in range(2):
    ground = Ground(i * SCREEN_WIDTH, SCREEN_HEIGHT - 50, SCREEN_WIDTH, 50)
    grounds.add(ground)
    all_sprites.add(ground)

# 游戏变量
score = 0
font = pygame.font.SysFont(None, 36)
obstacle_timer = 0
OBSTACLE_INTERVAL = 1500  # 毫秒

# 游戏主循环
running = True
while running:
    # 处理事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    # 按键检测
    keys = pygame.key.get_pressed()
    if keys[pygame.K_SPACE] or keys[pygame.K_UP]:
        player.jump()
    
    # 障碍物生成
    obstacle_timer += clock.get_time()
    if obstacle_timer >= OBSTACLE_INTERVAL:
        spawn_obstacle()
        obstacle_timer = 0
    
    # 更新分数
    score += 1
    
    # 更新
    all_sprites.update()
    
    # 碰撞检测
    hits = pygame.sprite.spritecollide(player, obstacles, False)
    if hits:
        running = False
    
    # 绘制背景
    screen.fill(WHITE)
    
    # 绘制所有精灵
    all_sprites.draw(screen)
    
    # 绘制分数
    score_text = font.render(f"分数: {score}", True, BLACK)
    screen.blit(score_text, (10, 10))
    
    # 更新显示
    pygame.display.flip()
    
    # 控制帧率
    clock.tick(FPS)

pygame.quit()
sys.exit()
 


网站公告

今日签到

点亮在社区的每一天
去签到