当前位置: 首页 > news >正文

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()

http://www.dtcms.com/a/320268.html

相关文章:

  • 【tips】css模仿矢量图透明背景
  • 目前常用于视频会议的视频编码上行/下行带宽对比
  • mysql_mcp_server_pro源码部署及启动报错新手指南:让智能体长出手来直接获取到最底层的数据
  • AI应用案例全景分析:从理论到实践
  • dmctlcvt工具介绍数据文件路径变化后如何拉起数据库
  • 基于 FreeMarker 实现 SQL 模板动态生成的完整指南
  • 移动端项目框架推荐
  • Effective C++ 条款27: 尽量用const、enum、inline替换 #define
  • restTemplate禁用url编码
  • 安装mkdocs
  • Python从入门到精通——第六章 字典与集合
  • 「日拱一码」046 分支定界算法
  • Airflow 入门案例教程
  • 前端性能优化:从请求到资源的精细调控
  • 【第9话:感知算法基础1】深度学习神经网络模型基础知识概念入门简介
  • 批量获取亚马逊商品SKU商品规格调用流程
  • 【实时Linux实战系列】基于实时Linux的高频交易系统构建
  • Python 常用内置高阶函数
  • RabbitMQ面试精讲 Day 15:RabbitMQ故障转移与数据恢复
  • C++ min循环超超超详细指南
  • WFP DNS 域名解析
  • 深入理解C++模板进阶:非类型参数、特化与分离编译
  • Linux节点创建API与路径对应关系
  • AI日报0807 | GPT-5或今晚1点来袭:四大版本全曝光
  • 什么是 TDengine IDMP?
  • Disruptor 消费者核心:BatchEventProcessor解析
  • 告别复杂配置!cpolar让Prometheus监控突破网络限制
  • 【42】【OpenCV C++】 计算图像某一列像素方差 或 某一行像素的方差;
  • 嵌入式开发硬件——单片机
  • 【列出指定时间段内所有的下单产品】