当前位置:首页>python>Python实战项目之小恐龙游戏

Python实战项目之小恐龙游戏

  • 2026-09-09 00:27:01
Python实战项目之小恐龙游戏

Python 制作Chrome小恐龙游戏(超详细完整版)

一、项目介绍

Chrome浏览器断网时出现的小恐龙游戏,是一款经典的2D横版跑酷游戏。玩家通过空格键控制恐龙跳跃,躲避仙人掌等障碍物,跑得越远分数越高。

我们用 Python + Pygame 复刻这款游戏,实现:

- 恐龙站立、跑动、跳跃动画

- 随机生成仙人掌障碍物

- 碰撞检测

- 分数实时计算

- 游戏开始、结束、重新开始

适合:Python初学者、Pygame入门、课程设计、练手项目。

二、环境准备

1. 安装Python

去官网下载安装即可:https://www.python.org/

2. 安装Pygame库

打开命令提示符,输入:

plaintext  

pip install pygame

三、游戏整体思路(核心逻辑)

1. 初始化Pygame,创建窗口、时钟、字体。

2. 加载图片资源:恐龙、地面、仙人掌、云朵。

3. 游戏对象设计:

- 恐龙:位置、速度、是否跳跃、动画帧。

- 障碍物:位置、速度、随机生成。

4. 游戏主循环:

- 处理事件(按键、退出)

- 更新物体位置

- 碰撞检测

- 绘制画面

- 控制帧率

四、完整代码 + 逐行详细讲解

我把代码拆成模块讲解,方便你理解。

1. 导入库与常量定义

python  

import pygame

import random

import sys

# 初始化

pygame.init()

# 屏幕大小

SCREEN_WIDTH = 800

SCREEN_HEIGHT = 400

screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

pygame.display.set_caption("小恐龙跑酷")

# 颜色定义

WHITE = (255, 255, 255)

BLACK = (0, 0, 0)

GRAY = (128, 128, 128)

# 帧率

clock = pygame.time.Clock()

FPS = 60

# 游戏速度(越来越快)

game_speed = 5

讲解:

- 初始化Pygame,设置窗口大小、标题。

- 定义颜色、帧率、游戏初始速度,方便后期调整难度。

2. 恐龙类设计

python  

class Dinosaur:

    def __init__(self):

        # 初始位置

        self.x = 50

        self.y = SCREEN_HEIGHT - 80

        self.init_y = self.y

        # 跳跃参数

        self.jump_velocity = -15

        self.gravity = 0.8

        self.velocity = 0

        self.is_jumping = False

        # 简单用矩形代替恐龙图片(方便演示)

        self.image = pygame.Surface((40, 60))

        self.image.fill(BLACK)

        self.rect = self.image.get_rect()

        self.rect.x = self.x

        self.rect.y = self.y

    def update(self):

        # 重力

        if self.is_jumping:

            self.velocity += self.gravity

            self.rect.y += self.velocity

            # 落地

            if self.rect.y >= self.init_y:

                self.rect.y = self.init_y

                self.is_jumping = False

                self.velocity = 0

    def jump(self):

        if not self.is_jumping:

            self.is_jumping = True

            self.velocity = self.jump_velocity

    def draw(self, screen):

        screen.blit(self.image, self.rect)

讲解:

- 使用类封装恐龙,结构清晰。

- 跳跃靠速度 + 重力实现:向上减速,向下加速。

-  jump()  方法只在非跳跃时触发,防止二段跳。

3. 障碍物(仙人掌)类

python  

class Obstacle:

    def __init__(self):

        self.width = 20

        self.height = random.randint(40, 70)

        self.x = SCREEN_WIDTH

        self.y = SCREEN_HEIGHT - 80 - self.height

        self.image = pygame.Surface((self.width, self.height))

        self.image.fill(BLACK)

        self.rect = self.image.get_rect()

        self.rect.x = self.x

        self.rect.y = self.y

    def update(self, speed):

        self.rect.x -= speed

    def draw(self, screen):

        screen.blit(self.image, self.rect)

讲解:

- 障碍物从屏幕右侧出现,向左移动。

- 高度随机,增加游戏难度。

- 接收  speed  参数,随游戏时间变快。

4. 地面与分数

地面无限滚动:

- 画两张地面图片,轮流移动。

分数:

- 每帧增加,随速度提升。

5. 游戏主函数(最核心)

python  

