📄 userinfo.cpp
字号:
// UserInfo.cpp : implementation file
//
#include "stdafx.h"
#include "pictalk.h"
#include "UserInfo.h"
#include "pictalkDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CUserInfo
CUserInfo::CUserInfo(CWnd *pWnd)
{
m_pWnd=pWnd;
m_Name="";
m_pic=1;
m_ID=0;
m_state=1;
m_x=12;
m_y=12;
m_bSit=FALSE;
m_MsgCount=0;
m_Place=CRect(0,0,54,78);
m_bTurn=FALSE;
m_PicNum=0;
m_Visit=0;
}
CUserInfo::~CUserInfo()
{
m_pPW->draw(&m_Place,&m_Place);
}
BEGIN_MESSAGE_MAP(CUserInfo, CWnd)
//{{AFX_MSG_MAP(CUserInfo)
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CUserInfo message handlers
void CUserInfo::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch(nIDEvent)
{
case(1)://judge
DoSet();
m_iAniSeq--;
break;
case(2)://walk
DoWalk();
break;
case(3)://idle
DoSay();
break;
case(4)://run
DoSingleCom();
break;
/* case(5):
DoHide();
break;
case(6):
DoShow();
break;
case(7):
DoWaitShow();
break;*/
default:
break;
}
m_iAniSeq++;
CWnd::OnTimer(nIDEvent);
}
void CUserInfo::ShowUser()
{
CreateEx( 0,
AfxRegisterWndClass(0,AfxGetApp()->LoadStandardCursor(IDC_ARROW)),
"",
WS_CHILD | WS_TABSTOP,
CRect(0,0,1,1),
m_pWnd,
NULL,
NULL );
m_Place+=CPoint(PX(m_x,m_y),PY(m_x,m_y));
SetTimer(1,300,NULL);
m_bSet=FALSE;
}
void CUserInfo::DoSet()
{
CRect oldRect;
if(m_ComArray.GetSize()==0)
{
if(m_bSet)
return;
m_bSet=TRUE;
switch(m_state)
{
case(1):
if(m_bSit)
m_PicNum=26;
else
m_PicNum=0;
m_bTurn=FALSE;
break;
case(4):
m_bTurn=TRUE;
if(m_bSit)
m_PicNum=26;
else
m_PicNum=0;
break;
case(2):
m_bTurn=FALSE;
if(m_bSit)
m_PicNum=27;
else
m_PicNum=9;
break;
case(3):
m_bTurn=TRUE;
if(m_bSit)
m_PicNum=27;
else
m_PicNum=9;
break;
}
oldRect=m_Place;
m_Place=CRect(CPoint(PX(m_x,m_y),PY(m_x,m_y)),CSize(54,78));
m_pPW->draw(&m_Place,&oldRect);
return;
}
KillTimer(1);
mcom &Msgcom=m_ComArray[0];
m_x=Msgcom.m_x;
m_y=Msgcom.m_y;
m_state=Msgcom.m_state;
m_bSit=Msgcom.m_bSit;
oldRect=m_Place;
m_Place=CRect(CPoint(PX(m_x,m_y),PY(m_x,m_y)),CSize(54,78));
m_pPW->draw(&m_Place,&oldRect);
switch(Msgcom.m_ComID)
{
case(11)://move
SetTimer(2,1,NULL);
m_iAniSeq=0;
m_bSet=FALSE;
break;
case(13)://turn
if(m_MsgCount)
m_MsgCount--;
m_bSet=FALSE;
SetTimer(1,10,NULL);
break;
case(12)://say
m_iAniSeq=0;
m_sen=Msgcom.m_Sen;
SetTimer(3,300,NULL);
break;
case(14)://smile
m_iAniSeq=0;
m_SingleBMP=12;
SetTimer(4,300,NULL);
break;
case(15)://angry
m_iAniSeq=0;
m_SingleBMP=14;
SetTimer(4,300,NULL);
break;
case(17)://cry
m_iAniSeq=0;
m_SingleBMP=18;
SetTimer(4,300,NULL);
break;
case(19)://挥手
m_iAniSeq=0;
m_SingleBMP=16;
SetTimer(4,300,NULL);
break;
case(16):
if(m_MsgCount)
m_MsgCount=0;
m_bSet=FALSE;
m_bSit=TRUE;
SetTimer(1,10,NULL);
break;
case(18):
if(m_MsgCount)
m_MsgCount=0;
m_bSet=FALSE;
m_bSit=FALSE;
SetTimer(1,10,NULL);
break;
}
m_ComArray.RemoveAt(0);
}
void CUserInfo::DoWalk()
{
CPoint offset;
CRect oldPlace=m_Place;
KillTimer(2);
SetTimer(2,150,NULL);
if(m_iAniSeq>=9)
{
switch(m_state)
{
case(1):
m_x--;break;
case(2):
m_x++;break;
case(3):
m_y--;break;
case(4):
m_y++;break;
}
KillTimer(2);
if(m_MsgCount)
m_MsgCount=0;
SetTimer(1,30,NULL);
m_iAniSeq--;
return;
}
if(m_iAniSeq<=0)
if(m_PicNum==1 || m_PicNum==8)
m_iAniSeq++;
switch(m_state)
{
case (1):
offset=CPoint(-4,2);
m_bTurn=FALSE;
m_PicNum=(m_iAniSeq%4)+1;
break;
case (2):
offset=CPoint(4,-2);
m_bTurn=FALSE;
m_PicNum=8-(m_iAniSeq%4);
break;
case (3):
offset=CPoint(-4,-2);
m_bTurn=TRUE;
m_PicNum=8-(m_iAniSeq%4);
break;
case (4):
offset=CPoint(4,2);
m_bTurn=TRUE;
m_PicNum=(m_iAniSeq%4)+1;
break;
}
if(m_iAniSeq!=0)
m_Place+=offset;
m_pPW->draw(&m_Place,&oldPlace);
}
void CUserInfo::DoSingleCom()
{
if(m_iAniSeq>=8)
{
KillTimer(4);
if(m_MsgCount)
m_MsgCount=0;
SetTimer(1,100,NULL);
m_bSet=FALSE;
}
m_PicNum=m_iAniSeq%2+m_SingleBMP;
switch(m_state)
{
case (1):
m_bTurn=FALSE;
break;
case (2):
m_bTurn=TRUE;
break;
case (3):
m_bTurn=FALSE;
break;
case (4):
m_bTurn=TRUE;
break;
}
m_pPW->draw(&m_Place,&m_Place);
}
void CUserInfo::DoSay()
{
if(m_iAniSeq>=8)
{
KillTimer(3);
if(m_MsgCount)
m_MsgCount=0;
SetTimer(1,100,NULL);
m_bSet=FALSE;
m_pPW->m_SenList.RemoveAt(m_SenPos);
m_pPW->draw(&m_SenPlace,&m_SenPlace);
}
if(m_iAniSeq<=0)
{
m_SenPos=m_pPW->AddSentence(this);
CString str;
str=m_Name+":"+m_sen;
((CPictalkDlg *)m_pWnd)->AddSenten(str);
}
switch(m_state)
{
case (1):
m_bTurn=FALSE;
if(m_bSit)
m_PicNum=m_iAniSeq%2+28;
else
m_PicNum=m_iAniSeq%2+10;
break;
case (2):
m_bTurn=FALSE;
if(m_bSit)
m_PicNum=m_iAniSeq%2+30;
else
m_PicNum=24+(m_iAniSeq%2);
break;
case (3):
m_bTurn=TRUE;
if(m_bSit)
m_PicNum=m_iAniSeq%2+30;
else
m_PicNum=24+(m_iAniSeq%2);
break;
case (4):
m_bTurn=TRUE;
if(m_bSit)
m_PicNum=m_iAniSeq%2+28;
else
m_PicNum=m_iAniSeq%2+10;
break;
}
m_pPW->draw(&m_Place,&m_Place);
}
HRGN CUserInfo::GetRgn()
{
return m_pPW->GetRgn(this);
}
BOOL CUserInfo::Check(UINT num)
{
// m_Visit=0;
BOOL res;
int i;
if(m_MapMsg.Lookup(num,res))
return FALSE;
m_MapMsg[num]=TRUE;
for(i=1;i<11;i++)
m_MapMsg.RemoveKey((num+i)%30);
return TRUE;
}
void CUserInfo::MsgCreate(mpack &Msgpack)
{
Msgpack.m_ID=m_ID;
Msgpack.m_state=m_state;
Msgpack.m_x=m_x;
Msgpack.m_y=m_y;
Msgpack.m_Name=m_Name;
Msgpack.m_bSit=m_bSit;
Msgpack.m_pic=m_pic;
Msgpack.m_IP=m_IP;
Msgpack.m_Name=m_Name;
Msgpack.m_nAge=m_nAge;
Msgpack.m_Sex=m_Sex;
Msgpack.m_ICQ=m_ICQ;
Msgpack.m_Job=m_Job;
Msgpack.m_Address=m_Address;
Msgpack.m_nPort=m_nPort;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -