# :telescope: 宠物项目

宠物项目是学习编程语言、库和/或框架的实践经验的绝佳机会。它们还可以作为面试的起点，并帮助开启工作机会。

找到并选择适合宠物项目的正确想法可能具有挑战性。为了帮助克服这一问题，我们已经编制了一个链接和想法列表，以便让您开始。阅读完此列表后，您应该能够选择最合适的想法或受到启发创建自己的想法！

## :arrows_counterclockwise: 外部链接

* [Google Summer of Code](https://summerofcode.withgoogle.com/archive)

各种公司和社区提供了一系列项目，作为年度 Google 学生实习计划的一部分。存档包含近年来的项目，其中有大量针对 C++ 语言可用的项目。您可以在自己练习中找到感兴趣的东西或考虑尝试未来实习。

* [基于项目学习 - C++](https://github.com/practical-tutorials/project-based-learning#cc)

该存储库保存了不同编程语言（包括 C++）的一组小型项目集合，并提供广泛且详细清单。

* [Programming challenges](https://programming-challenges.jeremyjaydan.dev/) - [PNG image](https://programming-challenges.jeremyjaydan.dev/media/programming-challenges-v4.0.png)

Pet Projects 想法轮盘允许您设置所需复杂性级别并旋转轮盘。旋转结果将随机选择要解决任务：)


## :boom: 宠物 - 项 目 列 表

### :arrow_forward: 游戏

以下是不包含复杂 AI 或动态世界生成内容但可作为起点实现游戏功能列表。你可以在进展过程中改善额外功能。对于图形库，你可以使用易于使用且提供足够特色以创建简单 2D 或 2.5D 图形接口（使用精灵）的[SFML](https://www.sfml-dev.org/) 。如果你想做更多与应用 物理相关方面，则可以从简单引擎如[Box2D](https://box2d.org/) 开始，也可以学习更高级引擎 如[Cocos2D](https:/ /www.cocos.com/en/) 和[Unreal Engine](https://www.unrealengine.com/en-US/)。记得遵循“从简单到复杂”的规则，先从简单游戏开始，然后逐渐增加难度。

* 贪吃蛇
* 俄罗斯方块
* 生命游戏
* 十五数码问题
* 打砖块
* 扫雷
* 2048
* 纸牌接龙
* 蜘蛛纸牌接龙
* 弹球
* 奇才大冒险  
* 迷宫  
* 面向两个至四个玩家网络游戏：弹球、扑克、国际象棋、海战等 

建议阅读以下源代码，其中包含有关 gamedev 各种算法信息。他们可能对上述任何一个游戏或者你自己构思出来都非常有用：
- https://www.redblobgames.com/
- http://www.squidi.net/three/

---

### :arrow_forward: 应用程序

创建应用程序时，从最简单的实现开始，例如控制台应用程序。完成每个步骤后，设置更复杂的任务，例如添加图形界面、使应用程序使用 HTTP 请求从源请求数据，然后将接收到的数据写入/读取到文件/数据库等。始终遵循“由简至繁”的原则。

以下是一些适合初学者的潜在项目示例：

* 网络聊天（原始套接字或使用[gRPC](https://grpc.io/docs/languages/cpp/quickstart)）
* 计算器
* 文件管理器
* 货币转换器
* 从任何 Github 存储库检索“pull-request”或“issue”列表
* 自动化常规任务，如各种计算和生成表格形式的报告。

---

### :arrow_forward: 学生申请

以下示例更适合已经学习过或最近学习过基础课程（如线性代数、解析几何、数学分析、物理等）的学生。涉及应用他们所学理论知识的任务可以帮助他们实现两个目标：通过实际应用巩固知识，并练习编程。这条路不限于其他人，但对于学生来说比较容易因为他们对于这些科目有着新鲜记忆。

* 开发一个线性代数库，包括矩阵，向量和执行计算。
* 建模各种进程，如物理和理论力学。
* 实施数字方法，包括积分，微分，近似和插值

---

[**返回主页**](README.md)