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

📄 mircore.cpp

📁 一款新游戏的原代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#pragma comment( lib, "ws2_32.lib" )
#include <winsock2.h>
#include <windowsx.h>
#include <stdlib.h>
#include <stdio.h>
#include "mircode.h"
typedef struct
{
	union
	{
		DWORD	dwFlag;
		struct
		{
			WORD	wa;
			WORD	wb;
		};
	};

	WORD	wCmd;
	WORD	w1;
	WORD	w2;
	WORD	w3;
	char	data[1024];
}MMSG;


#define CGIP	"61.152.97.21"
#define ACCOUNT		"johndragon"
#define PASSWORD	"shifully"
#define WORDS		"各个姐姐弟弟妹妹们,你们好,我是机器人,请多关照!!"

char	g_msgflag	=	'1';
char	rcBuffer[4096];
typedef char	TSTRING[256];
TSTRING	g_StringList[20];
int		g_pos_x, g_pos_y;
char	g_mapname[256];

#define	MSGHEADERSIZE	12
#define	MSGLENGTH	1024
#define	MSGQUEUELEN	256
typedef char	TMSGLINE[MSGLENGTH];
enum _action
{
	ACTION_STAND,
	ACTION_WALK,
	ACTION_ATTACK,
	ACTION_RUN,
	ACTION_TRUN,
};
typedef struct
{
	int x;
	int y;
	int dir;
	int action;
}ACTION_LAST;

ACTION_LAST	g_LastAction = {0, 0, 0, 0 };
class CMsgQueue  
{
public:
	CMsgQueue()
	{
		m_iGet = 0;
		m_iPut = 0;
		Clear();
	};
	virtual ~CMsgQueue()
	{
		Clear();
	};
	int NextPos( int now )
	{
		now++;
		if( now >= MSGQUEUELEN )
			now = 0;
		return now;
	}
	int	PutMsg( char * pMsg )
	{
		int iNext = NextPos( m_iPut );

		if( pMsg == NULL )
			return 0;
		if( iNext == m_iGet )
		{
			return 0;
		}
		strcpy( m_Msgs[m_iPut], pMsg );
		m_iPut = iNext;
		return 1;
	};

	int GetMsg( char * pMsg )
	{
		if( m_iGet == m_iPut )
			return 0;
		strcpy( pMsg, m_Msgs[m_iGet] );
//		printf( "m_iPut = %d, m_iGet = %d\n", m_iPut, m_iGet );
		m_iGet = NextPos( m_iGet );
		return 1;
	};
	int	Clear()
	{
		memset( (void*)m_Msgs, 0, sizeof( TMSGLINE ) * MSGQUEUELEN );
		return 1;
	};
private:
	TMSGLINE	m_Msgs[MSGQUEUELEN];
	int			m_iGet;
	int			m_iPut;
};

CMsgQueue	g_MsgQueue;
HWND		m_hSysLog = NULL;
HWND		m_hChatLog = NULL;
HWND		m_hMainDlg = NULL;
int			m_MaxLogLine = 100;

BOOL	InitMirCore( HWND	hMainWnd, HWND	hSysLog, HWND	hChatLog, int MaxLogLine )
{
	m_hSysLog = hSysLog;
	m_hChatLog = hChatLog;
	m_hMainDlg = hMainWnd;
	m_MaxLogLine = MaxLogLine;
	return TRUE;
}
void	LogToList( HWND hList, char * line )
{
	int cnt = 0;
	cnt = ListBox_GetCount( hList );
	if( cnt >= m_MaxLogLine )
	{
		ListBox_DeleteString( hList, 0 );
		cnt --;
	}
	ListBox_AddString( hList, line );
	ListBox_SetCurSel( hList, cnt );
}

void	LogChat( char * line,... )
{
	char	szBuff[2048];
	va_list	vl;
	va_start( vl, line );
	vsprintf( szBuff, line, vl );
	va_end( vl);
	LogToList( m_hChatLog, szBuff );
}

void	LogSystem( char * line,... )
{
	char	szBuff[2048];
	va_list	vl;
	va_start( vl, line );
	vsprintf( szBuff, line, vl );
	va_end( vl);
	LogToList( m_hSysLog, szBuff );
}

