⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testpagedlg.cpp

📁 演示在角色扮演游戏中如何利用人工神经网络进行智能分类的训练
💻 CPP
字号:
// TestPageDlg.cpp : implementation file
//

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include "ANNApp.h"
#include "TestPageDlg.h"
#include "ANNAppPropSheet.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

static const COLORREF WinnerTextColor	= RGB(255, 0, 0);
static const COLORREF DefaultTextColor	= GetSysColor( COLOR_BTNTEXT );

/////////////////////////////////////////////////////////////////////////////
// CTestPageDlg property page

IMPLEMENT_DYNCREATE(CTestPageDlg, CPropertyPage)

CTestPageDlg::CTestPageDlg() : CPropertyPage(CTestPageDlg::IDD)
{
	//{{AFX_DATA_INIT(CTestPageDlg)
	m_strInput0 = _T("");
	m_strInput1 = _T("");
	m_strOut0 = _T("");
	m_strOut1 = _T("");
	m_strOut2 = _T("");
	m_strNNInfo = _T("");
	m_staticCL0 = _T("");
	m_staticCL03 = _T("");
	m_staticCL06 = _T("");
	m_staticCL09 = _T("");
	m_staticWP0 = _T("");
	m_staticWP03 = _T("");
	m_staticWP06 = _T("");
	m_staticWP09 = _T("");
	//}}AFX_DATA_INIT
}

CTestPageDlg::~CTestPageDlg()
{
}

void CTestPageDlg::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTestPageDlg)
	DDX_Control(pDX, IDC_STATIC_OUT2, m_staticOut2);
	DDX_Control(pDX, IDC_STATIC_OUT1, m_staticOut1);
	DDX_Control(pDX, IDC_STATIC_OUT0, m_staticOut0);
	DDX_Control(pDX, IDC_SLIDER_WEAPON, m_sliderInput1);
	DDX_Control(pDX, IDC_SLIDER_CLOTHING, m_sliderInput0);
	DDX_Text(pDX, IDC_EDIT_INPUT0, m_strInput0);
	DDX_Text(pDX, IDC_EDIT_INPUT1, m_strInput1);
	DDX_Text(pDX, IDC_EDIT_OUT0, m_strOut0);
	DDX_Text(pDX, IDC_EDIT_OUT1, m_strOut1);
	DDX_Text(pDX, IDC_EDIT_OUT2, m_strOut2);
	DDX_Text(pDX, IDC_STATIC_NNINFO, m_strNNInfo);
	DDX_Text(pDX, IDC_STATIC_CL0, m_staticCL0);
	DDX_Text(pDX, IDC_STATIC_CL03, m_staticCL03);
	DDX_Text(pDX, IDC_STATIC_CL06, m_staticCL06);
	DDX_Text(pDX, IDC_STATIC_CL09, m_staticCL09);
	DDX_Text(pDX, IDC_STATIC_WP0, m_staticWP0);
	DDX_Text(pDX, IDC_STATIC_WP03, m_staticWP03);
	DDX_Text(pDX, IDC_STATIC_WP06, m_staticWP06);
	DDX_Text(pDX, IDC_STATIC_WP09, m_staticWP09);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CTestPageDlg, CPropertyPage)
	//{{AFX_MSG_MAP(CTestPageDlg)
	ON_BN_CLICKED(IDC_BUTTON_RUN, OnButtonRun)
	ON_WM_HSCROLL()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTestPageDlg message handlers

