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

📄 gdoc.cpp

📁 CMUD源码 用来玩MUD游戏的 没开发完
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			while(pos)
			{
				pos0=pos;
				pt=(CTriger*) m_listIf.GetNext(pos);
				if(pt->m_sID==s2)
				{
					pt->m_bActive=TRUE;
					EchoSend(cmd);
					break;
				}
			}
		}
		else if(s1=="#p"||s1=="#play")
		{
			Play(s2);
			EchoSend(cmd);
		}  
	}
	else 
	{	
		CString ret;
		if(GetDefine(s1,s2,ret))
		{
			strCmds=ret+";"+strCmds;
			Sending(strCmds);
		}
		else
			SendCmd(cmd);
	}
}

void CGDoc::SendTime(UINT nID)
{
	CMainFrame* pFrame=(CMainFrame*)AfxGetMainWnd();
	switch(nID)
	{
	case 2:	
		if(m_bWaiting)
		{
			pFrame->KillTimer(2);
			m_bWaiting=FALSE;
			pFrame->SetTimer(2,pFrame->m_nTime,NULL);
		}

		if(m_sScript.IsEmpty())
			if(m_sLoop.IsEmpty())
			{
				pFrame->KillTimer(2);
				break;
			}
			else
				m_sScript=m_sLoop;
		Sending(m_sScript);
		break;
	case 3:
		SendCmds(m_sTimer);
	}
}

BOOL CGDoc::GetDefine(CString s1, CString s2, CString &ret)
{
	POSITION pos=m_listDefine.GetHeadPosition();
	while(pos)
	{
		ret=m_listDefine.GetNext(pos);
		if(s1==ret.SpanExcluding("( "))
		{
			int m,n;
            n=ret.Find("(");
			m=ret.Find(")",n);
			CString ds1,ds2,s(ret.Mid(n+1,m-n-1)+",");
			ret=ret.Mid(m+1);
			if(!s2.IsEmpty())
			{
				s.Replace(","," ");
				s2+=" ";
				
				while(-1!=(n=s.Find(" ")))
				{
					ds1=s.Left(n);
					s=s.Mid(n);
					s.TrimLeft();
					
					m=s2.Find(" ");
					ds2=s2.Left(m);
					s2=s2.Mid(m);
					s2.TrimLeft();
					
					ret.Replace(" "+ds1," "+ds2);
				}
			}
			return TRUE;
		}
		
	}
	
	return FALSE;

}

CVar* CGDoc::FindVar(CString name)
{
	CVar* pv=NULL;
	POSITION pos=m_listVar.GetHeadPosition();
	while(pos)
	{
		pv=(CVar*)m_listVar.GetNext(pos);
		if(pv->m_sName==name)
			break;
		else
			pv=NULL;
	}
	return pv;
}

BOOL CGDoc::Check(CString cmd)
{
	if(!cmd.IsEmpty()&&-1!=m_sDirection.Find(cmd))
	{
		m_directBuffer.AddTail(cmd);
		if(m_directBuffer.GetCount()>50)
			m_directBuffer.RemoveHead();
		return TRUE;
	}
	return FALSE;

}

void CGDoc::OnBack() 
{
	if(!m_directBuffer.IsEmpty())
	{
		CString s=m_directBuffer.RemoveTail();
		s=Reverse(s);
		SendCmd(s,FALSE);
	}
	else
		::Beep(-1,1);	
}

CString CGDoc::Reverse(CString s)
{
	if(s=="north"||s=="n")
		s="south";
	else if(s=="south"||s=="s")
		s="north";
	else if(s=="west"||s=="w")
		s="east";
	else if(s=="east"||s=="e")
		s="west";
	else if(s=="northeast"||s=="ne")
		s="southwest";
	else if(s=="southwest"||s=="sw")
		s="northeast";
	else if(s=="northwest"||s=="nw")
		s="southeast";
	else if(s=="southeast"||s=="se")
		s="northwest";
	else if(s=="northup"||s=="nu")
		s="southdown";
	else if(s=="southdown"||s=="sd")
		s="northup";
	else if(s=="southup"||s=="su")
		s="northdown";
	else if(s=="westup"||s=="wu")
		s="eastdown";
	else if(s=="eastup"||s=="eu")
		s="westdown";
	else if(s=="westdown"||s=="wu")
		s="eastup";
	else if(s=="eastdown"||s=="eu")
		s="westup";
	else if(s=="enter")
		s="out";
	else if(s=="out")
		s="enter";
	else if(s=="up"||s=="u")
		s="down";
	else if(s=="down"||s=="d")
		s="up";
	return s;

}

