ROS2话题发布与RVIZ2可视化结合的俄罗斯方块游戏
项目描述
本资源文件提供了一个基于ROS2的话题机制和RVIZ2可视化的俄罗斯方块游戏实现。通过编写Tetris.h
、Tetris.cpp
、Block.h
、Block.cpp
、Map.h
、Map.cpp
三个类,锻炼了C++编程能力。同时,利用key.cpp
通过ROS2的话题机制读取键盘输入信息,并将这些信息通过话题发布给RVIZ2,实现游戏的可视化。
功能介绍
1. Tetris类
- 功能:Tetris类是游戏的核心,继承自
rclcpp::Node
。它负责订阅其他节点发布的话题,控制方块的移动、旋转,处理方块触底后融入地图的逻辑,以及检测并清除满行的地图块。 - 实现:Tetris类通过订阅键盘输入话题,根据输入信息控制方块的移动和旋转。当方块触底后,调用Map类的方法将方块融入地图,并检测是否有满行需要清除。
2. Map类
- 功能:Map类负责管理游戏地图,实现方块触底后融入地图的逻辑,以及检测并清除满行的地图块。
- 实现:Map类使用二维数组保存地图中每个格子的状态(是否为空),并提供方法用于方块融入地图和清除满行的操作。
3. Block类
- 功能:Block类负责管理方块的移动、旋转,以及判断方块是否接触到地图块。
- 实现:Block类保存了方块的类型、当前占用的格子、当前在地图中的位置等数据,并提供方法用于方块的移动、旋转和碰撞检测。
4. key.cpp
- 功能:key.cpp通过ROS2的话题机制读取键盘输入信息,并将这些信息发布到ROS2的话题中,供Tetris类订阅和处理。
- 实现:key.cpp通过监听键盘输入,将输入信息转换为ROS2话题消息并发布。
使用说明
- 编译与运行:
- 确保已安装ROS2和RVIZ2。
- 克隆本仓库到本地,并进入项目目录。
- 使用
colcon build
命令编译项目。 - 运行
ros2 launch
命令启动游戏节点和RVIZ2可视化界面。
- 游戏操作:
- 使用键盘方向键控制方块的移动和旋转。
- 方块触底后会融入地图,满行后会自动清除。
注意事项
- 本项目的方块处理逻辑较为简单,适合ROS2和RVIZ2的入门学习。
- 对于更复杂的俄罗斯方块游戏逻辑,可以参考其他俄罗斯方块教程进行优化。
贡献
欢迎对本项目进行改进和扩展,如有任何问题或建议,请提交Issue或Pull Request。