int ActionOk()
{
	printf( "Action Ok!\n" );
	switch( g_LastAction.action )
	{
	case	ACTION_RUN:
	case	ACTION_WALK:
		g_pos_x = g_LastAction.x;
		g_pos_y = g_LastAction.y;
		break;
	}
	g_LastAction.action = 0;

	return 1;
}
int ActionFail()
{
	printf( "Action Fail!\n" );
	g_LastAction.action = 0;
	return 1;
}
int CanDoAction()
{
	if( g_LastAction.action == 0 )
		return 1;
	return 0;
}
int GetString( char * string )
{
	int ilen = strlen( string );
	int i = 0;
	int cnt = 0;
	int sptr = 0;
	for( i =0;i < ilen;i ++ )
	{
		if( string[i] == '/' && i != 0 )
		{
			g_StringList[cnt][sptr] = '\0';
			sptr = 0;
			cnt++;
		}
		else
		{
			g_StringList[cnt][sptr] = string[i];
			sptr ++;
		}
	}
	if( sptr > 0 )
	{
		g_StringList[cnt][sptr] = '\0';
		cnt++;
	}
	return cnt;
}
int SendString( SOCKET s, char * string )
{
	int ierr = 0;
	int ilen = strlen( string );
//	printf( "Send: %s\n", string );
	ierr = send( s, string, strlen( string), 0 );
	if( ierr == ilen )
	{
		g_msgflag ++;
		if( g_msgflag > '9' )
			g_msgflag = '1';
	}
	return ierr;
}
int RecvString( SOCKET s, char * string, int maxlen )
{
	int ierr = 0;
	char	tmpBuffer[2048];
	ierr = recv( s, tmpBuffer, 2048, 0 );
	if( ierr !=- 1)
	{
		if( tmpBuffer[0] == '*' )
		{
			strcpy( string, &tmpBuffer[1]);
			ierr --;
		}
		else
		{
			strcpy( string, tmpBuffer );
		}
		string[ierr] = '\0';
//		printf( "Recv:%s\n", string );
	}
	return ierr;
}
int RecvMsg( SOCKET s, MMSG * pmsg )
{
	char tmpBuffer[2048];
//	char tmpBuffer2[2048];
	int ierr;
	ierr = RecvString( s, tmpBuffer, 2048 );
	if( ierr == -1 )
	{
		return -1;
	}
	if(tmpBuffer[ierr-1] == '!' )
	{
		tmpBuffer[ierr-1] = '\0';
	}
	UnGameCode( &tmpBuffer[1], (BYTE*)pmsg );
	if( pmsg->wCmd == 0x0a )
	{
		//printf( "Code is %s\n", tmpBuffer );
	}
	return ierr;
}
int GetMsg( MMSG * pMsg )
{
	char	tmpBuffer[1024];
	int ilen = 0;
	if( g_MsgQueue.GetMsg( tmpBuffer ))
	{
		ilen = strlen( tmpBuffer );
		if( tmpBuffer[ilen-1] == '!' )
		{
			tmpBuffer[ilen-1] = '\0';
		}
		printf( "Msg: %s\n", tmpBuffer );
		if( tmpBuffer[1] == '+' )
		{
			tmpBuffer[6] = '\0';
			printf( "GetWords %s\n", tmpBuffer );
			if( stricmp( tmpBuffer, "#+GOOD" ) == 0 )
			{
				ActionOk();
			}
			else if( stricmp( tmpBuffer, "#+FAIL" ) == 0 )
			{
				ActionFail();
			}
			return 0;
			
		}
		UnGameCode( &tmpBuffer[1], (BYTE*)pMsg );
		return 1;	
	}
	return 0;
}
int SetNoBlock( SOCKET s )
{
	unsigned long mode = 1;
	if( ioctlsocket( s, FIONBIO, &mode ) == -1 )
		return 0;
	return 1;
}
int RecvGateMsg( SOCKET s, MMSG * pmsg )
{
	char tmpBuffer[2048];
	char tmpBuffer2[2048];
	int ierr;
	ierr = RecvString( s, tmpBuffer, 2048 );
	if( ierr == -1 )
	{
		return -1;
	}
	tmpBuffer[ierr-1] = '\0';

	UnGateCode( &tmpBuffer[1], tmpBuffer2 );
	ierr = strlen( tmpBuffer2 );

	if(tmpBuffer2[ierr-1] == '!' )
	{
		tmpBuffer2[ierr-1] = '\0';
	}
	UnGameCode( &tmpBuffer2[1], (BYTE*)pmsg );
	return ierr;

}
int SendMsg( SOCKET s, MMSG * pmsg )
{
	char	tmpBuffer[2048];
	char	tmpBuffer2[2048];
	int msize = 0;
	msize = strlen(pmsg->data ) + MSGHEADERSIZE;

	CodeGameCode( (BYTE*)pmsg, msize, (BYTE*)tmpBuffer );
	sprintf( tmpBuffer2, "#%c%s!",g_msgflag, tmpBuffer );
	return SendString( s,tmpBuffer2 );
}

