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

📄 cgpnode.cpp

📁 C人工智能游戏开发的一些实例源代码 C Game development in artificial intelligence source code of some examples
💻 CPP
字号:
//GPExample
//Copyright John Manslow
//29/09/2001

////////////////////////////////////////////////////////////
//Only when compiling under Windows
#include "stdafx.h"
#define new DEBUG_NEW
#define false FALSE
////////////////////////////////////////////////////////////

#include "CGPNode.h"
#include "CGP.h"
#include "assert.h"

//Information about the prototype list to enable nodes to register themselves
extern CGPNode **pPrototypeList;
extern unsigned long ulNumberOfPrototypes;

CGPNode::CGPNode()
{
	//Initialise the node's name
	psName=new char[25];
	sprintf(psName,"BaseClassNode");

	//Default properties
	ulNumberOfChildren=0;
	pChildren=NULL;
	nType=3;
}

CGPNode::~CGPNode()
{
	delete []psName;
}

int CGPNode::AddToPrototypeList()
{
	//This function is called wheever a node is constrcuted. First, a check is made to see if a node
	//of the same type is already present in the prototype list. If so, the new node is not added. If this
	//type is not yet represented in the prototype list, this node must be a prototype, so we add it
	unsigned long i;

	//Check to see if a node of this type is already listed
	int nIsIn=0;
	for(i=0;i<ulNumberOfPrototypes;i++)
	{
		if(pPrototypeList[i]->nType==nType)
		{
			nIsIn=1;
		}
	}

	//If not,
	if(!nIsIn)
	{
		//Create a new prototype list that does contain it
		CGPNode **pOldPrototypeList=pPrototypeList;
		ulNumberOfPrototypes++;
		pPrototypeList=new CGPNode*[ulNumberOfPrototypes];
		for(i=0;i<ulNumberOfPrototypes-1;i++)
		{
			pPrototypeList[i]=pOldPrototypeList[i];
		}
		pPrototypeList[i]=this;

		//Remeber to get rid of the old one!
		if(pOldPrototypeList!=NULL)
		{
			delete []pOldPrototypeList;
		}
	}
	return nIsIn;
}

CGPNode *CGPNode::pGetCopy(CGP*)
{
	//In real nodes, this function creates and returns an exact copy of of the class and its contents
	assert(false);
	return NULL;
}

double CGPNode::dEvaluate(void)
{
	//Forces the node to evaluate itself (see the header file for more detail, and one of the real nodes for a 
	//specific example)
	assert(false);
	return NULL;
}

char* CGPNode::psGetString(char*)
{
	//This function appends a string representing the function of the subprogram attached to this node to the string
	//passed to this function. See one of the real nodes for a concrete example
	assert(false);
	return NULL;
}

unsigned long CGPNode::ulGetNumberOfNodesInSubtree(unsigned long ulNodesFoundSoFar)
{
	//This function allows the calling function to count the number of nodes in the subprogram attached to this
	//node. Used mainly when mutation and crossover points.
	return ulNodesFoundSoFar;
}

void CGPNode::GetnthNode(unsigned long&,unsigned long,CGPNode**&)
{
	//This function gives a pointer to the nth node in the subtree attached to this node. Again, used mainly 
	//when mutation and crossover points.
}

⌨️ 快捷键说明

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