
很多朋友在学习Python时常常会感到语法枯燥、项目无从下手或者学完基础后不知道如何将知识串联起来。如果你也有类似的困惑那么通过动手制作游戏来学习无疑是一条高效且充满乐趣的路径。本文将带你深入剖析Udemy上广受欢迎的“通过制作6款游戏来学习Python2D3D”课程的核心内容与实战方法。无论你是编程新手还是希望巩固Python基础并探索游戏开发的爱好者都能从本文获得一套从环境搭建到项目上线的完整学习方案。我们将不仅介绍课程中涵盖的6款经典游戏还会为你拆解背后的Python核心知识点并提供可运行的代码示例、常见问题排查思路以及从2D到3D游戏开发的进阶技巧。学完本文你将能独立复现这些游戏更重要的是你将掌握如何运用Python解决实际问题、设计程序逻辑的思维。1. 为什么通过游戏学习Python是高效路径在探讨具体技术之前我们有必要理解这种学习方法的优势。传统的编程学习往往从变量、循环、函数等抽象概念开始虽然必要但容易让学习者失去兴趣和方向感。而项目驱动尤其是游戏开发提供了截然不同的体验。游戏作为学习载体的核心价值目标明确反馈即时每个游戏都是一个完整的产品有明确的胜利条件和交互反馈。代码的每一处修改都能立刻在游戏运行效果中体现出来这种即时正反馈是强大的学习动力。涵盖知识面广一个简单的游戏就可能涉及变量、数据类型、条件判断、循环、函数、类与对象、事件处理、文件读写等多个核心编程概念。通过项目你能看到这些知识点是如何协同工作的。培养工程化思维游戏开发要求你将复杂问题分解为多个模块如玩家控制、敌人AI、碰撞检测、分数计算这有助于培养模块化设计和问题分解的能力这是软件开发的核心思维。从2D到3D的自然进阶2D游戏是理解图形、坐标和基础物理的绝佳起点。掌握了2D的核心原理后再过渡到3D游戏主要是引入了深度Z轴和更复杂的数学如向量、矩阵学习曲线相对平滑。本课程精选的6款游戏正是遵循了从简到繁、从2D到3D的认知规律确保学习者在不断挑战中获得成就感。2. 学习环境与工具准备工欲善其事必先利其器。在开始我们的游戏编程之旅前需要准备好开发环境。以下是推荐配置你可以根据自身情况调整。2.1 Python解释器安装与配置Python是本次学习的核心语言。为了避免版本兼容性问题推荐使用Python 3.8或更高版本。安装步骤访问官网前往Python官方网站python.org在“Downloads”部分选择适合你操作系统的安装包Windows, macOS, Linux。关键安装选项Windows用户特别注意在安装向导中务必勾选“Add Python 3.x to PATH”选项。这将允许你在命令行中直接使用python和pip命令避免后续配置的麻烦。验证安装安装完成后打开命令行终端Windows上是CMD或PowerShellmacOS/Linux上是Terminal输入以下命令python --version如果正确显示Python版本号如Python 3.10.11则说明安装成功。2.2 集成开发环境IDE选择对于初学者一个友好的IDE能极大提升编码效率和调试体验。PyCharm (Community Edition)功能强大专为Python设计提供智能代码补全、调试器、图形化版本控制等非常适合中大型项目。社区版免费。Visual Studio Code (VS Code)轻量级且高度可定制通过安装Python扩展包可以获得近乎IDE的体验。它启动快资源占用少是当前非常流行的选择。Thonny专为编程教学设计的IDE内置了简单的调试器和变量查看器对初学者极其友好能帮你直观理解代码执行过程。本文示例代码将在VS Code环境中演示但其本身与IDE无关在任何文本编辑器中编写均可运行。2.3 关键第三方库安装游戏开发离不开图形库的支持。本课程涉及的2D和3D游戏将主要使用以下两个库Pygame (用于2D游戏)这是一个非常流行的、用于创建多媒体应用程序如游戏的Python模块。它基于SDL库提供了对图像、声音、事件、图形等的简单控制。Pygame 和 PyOpenGL / Panda3D (用于3D游戏)对于3D部分基础课程可能仍使用Pygame进行窗口管理和事件处理同时结合PyOpenGL进行3D渲染。更高级的课程可能会引入像Panda3D这样更完整的3D游戏引擎。安装命令打开命令行终端使用Python的包管理工具pip进行安装。# 安装Pygame pip install pygame # 可选安装NumPy用于处理3D数学运算向量、矩阵 pip install numpy # 对于3D可能需要安装PyOpenGL pip install PyOpenGL PyOpenGL_accelerate安装完成后可以通过在Python交互环境中导入来验证import pygame print(pygame.ver) # 查看版本3. 2D游戏开发实战与核心Python概念我们将从三款经典的2D游戏入手在实现它们的过程中牢固掌握Python基础。3.1 游戏一猜数字游戏这是一个命令行游戏完美融合了输入输出、随机数、循环和条件判断。游戏规则程序随机生成一个1-100之间的数字玩家通过终端输入猜测的数字程序会提示“太大了”、“太小了”或“猜对了”并记录猜测次数。核心Python知识点import random: 导入随机模块。random.randint(a, b): 生成指定范围内的随机整数。input(): 获取用户输入。int(): 将字符串转换为整数。while循环: 实现重复猜测直到猜对。if-elif-else条件判断: 比较猜测值与目标值。完整代码示例# guess_number.py import random def guess_number_game(): 猜数字游戏主函数 # 1. 生成随机目标数字 target_number random.randint(1, 100) guess_count 0 print(欢迎来到猜数字游戏我已经想好了一个1到100之间的整数。) # 2. 开始游戏循环 while True: try: # 获取玩家输入并转换 guess int(input(请输入你的猜测: )) guess_count 1 # 3. 判断逻辑 if guess target_number: print(太小了再试一次。) elif guess target_number: print(太大了再试一次。) else: print(f恭喜你你猜对了数字就是 {target_number}。) print(f你总共猜了 {guess_count} 次。) break # 猜对后跳出循环 except ValueError: # 处理非数字输入 print(输入无效请输入一个整数) # 启动游戏 if __name__ __main__: guess_number_game()运行与扩展运行在终端进入文件所在目录执行python guess_number.py。扩展思考如何设置猜测次数上限如何让游戏在猜对后询问是否再玩一局3.2 游戏二贪吃蛇使用Pygame库实现是学习事件处理、游戏循环、列表操作和碰撞检测的经典案例。游戏规则玩家控制一条蛇在网格中移动通过方向键改变蛇头方向。蛇头碰到食物一个随机出现的方块则身体变长分数增加蛇头碰到窗口边界或自己的身体则游戏结束。核心Python/Pygame知识点Pygame初始化pygame.init(),pygame.display.set_mode()游戏主循环while running:处理事件、更新状态、绘制图形。事件处理pygame.event.get()监听键盘事件如KEYDOWN。坐标与图形绘制使用pygame.Rect表示蛇身节和食物的位置用pygame.draw.rect()绘制。列表管理蛇身蛇身用一个Rect列表表示移动时在列表头部添加新的蛇头并根据是否吃到食物决定是否删除尾部。碰撞检测Rect.colliderect()方法判断两个矩形是否重叠。核心代码结构示例# snake_game.py import pygame import random import sys # 初始化 pygame.init() WIDTH, HEIGHT 600, 600 GRID_SIZE 20 screen pygame.display.set_mode((WIDTH, HEIGHT)) clock pygame.time.Clock() # 颜色定义 BLACK (0, 0, 0) GREEN (0, 255, 0) RED (255, 0, 0) # 蛇的初始状态 snake [pygame.Rect(WIDTH//2, HEIGHT//2, GRID_SIZE, GRID_SIZE)] snake_direction (GRID_SIZE, 0) # 初始向右移动 food pygame.Rect(random.randrange(0, WIDTH, GRID_SIZE), random.randrange(0, HEIGHT, GRID_SIZE), GRID_SIZE, GRID_SIZE) def draw_grid(): 绘制网格背景 for x in range(0, WIDTH, GRID_SIZE): for y in range(0, HEIGHT, GRID_SIZE): rect pygame.Rect(x, y, GRID_SIZE, GRID_SIZE) pygame.draw.rect(screen, (40, 40, 40), rect, 1) def main(): global snake_direction, food running True while running: # 事件处理 for event in pygame.event.get(): if event.type pygame.QUIT: running False elif event.type pygame.KEYDOWN: # 改变方向但不能直接反向 if event.key pygame.K_UP and snake_direction ! (0, GRID_SIZE): snake_direction (0, -GRID_SIZE) elif event.key pygame.K_DOWN and snake_direction ! (0, -GRID_SIZE): snake_direction (0, GRID_SIZE) elif event.key pygame.K_LEFT and snake_direction ! (GRID_SIZE, 0): snake_direction (-GRID_SIZE, 0) elif event.key pygame.K_RIGHT and snake_direction ! (-GRID_SIZE, 0): snake_direction (GRID_SIZE, 0) # 更新蛇头位置 head snake[0].copy() head.move_ip(snake_direction) snake.insert(0, head) # 碰撞检测吃到食物 if head.colliderect(food): # 生成新食物 food.x random.randrange(0, WIDTH, GRID_SIZE) food.y random.randrange(0, HEIGHT, GRID_SIZE) else: # 没吃到食物移除尾部 snake.pop() # 碰撞检测撞墙或撞自己 if (head.x 0 or head.x WIDTH or head.y 0 or head.y HEIGHT or head.collidelist(snake[1:]) ! -1): print(游戏结束) running False # 绘制 screen.fill(BLACK) draw_grid() for segment in snake: pygame.draw.rect(screen, GREEN, segment) pygame.draw.rect(screen, RED, food) pygame.display.flip() clock.tick(10) # 控制游戏速度 pygame.quit() sys.exit() if __name__ __main__: main()这个示例提供了贪吃蛇的核心逻辑。一个完整的游戏还应包括分数显示、游戏结束画面和重新开始功能。3.3 游戏三飞机大战简化版这是一个更复杂的2D射击游戏引入了精灵Sprite、精灵组、图像加载、子弹发射和敌人生成等概念。核心实现思路定义精灵类创建Player玩家飞机、Enemy敌机、Bullet子弹类继承自pygame.sprite.Sprite。每个类负责自己的图像、位置更新和绘制。使用精灵组pygame.sprite.Group()用于管理所有敌机、所有子弹方便进行碰撞检测和批量更新绘制。游戏资源管理使用pygame.image.load()加载飞机、子弹的图片用pygame.transform.scale()调整大小。碰撞检测使用pygame.sprite.groupcollide()检测子弹组和敌机组的碰撞以及玩家和敌机的碰撞。游戏状态管理维护分数、生命值、游戏是否结束等状态。关键代码片段Player类示例# plane_shooter.py (部分代码) import pygame import random class Player(pygame.sprite.Sprite): def __init__(self): super().__init__() # 加载图片这里用矩形代替 self.image pygame.Surface((50, 40)) self.image.fill((0, 120, 255)) # 蓝色矩形代表飞机 self.rect self.image.get_rect() self.rect.centerx WIDTH // 2 self.rect.bottom HEIGHT - 10 self.speed 5 def update(self, keys): 根据按键更新玩家位置 if keys[pygame.K_LEFT] and self.rect.left 0: self.rect.x - self.speed if keys[pygame.K_RIGHT] and self.rect.right WIDTH: self.rect.x self.speed if keys[pygame.K_UP] and self.rect.top 0: self.rect.y - self.speed if keys[pygame.K_DOWN] and self.rect.bottom HEIGHT: self.rect.y self.speed def shoot(self, bullet_group): 创建一颗子弹并加入子弹组 bullet Bullet(self.rect.centerx, self.rect.top) bullet_group.add(bullet)通过实现飞机大战你将深刻理解面向对象编程在游戏开发中的组织优势以及如何管理更复杂的游戏对象和交互。4. 迈向3D从概念到第一个3D立方体从2D平面到3D空间最大的变化是引入了Z轴深度和一套用于处理3D变换平移、旋转、缩放的数学体系。我们不会深入复杂的数学而是借助Pygame和PyOpenGL来直观感受。4.1 3D图形基础概念顶点3D空间中的一个点由(x, y, z)坐标定义。多边形由多个顶点连接形成的面最基本的是三角形。网格由许多多边形组成的3D物体表面。变换平移物体在空间中的移动。旋转物体绕某个轴转动。缩放物体大小的改变。相机决定我们观察3D世界的视角包括位置、观察方向和上方向。投影将3D坐标映射到2D屏幕的过程。主要有两种正交投影物体大小不随距离改变常用于CAD、2.5D游戏。透视投影模拟人眼近大远小更具真实感。4.2 使用PyOpenGL绘制旋转立方体以下是一个使用Pygame创建窗口并用PyOpenGL绘制一个旋转彩色立方体的最小示例。环境准备确保已安装pygame和PyOpenGL。pip install pygame PyOpenGL PyOpenGL_accelerate完整代码示例# rotating_cube.py import pygame from pygame.locals import * from OpenGL.GL import * from OpenGL.GLU import * # 定义立方体的8个顶点坐标 vertices ( (1, -1, -1), (1, 1, -1), (-1, 1, -1), (-1, -1, -1), (1, -1, 1), (1, 1, 1), (-1, -1, 1), (-1, 1, 1) ) # 定义立方体的12个面每个面由2个三角形组成共6个面*212个三角形 edges ( (0,1), (0,3), (0,4), (2,1), (2,3), (2,7), (6,3), (6,4), (6,7), (5,1), (5,4), (5,7) ) # 定义立方体的6个面每个面4个顶点但OpenGL画三角形更方便这里用四边形示例 surfaces ( (0,1,2,3), # 前面 (3,2,7,6), # 左面 (6,7,5,4), # 后面 (4,5,1,0), # 右面 (1,5,7,2), # 顶面 (4,0,3,6) # 底面 ) # 每个面的颜色 (R,G,B) colors ( (1,0,0), # 红 (0,1,0), # 绿 (0,0,1), # 蓝 (1,1,0), # 黄 (1,0,1), # 紫 (0,1,1), # 青 ) def Cube(): 绘制立方体 glBegin(GL_QUADS) for i, surface in enumerate(surfaces): glColor3fv(colors[i]) # 设置当前面的颜色 for vertex in surface: glVertex3fv(vertices[vertex]) # 指定顶点 glEnd() # 用白色线框勾勒边 glColor3fv((1,1,1)) glBegin(GL_LINES) for edge in edges: for vertex in edge: glVertex3fv(vertices[vertex]) glEnd() def main(): pygame.init() display (800, 600) pygame.display.set_mode(display, DOUBLEBUF|OPENGL) # 创建OpenGL渲染上下文 # 设置透视投影 gluPerspective(45, (display[0]/display[1]), 0.1, 50.0) glTranslatef(0.0, 0.0, -5) # 将立方体沿Z轴向后移动以便能看到 glRotatef(20, 1, 0, 0) # 初始绕X轴旋转20度 clock pygame.time.Clock() rotate_speed 1 while True: for event in pygame.event.get(): if event.type pygame.QUIT: pygame.quit() return # 每帧绕Y轴旋转一点点 glRotatef(rotate_speed, 0, 1, 0) # 清除颜色和深度缓冲 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) Cube() # 绘制立方体 pygame.display.flip() clock.tick(60) # 限制60帧 if __name__ __main__: main()代码解析初始化pygame.display.set_mode(..., DOUBLEBUF|OPENGL)创建了一个支持OpenGL渲染的窗口。设置视图gluPerspective设置透视投影参数分别是视野角度、宽高比、近裁剪面、远裁剪面。glTranslatef移动观察点或物体glRotatef旋转物体。绘制循环在游戏主循环中glRotatef(rotate_speed, 0, 1, 0)让立方体每帧绕Y轴旋转一定角度产生动画效果。绘制命令glBegin(GL_QUADS)和glEnd()之间定义了要绘制的图元这里是四边形。glVertex3fv指定顶点glColor3fv指定颜色。运行这个程序你将看到一个在3D空间中缓慢旋转的彩色立方体。这就是你进入3D图形编程世界的第一步5. 构建完整的3D游戏一个简单的3D迷宫探索在掌握了绘制基本3D形状后我们可以尝试一个更综合的项目一个第一人称视角的简单3D迷宫。这个项目将融合3D渲染、键盘输入控制移动、简单的碰撞检测等。项目目标在一个由墙壁组成的网格迷宫中玩家通过第一人称视角移动寻找出口。核心实现步骤迷宫数据表示用一个二维列表表示迷宫地图例如1代表墙0代表通道2代表出口。maze [ [1,1,1,1,1,1,1], [1,0,0,0,0,0,1], [1,0,1,1,1,0,1], [1,0,0,0,1,0,1], [1,1,1,0,1,0,1], [1,0,0,0,0,0,2], # 出口在(5,6) [1,1,1,1,1,1,1] ]玩家状态记录玩家在迷宫网格中的位置(x, y)和朝向角度angle。3D渲染射线投射法这是一种早期3D游戏如《德军总部3D》使用的技术原理简单。从玩家位置发出多条射线对应屏幕的每一列计算每条射线碰到墙壁的距离根据距离决定绘制在屏幕上的墙的高度。距离越远墙越矮模拟透视效果。移动与碰撞根据按键WASD更新玩家位置和朝向。在移动前先检测目标位置是否是墙maze[new_y][new_x] 1如果是则不允许移动。胜利条件检测玩家是否移动到出口格子maze[y][x] 2。由于完整的射线投射实现代码较长这里给出核心的射线计算和绘制伪代码思路# 伪代码/思路 def cast_rays(player_x, player_y, player_angle, maze): screen_width 800 fov math.pi / 3 # 视野90度 ray_angle player_angle - fov / 2 for ray in range(screen_width): # 计算当前射线方向 ray_dir_x math.cos(ray_angle) ray_dir_y math.sin(ray_angle) distance_to_wall 0 hit_wall False # 逐步沿射线方向前进直到碰到墙或走出最大距离 while not hit_wall and distance_to_wall MAX_DEPTH: distance_to_wall 0.05 test_x int(player_x ray_dir_x * distance_to_wall) test_y int(player_y ray_dir_y * distance_to_wall) # 检查是否出界或撞墙 if test_x 0 or test_x len(maze[0]) or test_y 0 or test_y len(maze): hit_wall True distance_to_wall MAX_DEPTH elif maze[test_y][test_x] 1: # 撞墙 hit_wall True # 计算投影到屏幕上的墙高距离越远墙越矮 wall_height int(SCREEN_HEIGHT / distance_to_wall) # 在屏幕当前列ray绘制一个从 (ray, mid - wall_height//2) 到 (ray, mid wall_height//2) 的竖线 draw_vertical_line(ray, wall_height, distance_to_wall) ray_angle fov / screen_width # 转到下一条射线通过实现这样一个3D迷宫你将把3D数学、游戏逻辑和渲染紧密结合起来对3D游戏开发有一个实质性的理解。6. 常见问题与调试技巧在开发过程中你肯定会遇到各种问题。以下是一些常见问题及其解决方案。6.1 Pygame相关错误问题现象可能原因解决方案ModuleNotFoundError: No module named pygamePygame未安装或安装不正确。使用pip install pygame重新安装。确保使用的Python环境与pip对应。在VS Code中检查右下角选择的Python解释器。游戏窗口一闪而过或立即关闭。主循环可能因为异常提前退出或者没有事件循环。检查while running循环是否被正确执行。在循环末尾添加pygame.time.delay(10)或使用clock.tick(60)控制帧率。确保处理了pygame.QUIT事件。图片加载失败显示黑色矩形。图片路径错误或图片格式不支持。使用绝对路径或确保相对路径正确。pygame.image.load(‘assets/player.png’)。检查文件是否存在。Pygame支持PNG, JPG, BMP等常见格式。键盘或鼠标事件没有响应。事件类型判断错误或者事件处理代码放在了错误的位置。确保在游戏主循环中调用pygame.event.get()。检查按键常量的正确性如pygame.K_a代表‘A’键。游戏运行卡顿。每帧绘制的内容太多或者没有限制帧率。使用pygame.time.Clock()对象和clock.tick(60)将帧率限制在60FPS。优化绘制代码只绘制变化的部分脏矩形更新或使用双缓冲DOUBLEBUF标志。6.2 3D与OpenGL相关错误问题现象可能原因解决方案黑屏什么都看不到。相机位置设置不当物体在视锥体之外。检查gluPerspective的近/远裁剪面参数。使用glTranslatef将物体移动到合适位置如(0,0,-5)。确保在绘制前清除了深度缓冲glClear(GL_DEPTH_BUFFER_BIT)。物体显示不全或形状奇怪。顶点坐标定义错误或图元类型GL_QUADS,GL_TRIANGLES与顶点数量不匹配。仔细检查vertices元组中的坐标。确保glBegin(GL_QUADS)后每次指定4个顶点。使用GL_LINES模式勾勒边有助于调试形状。深度测试失效后面的物体挡住了前面的。深度测试未启用或绘制顺序错误。在初始化后调用glEnable(GL_DEPTH_TEST)。确保每帧都清除了深度缓冲见上。OpenGL默认根据绘制顺序和深度值决定遮挡不依赖绘制命令的顺序。错误AttributeError: module ‘OpenGL.GL’ has no attribute ‘xxx’PyOpenGL安装不完整或版本问题。确保安装了加速包pip install PyOpenGL PyOpenGL_accelerate。某些函数在OpenGL.GLU或OpenGL.GLUT中需要正确导入。6.3 通用Python调试建议使用打印语句在关键位置如循环开始、函数调用时打印变量值这是最简单有效的调试方法。分段测试不要一次性写太多代码。写一个功能如绘制一个静态方块测试通过后再添加下一个功能如让方块移动。阅读错误信息Python的错误回溯Traceback会明确指出错误发生的文件、行数和类型。从最后一行往上读找到你自己代码中的错误位置。善用IDE调试器在VS Code或PyCharm中设置断点可以逐行执行代码并实时查看所有变量的值这是定位复杂逻辑错误的利器。7. 最佳实践与项目进阶方向完成上述6个游戏项目后你已经具备了扎实的Python游戏开发基础。以下是一些最佳实践和如何进一步深化的建议。7.1 代码组织最佳实践模块化将游戏的不同部分拆分成独立的模块或类。例如将Player、Enemy、Bullet类放在单独的sprites.py文件中将游戏主循环和初始化放在main.py中。配置文件将窗口大小、颜色、速度、生命值等游戏常量提取到一个settings.py或config.py文件中便于统一管理和修改。资源管理创建一个资源加载函数或类统一加载图片、声音、字体等资源并处理加载失败的情况。状态管理使用明确的变量或状态机来管理游戏的不同状态如MENU、PLAYING、GAME_OVER、PAUSED使逻辑更清晰。注释与文档为函数和复杂逻辑添加注释说明其作用。这对于你未来回顾代码或与他人协作至关重要。7.2 从“能做”到“做好”优化你的游戏添加音效与音乐使用pygame.mixer模块为游戏动作射击、碰撞、得分添加音效并播放背景音乐极大提升游戏体验。实现粒子效果为爆炸、魔法等创建简单的粒子系统使用小矩形或图片赋予它们随机的速度、大小和生命周期然后进行更新和绘制。设计游戏UI使用pygame.font模块在屏幕上绘制文字显示分数、生命值、时间等信息。可以设计开始菜单、暂停界面和游戏结束画面。关卡与难度递增设计多个关卡每关迷宫更复杂或敌人更多。随着游戏进行可以逐渐提高敌人速度、减少玩家生命值恢复等。7.3 进阶学习路线如果你对游戏开发产生了浓厚兴趣可以沿着以下路径继续探索深入游戏引擎Pygame继续挖掘其高级功能如精灵组碰撞优化、像素级碰撞检测、帧动画等。Panda3D一个功能更全面的开源Python游戏引擎官方支持Python内置了物理引擎、模型加载器等更适合开发复杂的3D游戏。Godot虽然主要使用GDScript类似Python但其架构优秀学习资源丰富是独立开发者的热门选择。Unity (C#) / Unreal Engine (C)行业标准功能极其强大但学习曲线陡峭适合目标明确的专业开发者。学习计算机图形学基础如果你想真正理解3D渲染背后的魔法可以学习线性代数向量、矩阵、基本的光照模型冯氏着色、纹理映射等知识。这能让你从“调用API”升级到“创造效果”。参与开源项目或自己发起项目在GitHub上寻找用Python或Pygame开发的开源游戏阅读其代码尝试为其修复bug或添加新功能。最好的学习就是创造尝试从头设计并实现一个属于自己的完整游戏。通过这6个游戏的实战你走过的路远不止是学会了Python语法。你掌握了项目开发的完整流程从分析需求、设计数据结构、编写逻辑、调试错误到最终运行。这种“做中学”获得的解决问题的能力是任何理论教程都无法替代的财富。希望你能保持这份热情继续在编程和创造的世界里探索。