我的第一个C++射击游戏学习记录

0 阅读5分钟

技术栈: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++内存管理的意识


五、学习收获

技术层面

  1. C++语法巩固:类、对象、指针、内存管理
  2. 图形编程入门:理解了游戏渲染的基本流程
  3. 游戏架构理解:游戏循环、状态机、事件处理
  4. 调试能力提升:学会了使用调试器定位问题

思维层面

  1. 模块化思维:将大问题分解为小模块
  2. 问题排查能力:学会分析bug的根本原因
  3. 代码规范意识:注释、命名、结构的重要性
  4. 版本控制习惯:使用Git记录每次修改

六、项目截图展示

转存失败,建议直接上传图片文件


我的心得

  1. 不要只抄代码:理解每一行代码的作用
  2. 多动手修改:尝试添加自己的功能
  3. 记录问题:建立自己的问题笔记
  4. 及时复习:做完项目后回顾知识点
  5. 尊重原创:标注教程来源,不滥用他人成果

九、致谢

感谢 B站 UP主 Voidmatrix 提供的优质教程,让我能够系统地学习游戏开发的基础知识。

教程链接:【从零开始的C++游戏开发】全宇宙最简单的类吸血鬼幸存者游戏开发 | EasyX制作提瓦特幸存者_哔哩哔哩_bilibili


十、写在最后

这个项目虽然是一个跟随教程完成的学习项目,但对我来说意义重大。它是我第一个能"玩"的程序,让我真正感受到了编程的乐趣。

编程不只是写代码,更是创造的过程。  每一个功能的实现,每一个bug的解决,都让我离"开发者"这个身份更近一步。

接下来,我会继续学习更多技术,做出更好的项目。感谢阅读我的学习记录!


标签:#C++ #游戏开发 #学习记录 #EasyX #编程入门


提示:本文仅记录学习过程,代码未公开。如需学习,请前往B站观看原教程。