前面介绍了“控制台版本的神经网络五子棋”和“MFC对话框版本的神经网络五子棋”的开发过程,本文继续介绍一个可用于自主创业的实用案例——神经网络五子棋(家庭版)。因为实用需要考虑到诸多细节,所以本篇文章的篇幅较之前两篇长些。
1.神经网络五子棋(家庭版)
该案例虽然命名为家庭版,但不限于家庭使用,其他机构和个人亦均可使用。该版本同样是在MFC对话框上进行开发的,但是增加了人工落子(即用鼠标点击落子)部分,完成了人机对战功能。
(1)创建项目
运行Visual Studio 2015,选择菜单“文件-->新建-->项目”,在对话框的左侧选择“已安装-->模板-->Visual C++-->MFC”,在右侧选择“MFC应用程序”,并选定项目保存的位置和项目名称(此处项目名为test,保存在桌面),如下图所示:

点击“确定”按钮,在弹出的对话框的左侧选择“应用程序类型”,右侧选择“基于对话框”,并取消“安全开发生命周期(SDL)检查”的选择,若想开发的是绿色软件以免去分发时的动态库缺失问题,可将“MFC的使用”切换选为“在静态库中使用MFC”,详细如下图所示:

在对话框的左侧选择“用户界面功能”,右侧取消勾选“系统菜单”,如此可避免“关于”、最大化、最小化等带来的界面刷新问题,若需要支持这些功能,可自行在后续增加界面刷新机制,详细如下图所示:

点击“完成”按钮,至此完成了项目的创建,显示如下:

(2)界面(GUI)设计
本例需要一个显示棋盘的控件、一个按钮用来开始新游戏、一个按钮用来保存模型数据、以及一个退出按钮。故而,删除中间对话框上已有的“TODO:在此防止对话框控件”控件和确定、取消按钮;从上图右侧“工具箱”中将“Picture Control” 拖拽到中间的对话框上,调整大小,右击该控件,在右键菜单中选择“属性”,在弹出的属性框中找到ID,并将其修改为IDC_BOARD,如下图:

同理,从工具箱中将Button拖拽到对话框上,修改其ID为IDC_START,同时在属性框中修改其"Caption"为“开始新游戏”,如下图所示:

重复以上操作,再添加一个按钮,修改ID为IDC_SAVE,修改其Caption为“保存模型”,用来保存模型数据,结果如下图所示:

继续重复以上操作,再添加一个按钮用于退出程序,修改其ID为IDC_QUIT,修改其Caption为“退出”,结果如下图所示:

(3)导入SDK
如前文所述一样,打开源代码所在的目录,将SDK文件(AIWZQDll.dll、AIWZQDll.lib、Inter.h)拷贝到该目录,如下图:

然后,在解决方案资源管理器中右击test项目,在右键菜单中选择“添加-->现有项” ,在弹出的对话框中选中Inter.h并点击“添加”按钮即可。
(4)初始化神经网络
在解决方案资源管理器中双击testDlg.cpp文件,在显示的代码头部添加以下代码来引入SDK:
#include "Inter.h"
#pragma comment(lib, "AIWZQDll.lib")
结果显示如下:

在该文件中找到CtestDlg::OnInitDialog()函数,并调用Login()函数和InitFromModelFile()函数来初始化网络模型,登录失败时弹出提示对话框并退出程序,若没有找到模型文件,则调用InitWithoutModelFile()函数来初始化空模型:
if (!Login("user", "password"))
{
AfxMessageBox(_T("登录失败,请确保网络畅通且用户名与密码均正确"));
PostQuitMessage(0);
}
if (!InitFromModelFile("model.mod")) //使用模型文件初始化
InitWithoutModelFile(15, 15, 5); //初始化棋盘大小为15x15,五连子获胜(即五子棋)
结果如下所示:

(5)实现“开始新游戏”
打开testDlg.h文件,添加如下代码来定义棋盘变量:
CStatic m_objBoard;
结果如下图所示:

在testDlg.cpp文件中找到CtestDlg::DoDataExchange(CDataExchange* pDX)并添加如下代码来将变量m_objBoard的值绑定到ID为IDC_BOARD的控件上显示:
DDX_Control(pDX, IDC_BOARD, m_objBoard);
结果如下图所示:

在前面的界面上找到“开始新游戏”按钮,双击该按钮,会自动添加该按钮的单击事件,即C

本文详细介绍了一个面向家庭及机构的神经网络五子棋项目,涉及MFC对话框开发、人工落子、界面设计、SDK集成、模型保存与对战逻辑。通过实例演示了从创建项目到实现完整人机对战功能的详细步骤。
最低0.47元/天 解锁文章
2038

被折叠的 条评论
为什么被折叠?