int SendGateMsg( SOCKET s, MMSG * pmsg )
{
	char	tmpBuffer[2048];
	char	tmpBuffer2[2048];
	int msize = 0;
	msize = strlen(pmsg->data ) + MSGHEADERSIZE;

	CodeGameCode( (BYTE*)pmsg, msize, (BYTE*)tmpBuffer );
	sprintf( tmpBuffer2, "#%c%s!",g_msgflag, tmpBuffer );
	CodeGateCode( tmpBuffer2, tmpBuffer );
	sprintf( tmpBuffer2, "<%s>", tmpBuffer );

	return SendString( s, tmpBuffer2 );
}
int SendWords( SOCKET  s , char * word )
{
	MMSG msg;
	memset( &msg, 0, sizeof( MMSG ));
	sprintf( msg.data, "#(%03d,%03d)-%s", g_pos_x, g_pos_y, word );
	msg.wCmd = 0xbd6;
	int erri;
	erri = SendMsg( s, &msg );
	return erri;
}
int TurnDirect( SOCKET s, int dir )
{
	MMSG msg;
	char	tmpBuffer[2048];
	int erri;
	memset( &msg, 0, sizeof( MMSG ));
	//msg.dwFlag = 0x6000e;
	msg.wa = g_pos_x;
	msg.wb = g_pos_y;
	msg.wCmd = 0xbc2;
	msg.w2 = dir;
	erri = SendMsg( s, &msg );
	if( erri == -1 )
		return -1;
	erri = RecvString( s, tmpBuffer, 256 );
	if( erri == -1 )
		return 0;
	//printf( "%s\n", tmpBuffer );
	tmpBuffer[6] = '\0';
	if( stricmp( &tmpBuffer[1] ,"+GOOD") == 0 )
	{
		//g_pos_x += xofs_walk[dir];
		//g_pos_y += yofs_walk[dir];
		return 1;
	}
	return 0;
}
int	xofs_walk[] = { 0, 1, 1, 1, 0, -1, -1, -1 };
int yofs_walk[] = { -1, -1, 0, 1, 1, 1, 0, -1 };

int Walk( SOCKET s, int dir )
{
	MMSG msg;
	char	tmpBuffer[2048];
	int erri;
	int tx,ty;
	if( dir <0 || dir > 7 )
		return 0;
	tx = g_pos_x + xofs_walk[dir];
	ty = g_pos_y + yofs_walk[dir];
	memset( &msg, 0, sizeof( MMSG ));
	//msg.dwFlag = 0x6000e;
	msg.wa = tx;//g_pos_x;
	msg.wb = ty;//g_pos_y;
	msg.wCmd = 0xbc3;
	msg.w2 = dir;
	erri = SendMsg( s, &msg );
	if( erri == -1 )
		return -1;
	erri = RecvString( s, tmpBuffer, 256 );
	if( erri == -1 )
		return 0;
//	printf( "%s\n", tmpBuffer );
	tmpBuffer[6] = '\0';
	if( stricmp( &tmpBuffer[1] ,"+GOOD") == 0 )
	{
		printf( "Good!!\n" );
		g_pos_x = tx;// xofs_walk[dir];
		g_pos_y = ty;//+= yofs_walk[dir];
		return 1;
	}
	return 0;
}
int Run( SOCKET s, int dir )
{

⌨️ 快捷键说明

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