#include "ui.h" #include "gobang.h" #include "config.h" #include "globals.h" #include #include #ifdef _WIN32 #include #include #else #include #endif /** * @brief 显示游戏主菜单 */ void display_main_menu() { printf("===== 五子棋游戏 =====\n"); printf("1. AI模式\n"); printf("2. 玩家比赛\n"); printf("3. 网络对战\n"); printf("4. 复盘模式\n"); printf("5. 游戏设置\n"); printf("6. 游戏规则\n"); printf("7. 关于游戏\n"); printf("8. 退出游戏\n"); printf("=====================\n"); } /** * @brief 显示棋盘 */ void display_board() { printf("\n "); // 打印列号 for (int j = 0; j < BOARD_SIZE; j++) { printf("%2d", j); } printf("\n"); // 打印棋盘内容 for (int i = 0; i < BOARD_SIZE; i++) { printf("%2d", i); // 打印行号 for (int j = 0; j < BOARD_SIZE; j++) { if (board[i][j] == EMPTY) { printf(" ·"); // 空位用点表示 } else if (board[i][j] == PLAYER || board[i][j] == PLAYER1) { printf(" ●"); // 玩家1用实心圆表示 } else { printf(" ○"); // 玩家2/AI用空心圆表示 } } printf("\n"); } printf("\n"); } /** * @brief 显示游戏状态信息 * @param current_player 当前玩家 * @param step_count 当前步数 */ void display_game_status(int current_player, int step_count) { printf("当前步数: %d\n", step_count); if (current_player == PLAYER || current_player == PLAYER1) { printf("当前玩家: ●\n"); } else { printf("当前玩家: ○\n"); } } /** * @brief 显示获胜信息 * @param winner 获胜者 */ void display_winner(int winner) { printf("\n游戏结束!\n"); if (winner == PLAYER) { printf("玩家获胜!\n"); } else if (winner == AI) { printf("AI获胜!\n"); } else if (winner == PLAYER1) { printf("玩家1获胜!\n"); } else if (winner == PLAYER2) { printf("玩家2获胜!\n"); } else { printf("平局!\n"); } } /** * @brief 显示游戏设置菜单 */ void display_settings_menu() { printf("\n===== 游戏设置 =====\n"); printf("1. 棋盘大小设置\n"); printf("2. 禁手规则设置\n"); printf("3. 计时器设置\n"); printf("4. 网络配置设置\n"); printf("5. AI难度设置\n"); printf("6. 返回主菜单\n"); printf("==================\n"); } /** * @brief 清屏函数 */ void clear_screen() { #ifdef _WIN32 system("cls"); #else system("clear"); #endif } /** * @brief 暂停等待用户输入 * @param prompt 提示信息 */ void pause_for_input(const char* prompt) { printf("%s", prompt); #ifdef _WIN32 _getch(); #else getchar(); #endif } /** * @brief 显示游戏规则 */ void display_game_rules() { printf("\n===== 五子棋游戏规则 =====\n"); printf("1. 🎮 游戏目标:\n"); printf(" 在棋盘上连成五个同色棋子(横、竖、斜均可)\n\n"); printf("2. 🔄 游戏流程:\n"); printf(" - ⚫ 黑棋先行,双方轮流落子\n"); printf(" - 📍 输入坐标格式:行号 列号(如:7 7)\n"); printf(" - ✨ 棋子落在棋盘交叉点上\n\n"); printf("3. 🏆 胜负判定:\n"); printf(" - 🎉 率先连成五子者获胜\n"); printf(" - 🤝 棋盘下满无人获胜则为平局\n\n"); printf("4. 🚫 禁手规则(可选):\n"); printf(" - ❌ 三三禁手:同时形成两个活三\n"); printf(" - ❌ 四四禁手:同时形成两个冲四\n"); printf(" - ❌ 长连禁手:连成六子或以上\n\n"); printf("5. 🛠️ 特殊功能:\n"); printf(" - ↩️ 悔棋:输入 'R' 或 'r' 可悔棋\n"); printf(" - 💾 保存:游戏结束后可保存对局记录\n"); printf(" - 📖 复盘:可加载历史对局进行复盘\n"); printf("============================\n"); } /** * @brief 显示关于信息 */ void display_about() { printf("\n===== 关于五子棋游戏 =====\n"); printf("🎮 游戏名称:五子棋人机对战\n"); printf("📦 版本:4.0\n"); printf("👨‍💻 开发者:刘航宇\n"); printf("📧 联系邮箱:3364451258@qq.com\n"); printf("🌐 项目主页:https://github.com/LHY0125/Gobang-Game\n\n"); printf("✨ 主要特性:\n"); printf(" 🤖 智能AI对战(支持多种难度)\n"); printf(" 👥 双人对战模式\n"); printf(" 🌐 网络对战(局域网/互联网)\n"); printf(" 📝 对局记录与复盘\n"); printf(" 🚫 禁手规则支持\n"); printf(" ⏱️ 计时器功能\n"); printf(" 📏 自定义棋盘大小\n"); printf(" 📊 评分系统\n\n"); printf("🙏 感谢使用!\n"); printf("========================\n"); }