一个使用HTML5 Canvas和原生JavaScript实现的小型即时战略游戏。游戏采用模块化结构,便于维护和扩展。
- 资源收集与单位生产:收集资源并生产单位
- 单位合并与升级:相同等级的单位可以合并升级
- 自动战斗系统:单位会自动攻击范围内的敌人
- 多等级单位:不同等级的单位拥有不同的战斗力
- 编队系统:可以创建和管理多个单位编队
- AI敌人:电脑控制的敌人会攻击你的基地和单位
- 游戏目标:摧毁敌方基地获得胜利,并保护自己的基地不被摧毁。
- 基础操作:
- 左键点击基地:创建新单位(消耗10资源)
- 左键点击单位:选择单位
- 左键拖动:框选多个单位
- 按住Shift键同时左键点击:选择多个单位
- 右键点击地图:移动选中的单位
- 右键点击资源节点:让选中的单位去收集资源
- 右键点击敌人:命令选中的单位攻击敌人
- 数字键(1-9):选择对应编号的编队
- Ctrl+Shift+数字键(1-9):保存当前选中的单位为编队
- M键:合并选中的相同等级单位
- 基地(紫色方块):用于创建新单位
- 单位(蓝色圆形):可以移动、收集资源和攻击敌人
- 资源节点(黄色圆形):包含可收集的资源
- 敌人(红色圆形):会攻击你的基地和单位
- 敌方基地(红色方块):会产生敌方单位
- UI显示:显示当前拥有的资源数量和单位数量
游戏实现了单位合并升级系统:
- 等级1:蓝色(初始单位)
- 等级2:紫色(攻击力提升2.5倍,更高生命值)
- 等级3:绿色(攻击力提升6.25倍,最高生命值)
单位可以通过两种方式升级:
- 自动合并:当两个相同等级的单位靠近时,会自动合并成一个更高等级的单位
- 手动合并:选中多个相同等级的单位,按M键进行合并
- 先快速收集资源,扩大单位数量
- 尽量合并单位形成高等级部队
- 派出少量单位去骚扰敌方资源收集
- 使用编队功能便于管理大量单位
- 注意保护自己的基地和资源节点
- 高等级单位比大量低等级单位更有效
项目采用了模块化设计,将不同功能分离到不同的文件中:
/src
/entities - 游戏实体类
Entity.js - 基础实体类
Base.js - 玩家基地类
Unit.js - 玩家单位类
Enemy.js - 敌人类
EnemyBase.js - 敌方基地类
EnemyUnit.js - 敌方单位类
ResourceNode.js - 资源节点类
config.js - 游戏配置
effects.js - 特效系统
game.js - 游戏主逻辑
input.js - 输入处理
main.js - 游戏入口
state.js - 游戏状态管理
utils.js - 工具函数
index.html - 主页面
-
克隆或下载本仓库
git clone https://github.com/yourusername/SimpleRTS.git cd SimpleRTS -
有两种方式运行游戏:
- 直接在浏览器中打开
index.html文件 - 使用本地服务器(推荐,避免某些浏览器的CORS限制)
# 使用Python python -m http.server # 或使用Node.js的http-server npx http-server
- 直接在浏览器中打开
-
在浏览器中访问游戏(如使用本地服务器,通常是http://localhost:8000)
游戏的大部分参数都在src/config.js文件中进行配置,包括:
- 游戏画布大小
- 单位属性(速度、生命值、攻击力)
- 资源收集速率
- 敌人生成速率和属性
- 合并机制参数
- 在
src/entities/目录下创建新的实体类文件 - 继承基础的
Entity类或其他适合的类 - 在游戏主循环中添加对新实体的处理
- 添加新的输入处理逻辑:修改
src/input.js - 调整游戏状态管理:修改
src/state.js - 增加新的视觉效果:扩展
src/effects.js
- 使用原生JavaScript ES6模块化开发
- 采用面向对象编程思想,使用类继承结构
- 使用Canvas API进行游戏渲染
- 实现了基本的游戏循环、碰撞检测和状态管理
游戏已经实现了一些基本的性能优化:
- 使用requestAnimationFrame进行渲染
- 优化碰撞检测算法
- 只在需要时更新画布
- 有限的特效处理
- 添加更多单位类型和特殊能力
- 实现更复杂的AI策略
- 添加声音效果和更多视觉效果
- 实现小地图功能
- 添加游戏内教程
- 实现游戏存档功能
- 添加多人游戏支持
- 添加移动设备触控支持
欢迎贡献代码、报告问题或提出改进建议!
- Fork本仓库
- 创建您的特性分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add some amazing feature') - 推送到分支(
git push origin feature/amazing-feature) - 开启一个Pull Request
本项目采用MIT许可证 - 查看LICENSE文件了解详情
如有问题或建议,请通过以下方式联系:
- 项目GitHub Issues页面
- 邮箱:your.email@example.com
希望您享受这个简单的RTS游戏!