python见缝插针小游戏源码。(可复制)
#运行此代码,请先处理好环境。提前下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()