# opensolitaire **Repository Path**: tianyuanoss/opensolitaire ## Basic Information - **Project Name**: opensolitaire - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-06 - **Last Updated**: 2025-11-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 纸牌接龙 (Solitaire) - Qt + Axmol 集成演示 这是一个展示如何将 **Axmol 游戏引擎** 集成到 **Qt 应用程序** 中的完整演示项目。 ## 📋 项目简介 - **游戏类型**: 纸牌接龙(演示版) - **UI框架**: Qt5/Qt6(自动检测) - **游戏引擎**: Axmol Engine - **渲染**: OpenGL 3.3 Core - **支持平台**: Deepin Linux, macOS ## ✨ 特性 - ✅ Qt QOpenGLWidget 无缝集成 Axmol 引擎 - ✅ 完整的事件桥接(鼠标、键盘) - ✅ 坐标系自动转换(Qt左上 ↔ Axmol左下) - ✅ Qt菜单栏和状态栏 - ✅ 实时FPS显示 - ✅ 卡牌拖拽交互演示 - ✅ Deepin主题自动适配 - ✅ 支持高DPI显示 ## 🏗️ 项目结构 ``` solitaire-qt/ ├── CMakeLists.txt # 构建配置(支持Qt5/Qt6动态检测) ├── README.md # 本文件 ├── src/ │ ├── main.cpp # 程序入口 │ ├── MainWindow.h/.cpp # 主窗口(菜单、状态栏) │ ├── AxmolWidget.h/.cpp # Qt-Axmol桥接类(核心) │ └── SolitaireScene.h/.cpp # 纸牌游戏场景 └── Resources/ # 游戏资源目录(占位) ``` ## 🔧 依赖安装 ### Deepin Linux (推荐 Deepin 20.x / 23) ```bash # 更新包索引 sudo apt update # 安装Qt开发库(Qt5或Qt6,根据系统版本) # Deepin 20.x (Qt5): sudo apt install -y qtbase5-dev qtbase5-dev-tools libqt5opengl5-dev # Deepin 23 (Qt6): sudo apt install -y qt6-base-dev libqt6opengl6-dev libqt6openglwidgets6 # 安装CMake和构建工具 sudo apt install -y cmake build-essential git # 安装OpenGL开发库 sudo apt install -y libgl1-mesa-dev libglu1-mesa-dev ``` ### macOS ```bash # 安装Homebrew(如果还没有) /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # 安装Qt6 brew install qt@6 # 安装CMake brew install cmake # 设置Qt环境变量(添加到 ~/.zshrc 或 ~/.bash_profile) echo 'export PATH="/usr/local/opt/qt@6/bin:$PATH"' >> ~/.zshrc source ~/.zshrc ``` ## 🚀 编译和运行 ### 1. 确认Axmol引擎已在父目录 ```bash # 项目目录应该在axmol目录下 # /path/to/axmol/ # ├── axmol/ # 引擎核心 # └── solitaire-qt/ # 本项目 ``` ### 2. 创建构建目录 ```bash cd /path/to/axmol/solitaire-qt mkdir build cd build ``` ### 3. 配置CMake ```bash # Linux (Deepin) cmake .. -DCMAKE_BUILD_TYPE=Release # macOS cmake .. -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_PREFIX_PATH=/usr/local/opt/qt@6 ``` **常见问题**: - 如果找不到Qt,手动指定路径:`-DCMAKE_PREFIX_PATH=/path/to/qt` - Deepin 20.x用户如果只有Qt5,CMake会自动检测使用Qt5 ### 4. 编译 ```bash cmake --build . -j$(nproc) # Linux cmake --build . -j$(sysctl -n hw.ncpu) # macOS ``` ### 5. 运行 ```bash # Linux ./SolitaireQt # macOS ./SolitaireQt.app/Contents/MacOS/SolitaireQt # 或者直接打开应用包 open SolitaireQt.app ``` ## 🎮 使用说明 ### 游戏操作 - **鼠标拖拽**: 点击并拖动卡牌 - **菜单操作**: - `游戏 -> 新游戏` (Ctrl+N): 开始新游戏 - `游戏 -> 重新开始` (Ctrl+R): 重新开始当前游戏 - `游戏 -> 撤销` (Ctrl+Z): 撤销上一步(待实现) - `游戏 -> 退出` (Ctrl+Q): 退出程序 - `帮助 -> 关于`: 查看项目信息 ### 界面说明 ``` ┌─────────────────────────────────────────┐ │ [游戏] [帮助] (菜单栏) │ ├─────────────────────────────────────────┤ │ │ │ Axmol 游戏渲染区域 │ │ (90%屏幕空间) │ │ │ ├─────────────────────────────────────────┤ │ 移动: 0 时间: 00:00 分数: 0 FPS: 60 │ ← 状态栏 └─────────────────────────────────────────┘ ``` ## 🔬 技术要点 ### 核心类说明 #### 1. AxmolWidget (src/AxmolWidget.h) **职责**: Qt与Axmol的桥接层 ```cpp class AxmolWidget : public QOpenGLWidget { // 关键功能: // - 管理OpenGL上下文 // - 初始化Axmol Director // - 渲染循环控制 (paintGL) // - Qt事件 -> Axmol事件转换 // - 坐标系转换 (Qt左上 -> Axmol左下) }; ``` **关键方法**: - `initializeGL()`: 初始化Axmol引擎 - `paintGL()`: 每帧调用 `Director::mainLoop(deltaTime)` - `mousePressEvent()` 等: 转发Qt事件到Axmol #### 2. MainWindow (src/MainWindow.h) **职责**: 应用主窗口 - 管理UI布局 - 创建菜单栏和状态栏 - 处理用户交互 - 游戏状态管理(时间、分数) #### 3. SolitaireScene (src/SolitaireScene.h) **职责**: Axmol游戏场景 - 创建游戏内容(背景、卡牌) - 处理触摸/鼠标事件 - 游戏逻辑(可扩展) ### 坐标系转换 ```cpp // Qt: 左上角为原点(0,0), Y轴向下 // Axmol: 左下角为原点(0,0), Y轴向上 ax::Vec2 qtPosToAxmol(const QPoint& pos) { return ax::Vec2(pos.x(), height() - pos.y()); } ``` ### 渲染循环 ```cpp void AxmolWidget::paintGL() { float deltaTime = calculateDeltaTime(); m_director->mainLoop(deltaTime); // 更新+渲染 update(); // 请求下一帧 } // Qt自动调用swapBuffers() ``` ## 📦 打包发布 ### Deepin Linux (.deb) ```bash # 1. 构建Release版本 cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr make # 2. 安装到临时目录 make install DESTDIR=package # 3. 创建deb包(需要安装dpkg-deb) # 创建DEBIAN/control文件 mkdir -p package/DEBIAN cat > package/DEBIAN/control << EOF Package: solitaire-qt Version: 1.0.0 Architecture: amd64 Maintainer: Your Name Depends: libqt5core5a, libqt5gui5, libqt5widgets5, libqt5opengl5 Description: Solitaire game using Qt and Axmol EOF # 构建deb包 dpkg-deb --build package solitaire-qt_1.0.0_amd64.deb ``` ### macOS (.app) ```bash # CMake已自动创建.app包 # 复制依赖库(使用macdeployqt) /usr/local/opt/qt@6/bin/macdeployqt SolitaireQt.app # 创建DMG安装包 hdiutil create -volname "Solitaire" -srcfolder SolitaireQt.app \ -ov -format UDZO Solitaire-1.0.0.dmg ``` ## 🐛 常见问题 ### Q1: CMake找不到Qt **解决**: ```bash # 手动指定Qt路径 cmake .. -DCMAKE_PREFIX_PATH=/path/to/qt ``` ### Q2: 编译时找不到axmol头文件 **解决**: - 确保项目在axmol目录下:`/path/to/axmol/solitaire-qt/` - 检查`CMakeLists.txt`中的`_AX_ROOT`路径 ### Q3: 运行时OpenGL版本不支持 **解决**: ```bash # 检查OpenGL版本 glxinfo | grep "OpenGL version" # Linux system_profiler SPDisplaysDataType | grep OpenGL # macOS # 如果版本低于3.3,修改AxmolWidget.cpp中的版本号 format.setVersion(2, 1); # 降级到OpenGL 2.1 ``` ### Q4: Deepin上无法显示中文 **解决**: ```bash # 安装中文字体 sudo apt install fonts-wqy-zenhei fonts-wqy-microhei ``` ## 🔗 扩展开发 ### 添加真实卡牌纹理 1. 将卡牌图片放到 `Resources/images/` 目录 2. 修改 `SolitaireScene.cpp`: ```cpp auto card = ax::Sprite::create("images/card_ace_hearts.png"); card->setPosition(ax::Vec2(x, y)); addChild(card); ``` ### 实现完整纸牌逻辑 参考文件: `src/SolitaireScene.cpp` - `onTouchEnded()`: 添加卡牌放置规则判断 - 添加牌堆管理类 - 实现游戏胜利检测 ### 集成Deepin系统托盘 ```cpp #include auto trayIcon = new QSystemTrayIcon(QIcon("icon.png"), this); trayIcon->show(); ``` ## 📚 参考资料 - [Axmol引擎文档](https://axmol.dev/) - [Qt6文档 - QOpenGLWidget](https://doc.qt.io/qt-6/qopenglwidget.html) - [Deepin开发者文档](https://docs.deepin.org/) ## 📄 许可证 MIT License - 自由使用和修改 ## 🤝 贡献 欢迎提交Issue和Pull Request! --- **项目状态**: ✅ 可运行的演示项目 **下一步**: - [ ] 实现完整纸牌游戏逻辑 - [ ] 添加真实卡牌美术资源 - [ ] 实现撤销/重做功能 - [ ] 添加音效和背景音乐 - [ ] 支持多种纸牌游戏变体 - [ ] 在Deepin应用商店上架 --- **有问题?** 查看 `axmol-qt-integration-guide.md` 获取详细的技术方案说明。