技术栈:C++ + EasyX图形库
教程来源:B站 UP主 Voidmatrix
项目类型:2D射击小游戏
一、为什么选择这个项目?
作为一名编程学习者,我一直想做一个能"看得见"的项目。命令行程序虽然能巩固基础,但缺乏视觉反馈。于是我在B站找到了Voidmatrix UP主的C++游戏开发教程,决定跟着做一个射击游戏。
选择理由:
- 使用EasyX库,上手简单
- 项目规模适中,适合初学者
- 涵盖游戏开发核心概念
- 有完整的教程视频支持
二、技术栈介绍
核心工具
表格
| 工具 | 用途 |
|---|---|
| C++ | 主要编程语言 |
| EasyX | 图形绘制库 |
| Visual Studio | 开发环境 |
| Git | 版本控制(私有仓库) |
关键技术点
- 图形渲染:使用EasyX进行窗口创建和图形绘制
- 游戏循环:实现帧率控制的游戏主循环
- 碰撞检测:判断子弹与敌机的碰撞
- 状态管理:游戏开始、运行、结束状态切换
- 资源加载:图片、音效等资源的加载与管理
三、核心功能模块
1. 玩家控制模块
- 键盘监听(WASD或方向键)
- 玩家飞机移动
- 发射子弹
2. 敌机生成模块
- 随机生成敌机位置
- 敌机向下移动
- 不同难度的敌机类型
3. 碰撞检测模块
- 子弹与敌机碰撞
- 玩家与敌机碰撞
- 爆炸效果触发
4. 游戏状态模块
- 分数统计
- 生命值管理
- 游戏结束判定
5. 界面渲染模块
- 背景绘制
- 游戏元素绘制
- UI显示(分数、生命值等)
四、遇到的挑战与解决方案
🔴 问题1:游戏画面闪烁
现象:游戏运行时画面频繁闪烁,影响体验
原因:直接在窗口上绘制,没有使用双缓冲
解决方案:
启用EasyX的双缓冲功能
先在内存中绘制,再一次性显示到窗口
收获:理解了双缓冲技术的原理和重要性
🔴 问题2:碰撞检测不准确
现象:有时候子弹明明打中了敌机,但没有判定
原因:简单的矩形碰撞检测不够精确
解决方案:
调整碰撞检测的判定范围
使用更精确的碰撞盒(Hitbox)
收获:学习了游戏开发中碰撞检测的常见方法
🔴 问题3:帧率不稳定
现象:不同电脑上游戏速度不一样
原因:没有控制游戏循环的帧率
解决方案:
使用Sleep()控制每帧的时间
计算delta time实现帧率独立
收获:理解了帧率控制对游戏体验的重要性
🔴 问题4:内存泄漏
现象:长时间运行后程序变慢
原因:图片资源没有正确释放
解决方案:
在程序结束时释放所有资源
使用智能指针管理资源
收获:加强了C++内存管理的意识
五、学习收获
技术层面
- C++语法巩固:类、对象、指针、内存管理
- 图形编程入门:理解了游戏渲染的基本流程
- 游戏架构理解:游戏循环、状态机、事件处理
- 调试能力提升:学会了使用调试器定位问题
思维层面
- 模块化思维:将大问题分解为小模块
- 问题排查能力:学会分析bug的根本原因
- 代码规范意识:注释、命名、结构的重要性
- 版本控制习惯:使用Git记录每次修改
六、项目截图展示
七 、 我的心得
- 不要只抄代码:理解每一行代码的作用
- 多动手修改:尝试添加自己的功能
- 记录问题:建立自己的问题笔记
- 及时复习:做完项目后回顾知识点
- 尊重原创:标注教程来源,不滥用他人成果
九、致谢
感谢 B站 UP主 Voidmatrix 提供的优质教程,让我能够系统地学习游戏开发的基础知识。
教程链接:【从零开始的C++游戏开发】全宇宙最简单的类吸血鬼幸存者游戏开发 | EasyX制作提瓦特幸存者_哔哩哔哩_bilibili
十、写在最后
这个项目虽然是一个跟随教程完成的学习项目,但对我来说意义重大。它是我第一个能"玩"的程序,让我真正感受到了编程的乐趣。
编程不只是写代码,更是创造的过程。 每一个功能的实现,每一个bug的解决,都让我离"开发者"这个身份更近一步。
接下来,我会继续学习更多技术,做出更好的项目。感谢阅读我的学习记录!
标签:#C++ #游戏开发 #学习记录 #EasyX #编程入门
提示:本文仅记录学习过程,代码未公开。如需学习,请前往B站观看原教程。