BOOL CTestPageDlg::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();

	// init sliders
	m_sliderInput0.SetRange(0, 10);
	m_sliderInput1.SetRange(0, 10);

	m_sliderInput0.SetPos(3);
	m_sliderInput1.SetPos(6);

	double pct0 = (double)m_sliderInput0.GetPos() / m_sliderInput0.GetRangeMax();
	m_strInput0.Format("%2.2f", pct0);

	double pct1 = (double)m_sliderInput1.GetPos() / m_sliderInput1.GetRangeMax();
	m_strInput1.Format("%2.2f", pct1);

	m_staticCL0  = gClothingStr[0];
	m_staticCL03 = gClothingStr[3];
	m_staticCL06 = gClothingStr[6];
	m_staticCL09 = gClothingStr[9];

	m_staticWP0  = gWeaponStr[0];
	m_staticWP03 = gWeaponStr[3];
	m_staticWP06 = gWeaponStr[6];
	m_staticWP09 = gWeaponStr[9];

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}


void CTestPageDlg::enableControls(BOOL enable)
{

	GetDlgItem(IDC_SLIDER_CLOTHING)->EnableWindow(enable);
	GetDlgItem(IDC_SLIDER_WEAPON)->EnableWindow(enable);
	GetDlgItem(IDC_BUTTON_RUN)->EnableWindow(enable);
}


BOOL CTestPageDlg::OnSetActive() 
{
	CANNAppPropSheet* pSheet = (CANNAppPropSheet*)GetParent();
	_nnFilename = pSheet->getNNFilename();
	BOOL enable = (_nnFilename.GetLength() != 0);
	
	// load neural network
	if (enable)
	{
		ifstream ist(_nnFilename);
		if (_bpnet.load(ist) == false)
		{
			MessageBox("Error loading neural network", "Error", MB_ICONERROR);
			enable = false;
		}
		else
			m_strNNInfo.Format("Network Loaded: %d Inputs, %d Hidden units, %d Outputs", _bpnet.getNumNodes(0), _bpnet.getNumNodes(1), _bpnet.getNumNodes(2));
	}
	else
		m_strNNInfo = "No Network Loaded";

	
	enableControls( enable );

	UpdateData(FALSE);

	return CPropertyPage::OnSetActive();
}



void CTestPageDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	CSliderCtrl* pSlider = (CSliderCtrl*)pScrollBar;

	double pct = (double)pSlider->GetPos() / pSlider->GetRangeMax();

	int sliderId = pScrollBar->GetDlgCtrlID();
	if ( sliderId == IDC_SLIDER_CLOTHING )
	{
		m_strInput0.Format("%2.2f", pct);
	}
	else
	if ( sliderId == IDC_SLIDER_WEAPON )
	{
		m_strInput1.Format("%2.2f", pct);
	}	

	UpdateData(FALSE);

	CPropertyPage::OnHScroll(nSBCode, nPos, pScrollBar);
}


void CTestPageDlg::OnButtonRun() 
{
	UpdateData();

	double input0 = (double)m_sliderInput0.GetPos() / m_sliderInput0.GetRangeMax();
	double input1 = (double)m_sliderInput1.GetPos() / m_sliderInput1.GetRangeMax();
	
	// set input values
	_bpnet.setInput(input0, 0);
	_bpnet.setInput(input1, 1);

	// forward-pass
	_bpnet.run();

	// get output values
	double out0 = _bpnet.getOutput(0);
	double out1 = _bpnet.getOutput(1);
	double out2 = _bpnet.getOutput(2);

	m_strOut0.Format("%2.2f", out0);
	m_strOut1.Format("%2.2f", out1);
	m_strOut2.Format("%2.2f", out2);

	double maxOut = max(out0, max(out1, out2));

	if (out0 == maxOut)
		m_staticOut0.SetTextColor(WinnerTextColor);
	else
		m_staticOut0.SetTextColor(DefaultTextColor);

	if (out1 == maxOut)
		m_staticOut1.SetTextColor(WinnerTextColor);
	else
		m_staticOut1.SetTextColor(DefaultTextColor);

	if (out2 == maxOut)
		m_staticOut2.SetTextColor(WinnerTextColor);
	else
		m_staticOut2.SetTextColor(DefaultTextColor);

	UpdateData(FALSE);

	InvalidateRect(NULL, FALSE);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -