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

📄 script.h

📁 用MFC写的RPG游戏
💻 H
字号:
//
// 执行Script
//
//		Copyright (c) 2000-2001 Chihiro.SAKAMOTO (HyperWorks)
//
#ifndef	__script_h__
#define	__script_h__

#include "Action.h"
#include "Misc.h"
#include "Params.h"
#include "TextReader.h"
#include "Lexer.h"
#include "less.h"

class CMainWin;

//
// Script class
//
class CScriptAction: public CAction {
  protected:
	// 状态
	enum	{
		BreakGame = -1,
		Continue = 0,
		WaitNextIdle,
		WaitKeyPressed,
		WaitTimeOut,
		WaitMenuDone,
		WaitWipeDone,
		WaitWaveDone,
	} ;

	// CG位置
	enum	{
		POSITION_BACK,
		POSITION_BACKONLY,
		POSITION_OVERLAP,
	} ;

	// Update Code
	enum	{
		UPDATE_NOW,
		UPDATE_OVERLAP,
		UPDATE_WIPE,
	} ;

  public:
	// Mode flag
	enum	{
		MODE_SYSTEM,
		MODE_SCENARIO,
	} ;

  protected:
	typedef int (CScriptAction::*cmd_t)(Lexer &);
	typedef pair<const char *, cmd_t>	CmdTab;
	typedef map<const char *, cmd_t, ic_less>	cmdmap;
	typedef map<string, int, ics_less>	labelmap;

  public:
	CScriptAction(CMainWin *win, CAction *oldAction, int mode);
	~CScriptAction();

	virtual	void Pause();
	virtual	void Resume();

	virtual	void LButtonDown(UINT modKeys, CPoint point);
	virtual	void LButtonUp(UINT modKeys, CPoint point);
	virtual	void RButtonDown(UINT modKeys, CPoint point);
	virtual	void MouseMove(UINT modKeys, CPoint point);

	virtual	void KeyDown(UINT key);
	virtual bool TimedOut(int timerId);

	virtual BOOL IdleAction();
	virtual void WipeDone();
	virtual void WaveDone();

	virtual BOOL IsSaveLoadOK() const;
	virtual void Abort();

	BOOL Setup(CParams &param);
	BOOL Load(const char *name);

  protected:
	char *__cdecl Format(const char *fmt,...);
	bool LoadFile(const char *name);
	int GotoCommand(const char *label);
	int LoadGraphic(const char *file, int pos);
	int UpdateImage(int flag);
	int Clear(int pos);

	int Step();
	cmd_t ParseCommand(Lexer &lexer);
	int ParserString(const char *str);

	int SetLabel(Lexer &lexer);
	int SetCmd(Lexer &lexer);
	int GotoCmd(Lexer &lexer);
	int IfCmd(Lexer &lexer);
	int MenuCmd(Lexer &lexer);
	int ExecCmd(Lexer &lexer);
	int LoadCmd(Lexer &lexer);
	int UpdateCmd(Lexer &lexer);
	int ClearCmd(Lexer &lexer);
	int WaitCmd(Lexer &lexer);
	int MusicCmd(Lexer &lexer);
	int SoundCmd(Lexer &lexer);
	int TextCmd(Lexer &lexer);
	int ModeCmd(Lexer &lexer);
	int SystemCmd(Lexer &lexer);
	int StopmCmd(Lexer &lexer);
	int FadeInCmd(Lexer &lexer);
	int FadeOutCmd(Lexer &lexer);
	int WipeInCmd(Lexer &lexer);
	int WipeOutCmd(Lexer &lexer);
	int CutInCmd(Lexer &lexer);
	int CutOutCmd(Lexer &lexer);
	int WhiteInCmd(Lexer &lexer);
	int WhiteOutCmd(Lexer &lexer);
	int FlashCmd(Lexer &lexer);
	int ShakeCmd(Lexer &lexer);
	int BattleCmd(Lexer &lexer);
	int EndCmd(Lexer &lexer);

	void __cdecl Error(const char *fmt, ...);

	bool GetValue(Lexer &lexer, int *value);
	bool ChkTermination(const char *str);
	bool ChkKeyword(const char *str, const char *keyword);
	int GetPosition(const char *str);
	int GetUpdateType(const char *str);

  protected:
	BOOL		Pressed;
	int			MenuSelect;
	int			PlayMode;
	string		MenuAnser;

	TextReader *reader;
	int			status;
	cmdmap		cmd_table;
	labelmap	label_table;
} ;

// inline 成员函数

inline BOOL CScriptAction::IsSaveLoadOK() const
{
	return PlayMode != MODE_SYSTEM && (status == WaitKeyPressed || status == WaitMenuDone);
}

#endif

⌨️ 快捷键说明

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