def main():

    global game_speed

    dinosaur = Dinosaur()

    obstacles = []

    score = 0

    # 地面位置

    ground_x1 = 0

    ground_x2 = SCREEN_WIDTH

    ground_y = SCREEN_HEIGHT - 20

    # 障碍物生成计时器

    spawn_timer = 0

    game_over = False

    font = pygame.font.SysFont(None, 40)

    while True:

        screen.fill(WHITE)

        # 事件处理

        for event in pygame.event.get():

            if event.type == pygame.QUIT:

                pygame.quit()

                sys.exit()

            if event.type == pygame.KEYDOWN:

                if event.key == pygame.K_SPACE:

                    if not game_over:

                        dinosaur.jump()

                    else:

                        # 重新开始

                        main()

        if not game_over:

            # 更新恐龙

            dinosaur.update()

            # 游戏速度越来越快

            game_speed = 5 + score / 100

            # 生成障碍物

            spawn_timer += 1

            if spawn_timer > random.randint(40, 90):

                obstacles.append(Obstacle())

                spawn_timer = 0

            # 更新障碍物

            for obs in obstacles[:]:

                obs.update(game_speed)

                if obs.rect.x + obs.width < 0:

                    obstacles.remove(obs)

                    score += 1

            # 碰撞检测

            for obs in obstacles:

                if dinosaur.rect.colliderect(obs.rect):

                    game_over = True

            # 地面滚动

            ground_x1 -= game_speed

            ground_x2 -= game_speed

            if ground_x1 <= -SCREEN_WIDTH:

                ground_x1 = SCREEN_WIDTH

            if ground_x2 <= -SCREEN_WIDTH:

                ground_x2 = SCREEN_WIDTH

            # 加分

            score += 0.1

        # 绘制地面

        pygame.draw.rect(screen, GRAY, (ground_x1, ground_y, SCREEN_WIDTH, 20))

        pygame.draw.rect(screen, GRAY, (ground_x2, ground_y, SCREEN_WIDTH, 20))

        # 绘制恐龙

        dinosaur.draw(screen)

        # 绘制障碍物

        for obs in obstacles:

            obs.draw(screen)

        # 绘制分数

        score_text = font.render(f"Score: {int(score)}", True, BLACK)

        screen.blit(score_text, (10, 10))

        # 游戏结束文字

        if game_over:

            go_text = font.render("GAME OVER", True, BLACK)

            restart_text = font.render("Press SPACE to restart", True, BLACK)

            screen.blit(go_text, (SCREEN_WIDTH//2 - 80, SCREEN_HEIGHT//2 - 40))

            screen.blit(restart_text, (SCREEN_WIDTH//2 - 140, SCREEN_HEIGHT//2 + 10))

        pygame.display.update()

        clock.tick(FPS)

if __name__ == "__main__":

    main()

五、核心功能详细分析

1. 跳跃物理原理

- 按下空格 → 给一个向上的负速度。

- 每一帧加上重力,速度逐渐变正。

- 回到地面时重置状态,结束跳跃。

这是2D游戏最经典的跳跃公式,几乎所有横版游戏都用这套逻辑。

2. 无限地面滚动

- 用两个地面图片: ground_x1  和  ground_x2 。

- 同时向左移动。

- 当一张完全移出屏幕,立刻放回右侧,形成无限循环。

3. 随机障碍物生成

- 用计时器控制生成间隔。

- 间隔随机(40~90帧),避免规律化。

- 移出屏幕的障碍物删除,节省内存。

4. 碰撞检测

Pygame 自带  rect.colliderect() :

- 恐龙矩形 和 障碍物矩形 是否重叠。

- 重叠 → 游戏结束。

5. 难度递增

python  

game_speed = 5 + score / 100

分数越高,速度越快,压力越大。

六、扩展升级(可写进报告)

你可以继续优化,让项目更高级:

1. 替换图片:用恐龙、仙人掌图片代替黑色矩形。

2. 下蹲动作:按下↓键,恐龙变小,躲避飞鸟。

3. 音效:加入跳跃、死亡、得分音效。

4. 动画帧:恐龙跑步切换图片,更流畅。

5. 最高分记录:使用文件保存最高分。

七、适合写进文档的总结(可直接复制)

本项目基于Python语言与Pygame库实现了经典Chrome小恐龙跑酷游戏,完成了角色控制、物理跳跃、障碍物随机生成、无限滚动背景、碰撞检测、分数系统、游戏结束与重启等功能。

项目采用面向对象思想,将恐龙与障碍物封装为独立类,结构清晰、易于扩展与维护。通过重力与速度实现真实跳跃效果,利用矩形碰撞检测保证游戏逻辑准确,随分数提升游戏速度递增,提升游戏体验。

整个开发过程巩固了Python基础语法、Pygame图形编程、游戏主循环、事件处理、面向对象编程等核心技能,是非常适合初学者的综合练手项目。

最新文章

随机文章