# 模拟游戏机 **Repository Path**: zheng-zitao/analog-game-console ## Basic Information - **Project Name**: 模拟游戏机 - **Description**: C++实现AI五子棋和贪吃蛇 - **Primary Language**: C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2022-04-09 - **Last Updated**: 2024-09-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 1 背景 ​ 大一下大作业开发,因为我又会做贪吃蛇,又会做AI五子棋,所以我把两个游戏都做到了这个软件里面。 # 2 软件特点 1. 未引入任何第三方库 2. 运用决策树模型和加权打分的方式,实现AI五子棋 # 3 实现 ## 3.1 贪吃蛇实现 ​ 常规实现。关键是维护蛇头蛇尾,判断吃没吃到东西。 ## 3.2 AI五子棋实现 ​ 主要是 决策树 + 矩阵乘法。 ​ 决策树使用**极小极大搜索**和**阿尔法贝塔减枝**完成。 ​ 矩阵乘法,主要是给五子棋各个棋型的特征做一个加权。本来想写神经网络,但是没写出反向传播,所以参数是靠人工调整的,比如三连的权重会比二连高。基于下棋的常识进行修改。 ​ 棋型特征,靠一些复杂的条件语句和循环语句来实现。 ## 3.3 GUI ​ 使用window.h的相关GUI函数完成绘图。 # 4 功能点 ## 4.1 贪吃蛇 1. 胜负判定 2. 暂停游戏 3. 手动增长贪吃蛇 4. 手动加速 5. 手动减速 6. 暂停游戏 ## 4.2 AI五子棋 1. 下棋 2. 晦气 3. AI助手 4. 胜负判定 ## 4.3 其他 1. 图形化界面操作 2. 键盘操作 # 5 开始游戏 ​ 可以选择 Visual Studio 2017 启动 **模拟游戏机.sln**,然后编译运行。建议采用编译运行的方式。 ​ 也可以启动 **模拟游戏机/模拟游戏机.exe** 直接启动游戏。exe方式在初始化阶段会有界面不全的情况,在玩过一把游戏后将会恢复正常。 # 6 游戏方式 ​ 双击源程序之后,即进入游戏菜单。通过键盘的上下键可以切换菜单选项,按回车键可以选择菜单选项。 ​ 若选择“贪吃长蛇”,将通过键盘的上下左右键使得贪吃蛇移动。游戏玩家应尽可能吃到更多的食物,不能碰到游戏边界,不能碰到自己的身体,否则游戏结束。随着游戏玩家吃得食物增加,游戏速度将会逐步加快。若游戏玩家可以吃完全部食物,将进入游戏胜利画面。若在这之前结束,将进入游戏失败画面。游戏进行过程中,可以用鼠标点击右方的“加速”,“减速”,“增长身体”,“退出”与程序进行交互。 ​ 若选择“五子连棋”,通过键盘的左右键可以切换子菜单选项。若选择“机械迷城”,将会进入AI模式;若选择“宝可梦”,将会进入玩家对抗的游戏模式。两个游戏模式的游戏规则与一般五子棋的游戏规则一致。在两个模式中,下到一定程度时,将弹出“AI helps you”的功能,可以让AI提示我们该如何下棋。 ​ 若选择“更多游戏”,将看到“写不动了”的画面。再按一次回车将会回到游戏菜单。 ​ 若选择“退出”,将退出游戏。 # 7 界面展示 ## 7.1 开始界面 ![begin](./img/begin.png) ## 7.2 贪吃长蛇 ![snake](./img/snake.png) ## 7.3 五子棋——人机大战 ![goBang](./img/goBang.png) ## 7.4 五子棋——AI助手 ![helper](./img/helper.png)