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

📄 script.cpp.svn-base

📁 自己做的小游戏
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
				if(strstr(line,"Name"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					strcpy(got.name,token);
				}

				else if(strstr(line,"attackDist"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					got.obj.attackDist = atoi(token);
				}

				else if(strstr(line,"earDist"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					got.obj.earDist = atoi(token);
				}

				else if(strstr(line,"eyeDist"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					got.obj.eyeDist = atoi(token);
				}

				else if(strstr(line,"eyeDist"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					got.obj.eyeDist = atoi(token);
				}

				else if(strstr(line,"moveSpeed"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					got.obj.moveSpeed = atof(token);
				}

				else if(strstr(line,"health"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					got.obj.health = atoi(token);
				}

				else if(strstr(line,"maxHealth"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					got.obj.maxHealth = atoi(token);
				}

				else if(strstr(line,"aggressivity"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					got.obj.aggressivity = atoi(token);
				}

				else if(strstr(line,"Model"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					//got.obj.model = new MDLModel();
					//got.obj.model->Init((char*)rtrim(token));
					//got.obj.model->SetSeq(WALK);
					strcpy(got.modelPath,token); 
				}

				else{continue;}
			}

			enemyType.push_back(got);
			continue;
		}
	}

	fclose(pEnemy);
	return true;
}

//从子脚本中读取关卡敌人设定
bool Script::LoadEnemyPos(char *enemyPos_path)
{
	int x,z;
	FILE *pEnemyPos = NULL;
	char line[MAX_LINE_SIZE];	//当前行
	char *token = NULL;	//用于字符串处理

	pEnemyPos = fopen(enemyPos_path,"r");

	if(pEnemyPos == NULL)
	{
		MessageBox(NULL,NULL,"Open ini file Failed",NULL);
		return false;
	}

	while (!feof(pEnemyPos)) //文件结束,退出处理
	{
		fgets(line,MAX_LINE_SIZE,pEnemyPos);

		if(strstr(line,"#End")) //读到"#End",退出处理
		{
			break;
		}
		
		//忽略注释行
		else if(strstr(line,"//"))
		{continue;}

		else if(strstr(line,"@Enemy"))
		{
			GameObject obj;
			obj.attackDist = 25;
			obj.earDist = 50;
			obj.eyeDist = 100;
			obj.moveSpeed = 0.005f;
			obj.health = 100;
			obj.maxHealth = 100;
			obj.aggressivity = 1;
			obj.model = new MDLModel();
			obj.model->Init("../Data/model/zombie.mdl");
			obj.model->SetSequence("walk");
			while(!strstr(line,"@/Enemy"))
			{
				fgets(line,MAX_LINE_SIZE,pEnemyPos);

				if(strstr(line,"Position"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					x = atoi(token);
					token = strtok(NULL," ");
					z = atoi(token);
					obj.pos.x = x;
					obj.pos.z = z;
					obj.pos.y = map.getHeight(x,z);
					float min[3];
					float max[3];
					obj.model->ExtractBbox(min,max);
					obj.lenX = (max[0]-min[0])*0.03;
					obj.lenY = (max[1]-min[1])*0.15;
					obj.lenZ = (max[2]-min[2])*0.03;
				}

				else if(strstr(line,"Type"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					list<GameObjType>::iterator i=enemyType.begin();
					while(i!=enemyType.end())
					{
						if(strstr(i->name,token))
						{
							obj.aggressivity = i->obj.aggressivity;
							obj.attackDist = i->obj.attackDist;
							obj.earDist = i->obj.earDist;
							obj.eyeDist = i->obj.eyeDist;
							obj.health = i->obj.health;
							obj.maxHealth = i->obj.maxHealth;
							obj.model = new MDLModel();
							obj.model->Init((char*)rtrim((char*)(i->modelPath)));
							obj.model->SetSeq(WALK);
							break;
						}
						i++;
					}
				}

				else {continue;}

			}

			//加到敌人链表
			units.push_back(obj);
		}
	}

	fclose(pEnemyPos);
	return true;
}

//读取关卡树设定
bool Script::LoadTreeTypes(char *tree_path)
{
	FILE *pTree = NULL;
	char line[MAX_LINE_SIZE];	//当前行
	char *token = NULL;	//用于字符串处理

	pTree = fopen(tree_path,"r");

	if(pTree == NULL)
	{
		MessageBox(NULL,NULL,"Open ini file Failed",NULL);
		return false;
	}

	while (!feof(pTree)) //文件结束,退出处理
	{
		fgets(line,MAX_LINE_SIZE,pTree);

		if(strstr(line,"#End")) //读到"#End",退出处理
		{
			break;
		}
		
		//忽略注释行
		else if(strstr(line,"//"))
		{continue;}

		else if(strstr(line,"@TreeType"))
		{
			TreeType t;
			while(!strstr(line,"@/TreeType"))
			{
				fgets(line,MAX_LINE_SIZE,pTree);

				if(strstr(line,"Name"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					strcpy(t.name,token);
				}

				if(strstr(line,"base0"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					t.ti.base[0] = token;
				}

				else if(strstr(line,"base1"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					t.ti.base[1] = token;
				}
			
				else if(strstr(line,"base2"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					t.ti.base[2] = token;
				}

				else if(strstr(line,"numBase"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					t.ti.numBase = atoi(token);
				}

				else if(strstr(line,"maxAlpha"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					t.ti.maxAlpha = atoi(token);
				}

				else if(strstr(line,"minAlpha"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					t.ti.minAlpha = atoi(token);
				}

				else if(strstr(line,"maxBeta"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					t.ti.maxBeta = atoi(token);
				}

				else if(strstr(line,"minBeta"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					t.ti.minBeta = atoi(token);
				}

				else if(strstr(line,"depth"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					t.ti.depth = atoi(token);
				}
			
				else if(strstr(line,"radius"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					t.ti.r= atof(token);
				}
			
				else if(strstr(line,"rfade"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					t.ti.rfade= atof(token);
				}

				else if(strstr(line,"length"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					t.ti.l = atof(token);
				}

				else if(strstr(line,"lfade"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					t.ti.lfade = atof(token);
				}		
					
				else if(strstr(line,"bfade"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					t.ti.bfade = atof(token);
				}	

				else if(strstr(line,"sizeleaf"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					t.ti.sizeleaf = atof(token);
				}	

				else{continue;}
			}

			treeType.push_back(t);
			continue;
		}
	}

	fclose(pTree);
	return true;
}

//从子脚本中读取每一棵树的具体设定
bool Script::LoadTreePos(char *treePos_path)
{
	FILE *pTreePos = NULL;
	char line[MAX_LINE_SIZE];	//当前行
	char *token = NULL;	//用于字符串处理
	int x,y,z;  //坐标

	pTreePos = fopen(treePos_path,"r");

	if(pTreePos == NULL)
	{
		MessageBox(NULL,NULL,"Open ini file Failed",NULL);
		return false;
	}

	while (!feof(pTreePos)) //文件结束,退出处理
	{
		fgets(line,MAX_LINE_SIZE,pTreePos);

		if(strstr(line,"#End")) //读到"#End",退出处理
		{
			break;
		}
		
		//忽略注释行
		else if(strstr(line,"//"))
		{continue;}

		else if(strstr(line,"@Tree"))
		{
			TreeInfo *ti;
			while(!strstr(line,"@/Tree"))
			{
				fgets(line,MAX_LINE_SIZE,pTreePos);

				if(strstr(line,"Position"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					x = atoi(token);
					token = strtok(NULL," ");
					z = atoi(token);
					y = map.getHeight(x,z);
				}

				else if(strstr(line,"Type"))
				{
					token=strtok(line," ");
					token=strtok(NULL," ");
					list<TreeType>::iterator i=treeType.begin();
					while(i!=treeType.end())
					{
						if(strstr(i->name,token))
						{
							ti = &(i->ti);
							Tree *tr = new Tree();
							tr->center.x = x;
							tr->center.y = y;
							tr->center.z = z;
							tr->InitTree(ti);
							tr->InitTreeInfo();
							tr->BuildTree();
							trees.push_back(*tr);
							break;
						}
						i++;
					}
				}

				else {continue;}

			}

			continue;
		}
	}

	fclose(pTreePos);
	return true;
}

//截取字符串中的有效路径并返回const char*
const char* Script::rtrim(char s[MAX_LINE_SIZE]) 
{ 
	const char* tmp;
	int i;
	for(i = 0;i<MAX_LINE_SIZE;i++)
	{
		if(s[i]=='\n'||s[i]=='\0')
		{
			s[i]=NULL;
			break;
		}
	}
	tmp = s;
	return tmp;
}

⌨️ 快捷键说明

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