void CGDoc::ExtractCmds(CString s, CStringList &list)
{	
	int count,n=-1;
	CString ss;
	do
	{
		s=s.Mid(n+1);
		ss=s.SpanExcluding(";");
		count=1;
		ss.TrimLeft();
		if('#'==ss.Left(1))
		{
			CString temp;
			int n=ss.Find(' ',1);
			if(n!=-1)
			{
				temp=ss.Mid(1,n-1);
				ss=ss.Mid(n+1);
			}
			else
				temp=ss.Mid(1);
			count=::atol(LPCTSTR(temp));
			
		}
		while(count--)
			list.AddTail(ss);
	}while(-1!=(n=s.Find(';')));

}

void CGDoc::OnConvert() 
{
	CString s0,s,fileName;
	CStringList sList0,sList;
	if(CMainFrame::GetFileName(fileName))
	{
		CStdioFile file(fileName,CFile::modeRead);
		while(file.ReadString(s))
			sList0.AddTail(s);
		file.Close();
		AfxMessageBox("转换结束,请选择储存文件:");
		if(CMainFrame::GetFileName(fileName,FALSE))
		{
			CString last,oneLine;
			int count;
			file.Open(fileName,CFile::modeCreate|CFile::modeWrite);
			POSITION pos0=sList0.GetTailPosition();
			while(pos0)
			{
				s0=sList0.GetPrev(pos0);
				sList.RemoveAll();
				/////////////////
				ExtractCmds(s0,sList);
				//////////////////
				last.Empty();
				oneLine.Empty();
				POSITION pos=sList.GetTailPosition();
				while(pos)
				{
					s=sList.GetPrev(pos);
					s=Reverse(s);
					if(last.IsEmpty())
					{
						last=s;
						count=0;
					}
					if(last==s)
						count++;
					if(last!=s)
					{
						if(count>1)
						{
							CString temp;
							temp.Format("#%d %s",count,last);
							last=temp;
						}
						oneLine+=last+";";
						last=s;
						count=1;
					}
				}
				if(count>1)
				{
					CString temp;
					temp.Format("#%d %s",count,last);
					last=temp;
				}
				oneLine+=last+"\n";
				file.WriteString(oneLine);
			}
			file.Close();
		}
	}		
}

void CGDoc::OnSaveRoutes() 
{
	if(m_directBuffer.IsEmpty())
	{
		AfxMessageBox("没有路径存储!");
		return;
	}
	CString name;
	if(CMainFrame::GetFileName(name,FALSE))
	{
		CStdioFile file(name,CFile::modeCreate|CFile::modeWrite);
        POSITION pos=m_directBuffer.GetHeadPosition();
		while(pos)
			file.WriteString(m_directBuffer.GetNext(pos)+"\n");

		file.Close();
	}
		
}

void CGDoc::OnClear() 
{
	m_directBuffer.RemoveAll();
	EchoSend("清除路径纪录");
}

void CGDoc::Play(CString s2)
{
	if(s2.IsEmpty())
	{
		PlaySound(NULL, NULL,0 );
		if(m_pMidi)
		{
			m_pMidi->Close();
			delete m_pMidi;
			m_pMidi=NULL;
		}
	}
	else
	{
        int n;
		CString s1;
		n=s2.ReverseFind('.');
		s1=s2.Mid(n+1);
		s1.MakeLower();
		if(s1=="mid")
		{
			if(m_pMidi)
				delete m_pMidi;
			m_pMidi=new CMidi;
			if(m_pMidi->Open(s2))
				m_pMidi->Play();
			else
			{
				delete m_pMidi;
				m_pMidi=NULL;
			}
		}
		else if(s1=="wav")
		{
	/*		if(m_pWave)
				delete m_pWave;
			m_pWave=new CWave(s2);
			if(m_pWave)
				m_pWave->Play();*/
			PlaySound(s2, NULL,	SND_FILENAME | SND_ASYNC | SND_NODEFAULT );
		}
		else
			EchoSend("无法播放!",31);
	}
}

