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

📄 myscript.h

📁 gamecode 很不错的小游戏源代码
💻 H
字号:
//************************************************************
//游戏脚本处理类
//作者:曾铮
//时间:2004年6月
//说明:用于实现脚本的读入和命令执行。
//*************************************************************
#ifndef MyScript_h_
#define MyScript_h_

/*设计说明:
在脚本中主要有两方面的内容:
1.有行号来标识的一条文本消息,用来在游戏中显示。
2.脚本命令,用来控制游戏加载图片,声音,以及相应事件引起角色属性的改变,如加钱,加经验等。

((!可能!))的一个方案示例:

[2023]								//注释:脚本开始标号
{这是一个愉快的节日,心情很好。		//显示在对话框中文本
{你获得了20 元,6点经验值			//在按键以后再显示文本
AM(20)								//加钱
AE(6)								//加经验
MU( "sound/sound.wav"				//加载声音文件
MP( "pics/pic.bmp"					//加载图象文件
ST(1)								//控制该角色停止1回合
END									//脚本结束符

上面除标号和END标识以外,其余应该是全部为可选,即有一项就执行一个命令,没有则无任何改变。

*/

#include "fstream.h"
#include "Myclasses/MyMessage.h"


class MyScript
{
private:
	int numofcomm;//脚本命令条数
	int curcomnum;//当前命令序列
	char* curcom;//当前处理命令
	char* temp;//临时空间
	ifstream scriptfile;//脚本文件流

public:
	MyScript();
	MyScript( char* filename);

	bool SearchScr(int num);//寻找num号脚本
	bool ReadLine();//读取一行脚本
	bool IsEndCom();//是否到了脚本文件末
	void ScriptAnalys();//解释当前脚本命令。(调用消息类中的putmsg(int ,char)来传递消息)

	//int PostMyMSG();//传递消息到消息队列
	void RunScript(int num);//执行索引号为num的脚本。用户接口
	void ErrorHandle();//脚本错误处理

	virtual ~MyScript();

};

MyScript::MyScript()
{
}

MyScript::MyScript(char* filename)
{
	this->scriptfile.open(filename);
	this->curcom = new char[1024];
	this->temp = new char[1024];
}

bool MyScript::ReadLine()
{
	this->scriptfile.getline(curcom,1024);
	if(this->curcom[0]=='!')			//脚本结束号。
		return false;
	else 
	{
		return true;
	}
}

bool MyScript::IsEndCom()
{
	if(!strcmp(curcom,"END"))//取得结尾符
	{
		return true;
	}
	return false;
}

bool MyScript::SearchScr(int num)
{
	do
	{
		if(this->ReadLine()==true)
		{
			if(this->curcom[0]=='[')
			{
				this->curcom[0]='0';
				int temp=atoi(this->curcom);
				if(temp==num)
					return true;				
			}
			else
				continue;	//继续查找。
		}
		else//没有这个脚本号
		{
			return false;
		}
		
	}while(true);
}

void MyScript::ScriptAnalys()
{
	int i=0;
	if(this->curcom[0]=='A' && this->curcom[1]=='M')
	{
		this->curcom[0]='0';
		this->curcom[1]='0';
		this->curcom[2]='0';
		int tempm=atoi(this->curcom);
		MyMessage::PutMSG(ADDMONEY,tempm);
		return ;
	}
	if(this->curcom[0]=='L' && this->curcom[1]=='M')
	{
		this->curcom[0]='0';
		this->curcom[1]='0';
		this->curcom[2]='0';
		int tempm=atoi(this->curcom);
		MyMessage::PutMSG(MINMONEY,tempm);
		return ;
	}
	if(this->curcom[0]=='A' && this->curcom[1]=='E')
	{
		this->curcom[0]='0';
		this->curcom[1]='0';
		this->curcom[2]='0';
		int tempe=atoi(this->curcom);
		MyMessage::PutMSG(ADDEXP,tempe);
		return ;
	}
	if(this->curcom[0]=='{')
	{
		this->curcom[0]=' ';
		MyMessage::PutMSG(SHOWMSG,this->curcom);
		return ;
	}
	if(this->curcom[0]=='P' && this->curcom[1]=='M')
	{
		this->curcom[0]='0';
		this->curcom[1]='0';
		this->curcom[2]='0';
		//??
		//MyMessage::PutMSG(ADDEXP,temp);
		return ;
	}

}

void MyScript::RunScript(int num)
{
	if(this->SearchScr(num)==true)
	{
		while(this->IsEndCom()!=true)
		{
			this->ScriptAnalys();
			this->ReadLine();
		}
		return ;
	}
	else
		return;
}

MyScript::~MyScript()
{
	this->scriptfile.close();
	delete[] this->curcom;
	delete[] this->temp;
}

#endif

⌨️ 快捷键说明

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