📄 myscript.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 + -