void CGDoc::If(CString s1, CString s2)
{
	int m,n;
	CTriger* pt=NULL;
	POSITION pos=m_listIf.GetHeadPosition();
	while(pos)
	{
		pt=(CTriger*) m_listIf.GetNext(pos);
		if(pt->m_sID==s1)
			break;
		pt=NULL;
	}
	
	if(!s2.IsEmpty()) //s2不空,修改,增加if
	{
		CString temp;
		if(s2.Left(1)!="\"")  //是变量
		{
			CString a,c;
			n=s2.FindOneOf(">=<!");
			if(n!=-1)
			{
				a=s2.Left(n);
				s2=s2.Mid(n);
			}
			else
				a=s2.SpanExcluding(" ");
			c=s2.SpanIncluding(">=<!");
			m=s2.Find(" ");
			temp=c.IsEmpty()?"":s2.Mid(c.GetLength(),m-c.GetLength());
			s2=s2.Mid(m+1);
			if(!pt)
			{
				CTriger* pt=new CTriger;
				pt->Create(s1,a,c,temp,s2);
				m_listIf.AddTail(pt);
			}
			else
				pt->Create(s1,a,c,temp,s2);		
		}
		else  //是触发#if1 "skdj" c
		{
			s2=s2.Mid(1);
			temp=s2.SpanExcluding("\"");
			s2=s2.Mid(temp.GetLength()+1);
			s2.TrimLeft();
			if(!pt)
			{
				CTriger* pt=new CTriger;
				pt->Create(s1,"","=",temp,s2);
				m_listIf.AddTail(pt);
			}
			else
				pt->Create(s1,"","=",temp,s2);
		}
	}
	else if(pt) //s2空,找到 FALSE
		pt->m_bActive=FALSE;

}

void CGDoc::OnEnter()
{
	SendCmd("",FALSE);
}

void CGDoc::OnAuto() 
{
	CString name;
	if(CMainFrame::GetFileName(name))
		SendCmds("#read "+name);
}

void CGDoc::OnStopAuto() 
{
	SendCmds("#timer;#abort;#loop;#define;#if");
	int n=m_listVar.GetCount();
	CVar* pv;
	while(n--)
	{
		pv=(CVar*)m_listVar.RemoveTail();
		delete pv;
	}
	EchoSend("清除变量");
}

void CGDoc::OnAutoView() 
{
	CSdlg dlg(this);
	dlg.DoModal();
}

void CGDoc::Var(CString s1, CString s2)
{
	int n;
	CVar* pv=NULL;
	CString name,s,var;
	name=s2.SpanExcluding(" ");
	s2=s2.Mid(name.GetLength());
	s2.TrimLeft();
	if(s2.Left(1)!="\"")
	{
		var=s2;
		s2.Empty();		
	}
	else
	{
		s2.Replace("\"","");
		var=VARX;
		n=s2.Find(var);
		if(n!=-1)
		{
			s=s2.Left(n);
			s2=s2.Mid(n+var.GetLength());
		}
		else
		{
			EchoSend("错误");
			return;
		}
		var.Empty();
	}
	//是否已经存在
	POSITION pos=m_listVar.GetHeadPosition();
	while(pos)
	{
		pv=(CVar*)m_listVar.GetNext(pos);
		if(pv->m_sName==name)
			break;
		pv=NULL;
	}

	if(!pv)  //不存在
	{
		pv=new CVar;
		pv->Create(s1,name,s,s2,var);
		m_listVar.AddTail(pv);
	}
	else
		pv->Create(s1,name,s,s2,var);

}

LONG CGDoc::OnMciNotify(UINT wFlags, LONG lDevId)
{
	if (wFlags==MCI_NOTIFY_SUCCESSFUL)
	{
		Play(m_soundArray[m_nSound]);
		if (++m_nSound >= m_soundArray.GetSize())
			m_nSound = 0;

	}
	return 0L;
}

⌨️ 快捷键说明

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